2016-04-19 4 views
1

У меня странная ситуация с 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 с общими папками. На данный момент я просто использую итератор.

+0

Вы пытались вывести '$ path. '/ *' и '$ path. '/ *. jpg'', чтобы увидеть, что он делает, и попытаться совместить вручную (в 'ls' в bash или что-то в этом роде)? –

+0

Это очень странно. Что такое '$ path'? Есть ли что-то особенно странное в этом вопросе, например, как сама звездочка или что-то еще? – Chris

+0

все, что я вижу, отличается от того, что те, которые не работают, не содержат '$ id'. –

ответ

0

На самом деле это не решение, но я закончил восстановление моего локального сервера-разработчика с нуля. После этого функция glob() начала работать. Так что, должно быть, случилось что-то испортить.

 Смежные вопросы

  • Нет связанных вопросов^_^