PHP readdir() не возвращает файлы в алфавитном порядке

Я читаю через каталог с некоторыми изображениями и, например, используя довольно простую реализацию readdir(), как показано ниже:

if ($handle = opendir($path)) {
    while (false !== ($szFilename = readdir($handle))) {
    if ($szFilename[0] !== '.') {
        if (is_file($path.$szFilename)) {
                // do stuff
            }
        }
     }
 }

Проблема, с которой я сталкиваюсь, заключается в том, что файлы не читаются в алфавитном порядке, поскольку документы для readdir():

Возвращает имя файла следующего файла из каталога. Имена файлов возвращаются в том порядке, в котором они сохраняются файловой системой.

Еще одна странность в том, что на локальном сервере тестирования тот же код отлично работает. Это выполняется на сервере с использованием стека LAMP в обоих случаях.

Я знаю, что могу построить массив и просто отсортировать его, но мне было интересно, не хватает ли чего-то в том, что я делаю.

Ответы

Ответ 1

Алфавитный порядок:: Я думаю, вы неправильно читаете фрагмент, который вы указали...

Возвращает имя файла следующего файла из каталога. Имена файлов возвращаются в том порядке, в котором они хранятся в файловой системе.

Тот факт, что 'ls' будет отображать файлы в (обычно) в алфавитном порядке, не означает, что они хранятся в файловой системе. Я боюсь, PHP ведет себя как спецификация.

Возможно, вы захотите использовать scandir в качестве основы для своих усилий, если алфавитная сортировка является обязательной.:)

Ответ 2

Вы можете скопировать все имена файлов в массив, а затем использовать

<?php
sort($filesArray);
?>

Ответ 3

Я полагаю, что документы здесь совершенно ясны.

порядок, в котором они хранятся в файловой системе

не совпадает с алфавитным порядком

Ответ 4

Вы неправильно читаете документы:

Имена файлов возвращаются в том порядке, в котором они хранятся в файловой системе.

означает, что файлы возвращаются в том порядке, в котором они были созданы.

Ответ 5

Есть пара, которую вы можете использовать:

По алфавиту Сортировать:

<?php
sort($handle);
?>

Обратный алфавитный Сортировать:

<?php
rsort($handle);
?>