Bug #53460 [Opn->Fbk]: glob() returns false for a pattern that matches zero files
| From: | mike@php.net | Date: | Tue, 01 Oct 2013 15:52:12 +0000 |
| Subject: | Bug #53460 [Opn->Fbk]: glob() returns false for a pattern that matches zero files | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-181909@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=53460&edit=1
ID: 53460
Updated by: mike@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] pajoye@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