Edit report at http://bugs.php.net/bug.php?id=53460&edit=1

 ID:                 53460
 User updated by:    cameel2+php at gmail dot com
 Reported by:        cameel2+php at gmail dot com
 Summary:            glob() returns false for a pattern that matches zero
                     files
 Status:             Open
 Type:               Bug
-Package:            Filesystem function related
+Package:            *Directory Services problems
 Operating System:   Arch Linux
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

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.


Previous Comments:
------------------------------------------------------------------------
[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 http://bugs.php.net/bug.php?id=53460&edit=1

Reply via email to