代码之家  ›  专栏  ›  技术社区  ›  Buggabill

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

php
  •  17
  • Buggabill  · 技术社区  · 15 年前

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

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

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

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

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

    我知道我可以构建一个数组并对其进行排序,但我想知道我在做什么时是否遗漏了一些东西。

    5 回复  |  直到 15 年前
        1
  •  29
  •   ZombieSheep    15 年前

    字母顺序:我想你误读了你引用的那段代码…

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

    “ls”将以(通常)字母顺序显示文件,这并不意味着它们是如何存储在文件系统上的。恐怕,PHP的行为是规范化的。

    你可以考虑使用 scandir 作为你努力的基础,如果字母排序是必须的。:)

        2
  •  13
  •   alex    15 年前

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

    <?php
    sort($filesArray);
    ?>
    
        3
  •  4
  •   SilentGhost    15 年前

    我想这里的医生很清楚。

    它们存储在文件系统中的顺序

    与字母顺序不同

        4
  •  1
  •   diciu    15 年前

    你误读了文件:

    文件名按文件系统存储的顺序返回。

    表示文件按创建顺序返回。

        5
  •  -2
  •   alex    10 年前

    您可以使用以下几种:

    按字母顺序排序:

    <?php
    sort($handle);
    ?>
    

    反向字母排序:

    <?php
    rsort($handle);
    ?>