Пожалуйста, объясните, как создать Php Phar Stubs
Вопрос
Я пытаюсь создать очень простое приложение PHP CLI, которое можно запустить как фар Файл из командной строки:
# php myProject.phar
Это то, что я пробовал до сих пор:
Мой проект
Мой проект находится в каталоге под названием MyProject
И в нем есть эти два файла:
|-- createPhar.php
`-- bootstrap.php
Bootstrap.php
А bootstrap.php
Файл содержит это:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Когда я запускаю этот скрипт из моей командной строки 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') );
Когда я запускаю этот сценарий ...
# php createPhar.php
... новый файл под названием MyProject.phar
создан в каталоге моего проекта.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Теперь вот проблема
Когда я запускаю файл phar ...
# php MyProject.phar
... я ожидаю увидеть тот же самый выход, что и я, когда я запустил bootstrap.php
сценарий
Вместо этого я ничего не вижу. Нет вывода вообще. Это означает, что мой bootstrap.php
скрипт не включается в заглушку по умолчанию, созданную $phar->createDefaultStub('bootstrap.php')
Я думаю, что я неправильно понимаю, как создаются Phars и их заглушки. Не могли бы вы, пожалуйста, объясните, где я пошел не так.
Решение
Чтобы ответить на мой собственный вопрос.
Метод, описанный в моем вопросе, выше, является одним из правильных способов создания фар / фара.
Причина, по которой это не сработало для меня и делал Работа для Марио (см. Его комментарий ниже вопроса), потому что я установил Сухозин и должен был настроить настройки.
Исправлено с помощью Техника изложена здесь:
Чтобы исправить, положить:
suhosin.executor.include.whitelist = "phar"
в /etc/php5/cli/php.ini
Другие советы
Вы также можете сделать это так:
Bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
тогда:
php -r "требуется 'phar: //myproject.phar'; go ();"
Или у вас нет функции, и она выполнит все, что у вас есть, но, как правило, у вас есть некоторые функции или файлы класса в PHAR.