Bug #54246 [Opn->Bgs]: DirectoryIterator object loses information once copied into a variable
| From: | scottmac@php.net | Date: | Mon, 14 Mar 2011 13:39:52 +0000 |
| Subject: | Bug #54246 [Opn->Bgs]: DirectoryIterator object loses information once copied into a variable | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-159460@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=54246&edit=1
ID: 54246
Updated by: scottmac@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