Пожалуйста, объясните, как создавать PHP Phar-заглушки
Я пытаюсь создать очень простое приложение PHP CLI, которое можно запустить как файл phar из командной строки:
# php myProject.phar
Это то, что я пробовал до сих пор:
Мой проект
Мой проект находится в каталоге с именем MyProject
и имеет в нем два файла:
|-- createPhar.php
`-- bootstrap.php
bootstrap.php
Файл bootstrap.php
содержит следующее:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Когда я запускаю этот script из моей командной строки Ubuntu:
# cd MyProject
# php bootstrap.php
Я получаю следующий вывод:
5.3.2-1ubuntu4.9
i am some script
createPhar.php
Файл createPhar.php предназначен для превращения проекта в архив Phar.
Это выглядит так:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Когда я запустил этот script...
# php createPhar.php
... в моем каталоге проекта создается новый файл с именем MyProject.phar
.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Теперь вот проблема
Когда я запускаю файл phar...
# php MyProject.phar
... Я ожидаю увидеть тот же самый результат, который я получил, когда я запустил bootstrap.php
script.
Вместо этого я ничего не вижу. Нет вывода вообще. Это означает, что мой bootstrap.php
script не включается по умолчанию, который был создан $phar->createDefaultStub('bootstrap.php')
Я думаю, что я не понимаю, как создаются Phars и их заглушки. Не могли бы вы объяснить, где я ошибся.
Ответы
Ответ 1
Чтобы ответить на мой собственный вопрос.
Метод, описанный в моем вопросе выше, является одним из правильных способов создания phar/phar stub.
Причина, почему это не сработало для меня и действительно работало для Марио (см. его комментарий ниже вопроса), состоит в том, что я установил Suhosin и вам нужно было настроить настройки.
Исправлено использование метода описанного здесь:
Чтобы исправить, поместите:
suhosin.executor.include.whitelist = "Phar"
в/etc/php5/cli/php.ini
Ответ 2
вы также можете сделать это следующим образом:
bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
то
php -r "требуется 'Фары://Myproject.phar'; идти();"
или не имеют функции, и он будет выполнять любые команды, которые у вас есть, но обычно у вас есть некоторые функции или файлы классов в phar.