PHP 4.0 Bug #5455 Updated: readdir() still doesn't work
| From: | Bug Database | Date: | Thu, 07 Sep 2000 07:50:40 +0000 |
| Subject: | PHP 4.0 Bug #5455 Updated: readdir() still doesn't work | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-32504@lists.php.net to get a copy of this message | ||
ID: 5455
User Update by: johan@ekenberg.se
Status: Feedback
Bug Type: Directory function related
Description: readdir() still doesn't work
Added closedir() but it doesn't help.
I've also added a third example with your exact code request. Try it out here: http://www.ekenberg.se/readdir/index.php
Sorry to say it doesn't work either.
If you tell me there are really any changes to opendir() in the latest CVS that would motivate an
upgrade, I'm willing to try - but this is the third time I'm asked to upgrade to the
latest CVS or stable version with the same motivation: "It works for me". But it
hasn't still.
I'd be happy to provide a user account on the server if that would be of any help.
It seems this bugreport more or less duplicates bug no. 5540.
Previous Comments:
[2000-09-06 17:50:12] sniper@php.net
You don't use closedir() anywhere in your code.
Please try this example:
<?php
$dir = opendir(".");
while ($file = readdir($dir)) {
if ($file != "." && $file != "..") {
echo "$file<br>";
}
}
closedir($dir);
?>
If this doesn't help, upgrade to latest CVS.
This works just fine for me.
--Jani
---------------------------------------------------------------------------
[2000-09-06 05:08:18] johan@ekenberg.se
I've still got the problem after upgrade to 4.02.
System is libc5 (Slackware 4.0) running 2.2.16.
Example code and phpinfo() available here:
http://www.ekenberg.se/readdir/index.php
---------------------------------------------------------------------------
[2000-09-02 20:13:46] sniper@php.net
Please upgrade to php4.0.2. I just tried your example code and
it works just fine for me.
Reopen if problem still persists.
--Jani
---------------------------------------------------------------------------
[2000-07-15 09:53:01] johan@ekenberg.se
Stefan Kirch [s.kirch at bauer-kirch.de] mailed me:
-- start quote --
I have the same problem (#5535) and found a "work-around" like the following:
if (ereg("^foo$", $file)) {
RegEx works fine, so it seems to be a problom of string-comparison. Codes like
if ($x == "5") {
also breaks the loop, on the other hand, numerical comparisons like
if ($x == 5) {
works fine.
-- end quote --
I don't know if this might give any clues to the experts?
---------------------------------------------------------------------------
[2000-07-15 05:09:57] johan@ekenberg.se
1. The while loop is only evaluated once, despite the fact that there are more directory entries to
list. I earlier wrote that the while-loop exits at the first evaluation of the if-statement, but
that is not true. The execution continues after the if-statement until the end of the while loop,
there it exits. If the if-statement is removed or commented out, the while loop will continue
looping until all entries in the directory are listed. With the if-statement left in place it's
exactly like putting "break;" as the last line of the while loop - it never evaluates more
than once. I guess that something in the if-statement makes readdir($dir) evaluate to false the next
time.
$dir = opendir(".");
while ($file = readdir($dir)) {
print "<br>$file";
if ($file == "foo") {
// anything or nothing here, doesn't matter
}
// Code placed here will also be evaluated,
// but as long as the if-statement above is not
// removed, the while loop will exit after
// completing once - like putting a
// break;
// as the last line of the while loop.
}
I earlier submitted an URL with a working example which I believe displays the issue rather clearly:
http://www.ekenberg.se/readdir/index.php
2. "gdb -X httpd" doesn't report anything unusual - httpd happily keeps on executing,
there are no errors and it doesn't exit. zend_bailout() is never called.
---------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view the rest of the comments,
please view the bug report online.
Full Bug description available at: http://bugs.php.net/?id=5455