我在使用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扩展的开发人员