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

Reply via email to