php glob()如果在windows上为空,则在linux上为空

php glob()如果在windows上为空,则在linux上为空,php,apache,glob,Php,Apache,Glob,目前我有: $files = array_merge( glob($path_ . '*.js'), glob($path_ . '*.css')); 如果windows上的目录为空,则返回空数组。如果它们在linux上为空,则不会返回任何内容 这会在linux上产生以下错误: 警告:array#u merge()[function.array merge]:参数#1不是数组 Windows:Apache:2.2.21 PHP:5.3.10 Linux/Deb

目前我有:

$files = array_merge(
        glob($path_ . '*.js'),
        glob($path_ . '*.css'));
如果windows上的目录为空,则返回空数组。如果它们在linux上为空,则不会返回任何内容

这会在linux上产生以下错误: 警告:array#u merge()[function.array merge]:参数#1不是数组

  • Windows:Apache:2.2.21 PHP:5.3.10
  • Linux/Debian:Apache:2.2.16 PHP:5.3.10

经过进一步的研究和测试,我发现这是PHP中的一个bug:

来自:

返回包含匹配文件/目录的数组,空 如果没有匹配的文件,则返回数组;如果出现错误,则返回FALSE

在linux上检查glob($path.'*.js')===FALSE。在这种情况下,可能存在权限错误或类似的问题。如文档所示,如果没有错误,它应该是一个空数组


还要检查文件/目录中的案例。Windows不区分大小写,这可以解释Windows和linux之间的区别。

快速修复方法是
@array\u merge(…)
您遗漏了以下部分:在某些系统上,无法区分空匹配和错误。只需选中,它将返回FALSE。目录为空,因此不能是文件问题。如果在linux下对文件夹执行scandir()或file_exists(),会发生什么情况?您有错误
参数#1不是数组
,这意味着
glob($path.'*.css')
不会产生错误?glob()是否仅对.js返回false,还是同时对…*.js和…*.css返回false。用一个空文件夹(没有js或css文件)试试看。显然,在这两种情况下,您都应该有错误。另外,您能告诉我们$path变量中有什么吗?经过进一步的研究和测试,我发现它是PHP中的一个bug: