我在使用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 packer / minifier脚本)。
我知道如何使用sort函数解决这个问题,但是如果scandir函数应该单独对文件进行排序,那么效率不高。这是scandir函数中的一个错误吗?我应该在php bugtracker中报告这个错误,还是更像是文件系统/操作系统(我在CENTOS 6.3下使用默认的LVM安装)。
请你们帮我一些建议:-)谢谢你!
我已经在PHP发送了一个错误报告:https://bugs.php.net/bug.php?id=65709
答案 0 :(得分:0)
看起来这与intl扩展有关。当我禁用它时,问题不会发生。如果扩展使用pecl安装或使用--enable-intl编译,则不会产生差异。我会赶上intl扩展的开发人员来解决这个问题。