У меня странная ситуация с PHP glob() и задавалась вопросом, встретил ли кто-нибудь ее. Эта проблема может быть слишком широкой для здесь, но в любом случае пытается.Проблема с использованием подстановочных знаков в php glob()
Я бегу следующее:
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
PHP 5.6.20-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans
Моя функция Глоб работала перед использованием:
$images = glob($path . '/' . $id .'.*');
Затем он внезапно перестал работать. Я ничего не изменил на сервере или в любом другом коде. Это разные вещи, которые я пробовал просто посмотреть, что произойдет
$images = glob($path . '/' . $id . '.{jpg,jpeg,png,gif}', GLOB_BRACE); //works
$images = glob($path . '/*.jpg'); // doesn't work
$images = glob($path . '/*'); // doesn't work
В принципе, в любое время я использую подстановочные, независимо от положения, сценарий (бежал из командной строки) просто сидит там. Нет ошибки, нет возврата, ничего. Я даже пытался использовать GlobIterator с теми же результатами.
Я попытался удалить и переустановить PHP, создал новый каталог с некоторыми временными файлами для выполнения тестов, и ничего, что я делаю, похоже, заставляет его работать снова. В каталоге около 1000 файлов, поэтому нужно подойти так долго, чтобы соответствовать (я разрешил ему сидеть в течение часа).
Итак, интересно, сталкивался ли кто-либо с этой проблемой раньше или, возможно, знал о решении? Это в основном из любопытства, потому что я уже переписал код, не используя glob() в некоторых местах, где требуется шаблон.
Обновление 2 Это делается снова. Висит при использовании подстановочного знака. Я побежал ниже тестов:
// not working
var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*'));
// not working
var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*.jpg'));
// not working
var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*.{jpg,jpeg,gif,png,tif,tiff}', GLOB_BRACE));
// not working
var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/5715116ac46988ff1a8b4b8f.*'));
// working
var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/5715116ac46988ff1a8b4b8f.jpg'));
Update 3 В моем каталоге есть 1100 изображений. Я обнаружил, что, сократив это число до 712, glob возвращает массив. Добавление еще одного изображения, всего 713, заставляет его висеть. Разница в размерах между ними составляет 1,62 ГБ и 1,63 ГБ соответственно. Я попытался изменить настройки PHP, но они не повлияли. Я добавил небольшой файл txt в каталог, и он все еще повесил трубку. Так что не совсем уверен, что здесь происходит. Я также должен упомянуть об использовании Ubuntu в Virtualbox, размещенном на компьютере под управлением Windows с общими папками. На данный момент я просто использую итератор.
Вы пытались вывести '$ path. '/ *' и '$ path. '/ *. jpg'', чтобы увидеть, что он делает, и попытаться совместить вручную (в 'ls' в bash или что-то в этом роде)? –
Это очень странно. Что такое '$ path'? Есть ли что-то особенно странное в этом вопросе, например, как сама звездочка или что-то еще? – Chris
все, что я вижу, отличается от того, что те, которые не работают, не содержат '$ id'. –