使用glob('*',GLOB_NOSORT)与readdir()的结果顺序不同?

时间:2016-03-27 06:23:38

标签: php

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

问题:

  • 每个函数中的订单背后是否有可重现的逻辑?
  • 有没有办法修改glob()的行为以获得与readdir()相同的顺序?

要比较的功能:

  • scandir($dir)按字母顺序返回结果。不是很有趣。
  • glob($dir . '/*')按字母顺序返回结果。不是很有趣。
  • scandir($dir, SCANDIR_SORT_NONE)返回结果“未排序”,says the manual
  • opendir($dir) + readdir($handle)按照文件系统存储顺序返回结果。“,says the manual
  • glob($dir . '/*', GLOB_NOSORT)返回结果“显示在目录中(无排序)”,says the manual
  • 我尚未验证DirectoryIterator的排序。

实验表明readdir()和scandir(,SCANDIR_SORT_NONE)产生相同的顺序。我怀疑DirectoryIterator也是这样。

但是glob(,GLOB_NOSORT)并没有发挥作用。它产生的排序与其他函数不同。

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

背景:

我正在尝试通过使用过滤的glob()来优化当前使用readdir()的现有函数。带有过滤器模式的glob()比首先用readdir()读取结果然后用例如的preg_match()。

该软件由很多人使用/共享,因此我不想通过更改文件的顺序来让任何人感到惊讶。

我认为这并不重要,因为订单不应该被依赖。但我仍然想了解为什么函数表现不同。

0 个答案:

没有答案