php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #15464 readdir function bug with 0 name directory
Submitted: 2002-02-09 07:58 UTC Modified: 2002-02-10 13:48 UTC
From: laurent dot colson at freesbee dot fr Assigned:
Status: Not a bug Package: *Directory/Filesystem functions
PHP Version: 4.1.0 OS: linux
Private report: No CVE-ID: None
 [2002-02-09 07:58 UTC] laurent dot colson at freesbee dot fr
Their is a bug when using readdir function with a directory 
named 0 is in the list.
Exemple :
Directory /home/www/perso

/home/www/perso/0 * 0 is a directory
/home/www/perso/1 * 1 is a directory
/home/www/perso/2 * 2 is a directory

The code :

	$ptr=opendir("/home/www/perso");
	while($fichier=readdir($ptr))
		echo "$fichier\n";
	closedir($ptr);

should be return :
.
..
0
1
2

however, it return only :
.
..

Cause of there is a directory named 0 in the structure.

Friendly,
Laurent

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-02-10 06:04 UTC] sander@php.net
Reproduced. There is something really strange going on...
Anyway, create a file or directory 0 and a couple of other (both numeric and non-numeric) files and/or directories.

Sometimes it doesn't display any file starting with a number if there's a file called 0. The 0 never shows up.

(tested with a recent 4.2.0-dev)
 [2002-02-10 12:23 UTC] elixer@php.net
The problem is that the function is returning string "0" which gets converted to FALSE which breaks out of the loop.  I don't see an easy way to fix this...
 [2002-02-10 12:29 UTC] wez@php.net
Try
while(($fichier=readdir($ptr)) !== false)


 [2002-02-10 12:48 UTC] laurent dot colson at freesbee dot fr
Yes, it works with :
while(($fichier=readdir($ptr)) !== false)

In fact, sorry, it's not really a bug, another thing which 
works than I tryed :

do
{
   $fichier=readdir($ptr);
   ...
}while($fichier<>"");
closedir($ptr);

This works with the do structure because there is always 2 
minimum derectories which are . and ..

But your solution is better, thank you very much
Friendly,
Laurent
 [2002-02-10 12:50 UTC] elixer@php.net
Bogusify.
 [2002-02-10 13:48 UTC] torben@php.net
FWIW, I've explicitly stated this in the readdir() docs in
cvs now. Should show up in the online manual within a few 
days.


Torben
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Tue Jul 16 17:01:26 2019 UTC