Edit report at http://bugs.php.net/bug.php?id=54246&edit=1
ID: 54246 Updated by: scott...@php.net Reported by: ebert at woltlab dot com Summary: DirectoryIterator object loses information once copied into a variable -Status: Open +Status: Bogus Type: Bug Package: Filesystem function related Operating System: Windows 7 x64 (7601 w/ SP1) PHP Version: 5.2.17 Block user comment: N Private report: N New Comment: It's a reference to a single object and as it goes through the loop it's actually off the end making it empty. If you want a copy use clone. Previous Comments: ------------------------------------------------------------------------ [2011-03-14 13:48:42] ebert at woltlab dot com Description: ------------ Storing all DirectoryIterator objects fetched previously with an instance of DirectoryIterator within an array seems to make stored objects to lose all data. While methods like 'isDir()' work fine in first loop, they will always fail within second loop. --- C:\Program Files (x86)\PHP>php.exe -v PHP 5.2.17 (cli) (built: Jan 6 2011 17:37:45) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies --- Verzeichnis von C:\inetpub\wwwroot\di 14.03.2011 13:33 <DIR> . 14.03.2011 13:33 <DIR> .. 14.03.2011 13:41 427 di.php 14.03.2011 13:33 <DIR> directory 14.03.2011 13:33 0 randomFile1.txt 14.03.2011 13:33 7.334 randomFile2.odt 14.03.2011 13:33 0 randomFile3.bmp 4 Datei(en), 7.761 Bytes 3 Verzeichnis(se), 23.774.224.384 Bytes frei Test script: --------------- <?php $array = array(); $dir = 'C:/inetpub/wwwroot/di/'; $it = new DirectoryIterator($dir); foreach ($it as $obj) { if ($obj->isDot()) continue; var_dump($obj); if ($obj->isDir()) echo $obj->getFilename() . ' is a directory.<br />'; else echo $obj->getFilename() . ' is a file<br />'; $array[] = $obj; } echo '<hr />'; foreach ($array as $obj) { var_dump($obj); if ($obj->isDir()) echo $obj->getFilename() . ' is a directory.<br />'; else echo $obj->getFilename() . ' is a file<br />'; } ?> Actual result: -------------- object(DirectoryIterator)#1 (0) { } di.php is a file object(DirectoryIterator)#1 (0) { } directory is a directory. object(DirectoryIterator)#1 (0) { } randomFile1.txt is a file object(DirectoryIterator)#1 (0) { } randomFile2.odt is a file object(DirectoryIterator)#1 (0) { } randomFile3.bmp is a file (<hr />) object(DirectoryIterator)#1 (0) { } is a directory. object(DirectoryIterator)#1 (0) { } is a directory. object(DirectoryIterator)#1 (0) { } is a directory. object(DirectoryIterator)#1 (0) { } is a directory. object(DirectoryIterator)#1 (0) { } is a directory. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54246&edit=1