一尘不染

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

php

我正在阅读包含一些图片的目录,并且使用readdir()的简单实现如下:

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

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

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

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

我知道我可以构建一个数组并对其进行排序,但是我想知道自己在做的事情中是否缺少某些东西。


阅读 329

收藏
2020-05-29

共1个答案

一尘不染

字母顺序::我认为您误读了引述的代码段…

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

“ ls”将以(通常)字母顺序显示文件的事实并不意味着这就是它们在文件系统上的存储方式。恐怕PHP的行为符合规范。

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

2020-05-29