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

php
2022-08-30 20:44:35

我正在阅读一个带有一些图片的目录,例如使用非常简单的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);
?>

推荐