排序功能scandir函数错误

时间:2013-09-19 09:16:30

标签: php sorting scandir

我在使用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

1 个答案:

答案 0 :(得分:0)

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