Подтвердить что ты не робот

Пожалуйста, объясните, как создавать 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 и их заглушки. Не могли бы вы объяснить, где я ошибся.

4b9b3361

Ответ 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.