排序功能扫描函数错误


Sorting functionality scandir function bug

我在使用scandir函数时遇到了一些意外的行为。文档说它默认按升序对文件和文件夹进行排序。现在我有一个包含六个文件的文件夹:

__Abstract.coffee
__Abstract.js
Copy.coffee
Copy.js
Delete.coffee
Delete.js

现在看来,PHP 的 scandir 输出大多数时候都是:

array (
  0 => '.',
  1 => '..',
  2 => '__Abstract.coffee',
  3 => '__Abstract.js',
  4 => 'Copy.coffee',
  5 => 'Copy.js',
  6 => 'Delete.coffee',
  7 => 'Delete.js',
)

但有时(大约 50 次中有 1 次)它将 __Abstract.coffee 和 __Abstract.js 放在末尾,因此返回值为:

array (
  0 => '.',
  1 => '..',
  2 => 'Copy.coffee',
  3 => 'Copy.js',
  4 => 'Delete.coffee',
  5 => 'Delete.js',
  6 => '__Abstract.coffee',
  7 => '__Abstract.js',
)

因此,JS文件有时没有以正确的顺序加载(它是一个js打包器/最小化器脚本)。

我知道如何使用排序函数解决此问题,但如果 scandir 函数应该自行对文件进行排序,则效率不高。这是 scandir 函数中的错误吗,我应该在 php 错误跟踪器中报告这个问题,还是更像是文件系统/操作系统的东西(我使用的是 CENTOS 6.3 下的默认 LVM 安装)。

你们能帮我一些建议吗:-)谢谢!

我已经在PHP上发送了一个错误报告:https://bugs.php.net/bug.php?id=65709

看起来这与 intl 扩展有关。当我禁用它时,问题不会出现。如果扩展是使用 pecl 安装或使用 --enable-intl 编译的,它不会产生差异。我将赶上intl扩展的开发人员

来解决此问题。