PHP readdir()不按字母顺序返回文件

Bug*_*ill 17 php

我正在阅读一个包含一些图片的目录,使用readdir()的非常简单的实现,如下所示:

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

我遇到的问题是文件没有按字母顺序读取,因为readdir()状态的文档:

从目录返回下一个文件的文件名.文件名按文件系统存储的顺序返回.

另一个奇怪的事情是,在本地测试服务器上,相同的代码工作得很好.在两种情况下,这都在使用LAMP堆栈的服务器上运行.

我知道我可以构建一个数组并对其进行排序,但我想知道我是否遗漏了我正在做的事情.

Zom*_*eep 29

按字母顺序排列::我认为您误读了您引用的片段...

从目录返回下一个文件的文件名.文件名按文件系统存储的顺序返回.

'ls'将以(通常)字母顺序显示文件这一事实并不意味着它们是如何存储在文件系统中的.我担心,PHP的行为就像规范一样.

如果必须按字母顺序排序,您可能需要考虑使用scandir作为您工作的基础.:)

  • /我拍前额scandir()是我正在寻找的.谢谢! (2认同)

ale*_*lex 14

您可以将所有文件名复制到一个数组中然后使用

<?php
sort($filesArray);
?>
Run Code Online (Sandbox Code Playgroud)