Php glob(';*';,glob#u NOSORT)与readdir()的结果顺序不同?

Php glob(';*';,glob#u NOSORT)与readdir()的结果顺序不同?,php,Php,在php中,不同的目录扫描函数以不同的顺序返回结果 问题是: 每个功能的顺序背后是否有任何可复制的逻辑 有没有办法修改glob()的行为以获得与readdir()相同的结果 要比较的函数: scandir($dir)按字母顺序返回结果。不太有趣 glob($dir./*')按字母顺序返回结果。不太有趣 scandir($dir,scandir\u SORT\u NONE)返回“未排序”的结果 opendir($dir)+readdir($handle)返回“文件系统存储结果的顺序”的结果

在php中,不同的目录扫描函数以不同的顺序返回结果

问题是:

  • 每个功能的顺序背后是否有任何可复制的逻辑
  • 有没有办法修改glob()的行为以获得与readdir()相同的结果
要比较的函数:

  • scandir($dir)
    按字母顺序返回结果。不太有趣
  • glob($dir./*')
    按字母顺序返回结果。不太有趣
  • scandir($dir,scandir\u SORT\u NONE)
    返回“未排序”的结果
  • opendir($dir)
    +
    readdir($handle)
    返回“文件系统存储结果的顺序”的结果
  • glob($dir./*',glob_NOSORT)
    返回“在目录中显示时(无排序)”的结果
  • 我还没有用DirectoryIterator验证排序
实验表明readdir()和scandir(,scandir_SORT_NONE)产生相同的顺序。我怀疑
directoryinterator
也会这样做

但glob(,glob_NOSORT)并不配合。它生成的顺序与其他函数不同

手册中的短语“存储顺序”可以理解为最后修改的日期,但这只不过是猜测而已


背景:

我试图通过使用过滤的glob()来优化当前使用readdir()的现有函数。带有筛选模式的glob()比先用readdir()读取结果,然后用preg_match()等进行筛选要快

这个软件被很多人使用/共享,所以我不想改变文件的顺序而让任何人感到惊讶


我想这并不重要,因为我们不应该依赖订单。但我仍然想理解为什么函数的行为会有所不同。

不确定您是如何测试“速度”的,但文件系统上的第一次扫描几乎没有第二次扫描快(至少在FreeBSD上)。您必须多次测试扫描,并放弃第一个结果,以获得更准确的速度。我正在一个实际场景中进行测试,在这个场景中,对文件系统的影响不止一次。glob()更快,因为大多数文件与我要查找的模式不匹配。不管怎样,这个问题的目的是解释/理解结果的顺序。