1

我遇到了 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

4

1 回答 1

0

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

于 2013-09-19T10:28:24.087 回答