php glob(), если пустой возвращает массив в Windows, нет в Linux

На данный момент у меня есть:

$files = array_merge(
        glob($path_ . '*.js'),
        glob($path_ . '*.css'));

Если каталоги пусты в окнах, он возвращает пустой массив. Если они пусты в Linux, ничего не возвращается.

Это приводит к этой ошибке в Linux: Предупреждение: array_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: https://bugs.php.net/bug.php?id=53460


person John Magnolia    schedule 06.04.2012    source источник
comment
Быстрое грязное исправление будет @array_merge(...)   -  person Benjamin Crouzier    schedule 06.04.2012


Ответы (1)


Из http://php.net/manual/en/function.glob.php:

Возвращает массив, содержащий совпавшие файлы/каталоги, пустой массив, если нет совпадающих файлов, или FALSE в случае ошибки.

Проверьте, работает ли glob($path_ . '*.js') === FALSE в Linux. В этом случае, вероятно, есть ошибка разрешения или что-то в этом роде. Это должен быть пустой массив, если нет ошибки, как предполагает документация.

Также проверьте наличие регистра в ваших файлах/каталоге. Windows нечувствительна к регистру, что может объяснить разницу между Windows и Linux.

person Benjamin Crouzier    schedule 06.04.2012
comment
Вы пропустили часть, в которой говорится: В некоторых системах невозможно отличить пустое совпадение от ошибки. - person John Magnolia; 06.04.2012
comment
Только что проверил, и да, он возвращает FALSE. Каталог пуст, поэтому проблема с файлом не может быть. - person John Magnolia; 06.04.2012
comment
Что произойдет, если вы сделаете scandir() или file_exists() в своей папке под Linux? - person Benjamin Crouzier; 06.04.2012
comment
У вас ошибка Argument #1 is not an array, значит glob($path_ . '*.css') не выдает ошибку? Возвращает ли glob() false только с .js или с обоими ...*.js и ...*.css. Попробуйте это с пустой папкой (без файлов js NOR css). У вас, очевидно, должна быть ошибка в обоих случаях. Кроме того, можете ли вы сказать нам, что находится в переменной $path? - person Benjamin Crouzier; 06.04.2012
comment
После некоторых дальнейших исследований и тестирования я обнаружил, что это ошибка в PHP: bugs.php. сеть/bug.php?id=53460 - person John Magnolia; 08.04.2012