Какие настройки могут повлиять на способность 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');
Другие вопросы по тегам