Bug #75309 [Com]: Iterators are no longer alphabetical
| From: | spam2 at rhsoft dot net | Date: | Thu, 05 Oct 2017 10:14:17 +0000 |
| Subject: | Bug #75309 [Com]: Iterators are no longer alphabetical | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-211521@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=75309&edit=1
ID: 75309
Comment by: spam2 at rhsoft dot net
Reported by: james at bluebaytravel dot co dot uk
Summary: Iterators are no longer alphabetical
Status: Feedback
Type: Bug
Package: SPL related
Operating System: Ubuntu
PHP Version: 7.1.10
Block user comment: N
Private report: N
New Comment:
fact is that no documentation says anything about ordering and so you rely on undefined behavior
fact is that readdir() on windows has sorted results and on Linux it don't which proves that
php itself never sorted anything which is a good thing because it would waste performance for cases
where it don't matter at all
Previous Comments:
------------------------------------------------------------------------
[2017-10-05 09:59:40] james at bluebaytravel dot co dot uk
It's always been in order previously... I can't see an obvious reason as to why Ubuntu
would've changed the behaviour? I use Laravel Homestead and am able to go back to a prior
version and see the expected results.
------------------------------------------------------------------------
[2017-10-04 13:49:41] danack@php.net
What makes you think the order is guaranteed?
I'm pretty certain there is no code inside PHP to sort directory iterators internally, or for
any of the other filesystem functions.
The order of directory entries is controller by your underlying operating system, which is free to
return whatever order it feels like.
------------------------------------------------------------------------
[2017-10-04 13:33:56] james at bluebaytravel dot co dot uk
Description:
------------
In PHP 7.1.10 iterators are no longer iterating through results alphabetically.
PHP 7.1.8 is the last version I've been able to see the expected result on (I've not been
able to test anything later).
In our code, we have a folder with ,php files in there and two sub-folders (Api and Dashboard)
containing more .php files. In PHP 7.1.8 the test script iterators through them alphabetically but
in PHP 7.1.10 the Api sub-folder is listed at the end of the iterator.
Test script:
---------------
$directoryIterator = new RecursiveDirectoryIterator($path);
$routeIterator = new RecursiveIteratorIterator($directoryIterator);
$routes = new RegexIterator($routeIterator, '/^.+\.php$/i',
RecursiveRegexIterator::GET_MATCH);
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=75309&edit=1