Какие настройки могут повлиять на способность Phar получить доступ к себе?
Это немного странно, поэтому, пожалуйста, потерпите меня.
Я пытаюсь запустить Bugsnag на нашей платформе.
Примерный код выглядит так:
if ( !include_once($NP->settings->paths->external .'/Bugsnag/guzzle.phar') )
exit('Failed to load ERROR: guzzle');
if ( !include_once($NP->settings->paths->external .'/Bugsnag/bugsnag.phar') )
exit('Failed to load ERROR SYSTEM: bugsnag');
Это, к сожалению, создает исключение:
Fatal error: require(): Failed opening required 'phar://guzzle.phar/autoloader.php'
Тем не менее, если я попытаюсь загрузить это за пределы нашей платформы, оно, похоже, раскрутится просто отлично.
Поскольку я не очень хорошо знаком с тонкостями работы с phar, что мы можем установить, чтобы помешать способности phar ссылаться в своем собственном контейнере?
Информация:
Ubuntu 16.04.2 LTS
PHP 7.0.18-0ubuntu0.16.04.1 (Phar is native)
Phar EXT version: 2.0.2
Phar API version: 1.1.1
Phar-based phar archives: enabled
Tar-based phar archives: enabled
ZIP-based phar archives: enabled
gzip compression: enabled
bzip2 compression: disabled
Native OpenSSL support: enabled
phar.readonly: On
phar.require_hash: Off
Любая помощь будет оценена.
Спасибо!
ОБНОВЛЕНИЕ: Проведя некоторое тестирование с коллегой, я заметил, что даже помещение стандартного кода в самый верх нашего основного сценария загрузки платформы все равно приводило к ошибке. Единственное, что мы можем думать о том, какие изменения в этом случае - это изменение каталога (так как загрузочный скрипт находится в include_path
). После добавления external
каталог к php include_path
Казалось, работает. Я, однако, смущен этим, потому что, насколько я понимаю, файлы Phar являются самодостаточными, чтобы конкретно не иметь подобных проблем. Почему файл Phar вдруг не сможет ссылаться на себя, после того как он уже будет успешно включен?
ОБНОВЛЕНИЕ: Итак, вышеприведенное обновление не является действительным исправлением. Результаты очень странные. Он будет вращаться нормально один раз, а затем потерпит неудачу следующие несколько раз. Опять же, это когда нет никакой другой загрузки кода перед ним. Что-то интересное: если мы перезапускаем Apache, он загружается при первой загрузке страницы. Все после этого не получается.
2 ответа
Не уверен, но я думаю, что вы не можете ссылаться на ФАР внутри другого ФАР.
Почему бы не использовать обычную настройку с Composer (для установки всех программ), а затем создать PHAR с помощью проекта Box?
Является guzzle.phar
символическая ссылка на файл с другим именем?
В противном случае вы можете разорвать внутреннюю связь в .phar
файлы, установив другой псевдоним при загрузке их через Phar
учебный класс:
new Phar('guzzle.phar, 0, 'differentalias.phar');