Bug #66405 [Com]: RecursiveDirectoryIterator::CURRENT_AS_PATHNAME breaks the RecursiveIterator
| From: | paul at paulgarvin dot net | Date: | Wed, 07 May 2014 04:39:16 +0000 |
| Subject: | Bug #66405 [Com]: RecursiveDirectoryIterator::CURRENT_AS_PATHNAME breaks the RecursiveIterator | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-185681@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=66405&edit=1
ID: 66405
Comment by: paul at paulgarvin dot net
Reported by: stof at notk dot org
Summary: RecursiveDirectoryIterator::CURRENT_AS_PATHNAME
breaks the RecursiveIterator
Status: Open
Type: Bug
Package: SPL related
PHP Version: 5.5.7
Assigned To: salathe
Block user comment: N
Private report: N
New Comment:
I ran into this bug as well. Created a pull request at Github[1] with fix and test case.
[1] https://github.com/php/php-src/pull/665
Previous Comments:
------------------------------------------------------------------------
[2014-01-03 18:47:25] stof at notk dot org
But this is exactly what I'm reporting. The implementation of RecursiveDirectoryIterator is
wrong in the SPL when you ask to return the pathname for the current item. It should not change the
return value of getChildren to a string.
It is not a documentation problem (well, there may be a need to clarify the RecursiveIterator doc,
but this is a different topic).
------------------------------------------------------------------------
[2014-01-03 18:30:18] requinix@php.net
This is expected behavior: the inner Iterator's getChildren() must return something that is,
itself, a RecursiveIterator, otherwise the whole idea of recursive iteration is impossible.
But I don't see that spelled out in the documentation so I'm changing this to a doc bug.
------------------------------------------------------------------------
[2014-01-03 17:04:32] stof at notk dot org
Description:
------------
When using the RecursiveDirectoryIterator::CURRENT_AS_PATHNAME flag of the
RecursiveDirectoryIterator, the iterator does not implement RecursiveIterator properly anymore
Test script:
---------------
<?php
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__,
RecursiveDirectoryIterator::CURRENT_AS_PATHNAME));
var_dump(iterator_to_array($iterator));
Expected result:
----------------
The list of of files in the current folder (including subfolders) is dumped
Actual result:
--------------
UnexpectedValueException: Objects returned by RecursiveIterator::getChildren() must implement
RecursiveIterator
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=66405&edit=1