php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #70734 RecursiveDirectoryIterator output is not sorted
Submitted: 2015-10-18 21:02 UTC Modified: 2015-10-18 23:19 UTC
From: messiah at os dot pl Assigned:
Status: Not a bug Package: *Directory/Filesystem functions
PHP Version: 5.4.45 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: messiah at os dot pl
New email:
PHP Version: OS:

 

 [2015-10-18 21:02 UTC] messiah at os dot pl
Description:
------------
RecursiveDirectoryIterator() with RecursiveIteratorIterator() not sorting all values by name like on Windows. Try script below on Windows and Linux. This should be sorted by default by name folder and subfolder then next filename. Fix this. I tessted this on PHP 5.5.24 Linux and 5.4.8 Linux and 5.6.11 Windows

Test script:
---------------
<?php
$MójFolder = __DIR__;
$Pliki = array('Pliki'=>array(), 'Foldery'=>array());

$SkanerKatalogówIPlików = new RecursiveDirectoryIterator($MójFolder, RecursiveDirectoryIterator::SKIP_DOTS);
$SkanujWszystkiePodkatalogi = new RecursiveIteratorIterator($SkanerKatalogówIPlików, RecursiveIteratorIterator::SELF_FIRST);

foreach($SkanujWszystkiePodkatalogi as $WszystkiePlikiIFoldery){

    if($WszystkiePlikiIFoldery->isDir()){
        $Pliki['Foldery'][] = $WszystkiePlikiIFoldery .'/';
    }elseif($WszystkiePlikiIFoldery->isFile()){
        $Pliki['Pliki'][] = $WszystkiePlikiIFoldery->getPathname();
    }
}

#print_r($Pliki);

return $Pliki;

Expected result:
----------------
Add sorting by name example:
folder/subfolder1/filename.php
folder/subfolder1/filename1.php


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-10-18 23:19 UTC] bwoebi@php.net
-Summary: Error +Summary: RecursiveDirectoryIterator output is not sorted -Status: Open +Status: Not a bug
 [2015-10-18 23:19 UTC] bwoebi@php.net
The manual does not guarantee anything about the order. RecursiveDirectoryIterator (and the other filesystem based iterators iterate in the order the OS returns the files to them.
That it is sorted on Windows is not guaranteed by PHP, it just seems to happen due to the underlying implementation in the Windows kernel.
 [2015-10-19 07:25 UTC] messiah at os dot pl
So this must be changed. Fix is simple PHP send request filesystem to system, next PHP sorting all files and folders with subfolders then output results to user. This is annoying error(if this is no bug) when You work on Windows and You try start Your app on server(Linux) like I do. Changing OS is not a solution!
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Dec 02 17:01:35 2024 UTC