我遇到了 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 bugtracker 中报告它还是更像是文件系统/操作系统的东西(我在 CENTOS 6.3 下使用默认的 LVM 安装)。
你们能帮我一些建议吗:-)谢谢!
我在 PHP 发送了一个错误报告:https ://bugs.php.net/bug.php?id=65709