Edit report at https://bugs.php.net/bug.php?id=53460&edit=1
ID: 53460 Updated by: m...@php.net Reported by: cameel2+php at gmail dot com Summary: glob() returns false for a pattern that matches zero files -Status: Open +Status: Feedback Type: Bug -Package: *Directory Services problems +Package: Filesystem function related Operating System: Arch Linux PHP Version: 5.3.3 Block user comment: N Private report: N New Comment: Check your open_basedir. Arch has it enabled by default. Please enable error_reporting and display_errors before reporting a bug in the future. Previous Comments: ------------------------------------------------------------------------ [2011-01-09 18:12:57] cameel2+php at gmail dot com Right. But in that case the script would be printing both 'false' and 'array'. It prints only 'false'. I have just added var_dump() at the end of the test case and now the output is: false bool(false) BTW: I am using PHP 5.3.5 now. ------------------------------------------------------------------------ [2011-01-09 17:56:43] 13550 at free dot fr "array() == false" is true because array is empty try var_dump($glob) to be sure that glob does not return an array ------------------------------------------------------------------------ [2010-12-03 17:41:27] cameel2+php at gmail dot com Yeah, I meant that since I tested it under Apache first and that directory is located in /srv/http, i.e. in the root directory of the server. But you're right - for php being run from command line I should have used relative path. Still, when I remove the leading slash and run cd /srv/http; php test.php the result is still false. This is a contrived example anyway. Originally I have noticed it in a more complex path. If I do touch /srv/http/phpMyAdmin/a.file the script starts printing 'array'. ------------------------------------------------------------------------ [2010-12-03 12:53:57] paj...@php.net Are you sure you mean $glob = glob('/phpMyAdmin/*'); and not $glob = glob('phpMyAdmin/*');? The sooner is an absolute path '/phpMyAdmin/', where the 2nd path is relative (to CWD). ------------------------------------------------------------------------ [2010-12-03 05:56:59] cameel2+php at gmail dot com Description: ------------ On my system the glob() returns false if there are no files matching the pattern even though the documentation (http://php.net/manual/en/function.glob.php) states that it should return an empty array. PHP version: 5.3.3 The only things I have changed in php.ini are open_basedir (/srv/http/:/home/:/usr/share/webapps:/etc/webapps:/tmp/:/usr/share/pear/:/usr/share/symfony) and enabling of several extensions (mcrypt, mysql, pdo, pdo_sqlite). I've seen similar bugs reported and closed a few years ago: #29928 Test script: --------------- <?php // phpMyAdmin is an empty, existing directory located in Apache root $glob = glob('/phpMyAdmin/*'); echo $glob == false ? "false\n" : ""; echo is_array($glob) ? "array\n" : ""; ?> Expected result: ---------------- glob() should return an empty array if no files match the pattern. Actual result: -------------- The script prints 'false' when run on my box (both under Apache 2.2.17 and with php from command line). ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=53460&edit=1