Пожалуйста, объясните, как создавать Phar-заглушки PHP

Я пытаюсь создать очень простое приложение 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; 

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

    Чтобы ответить на мой вопрос.

    Метод, описанный в моем вопросе выше, является одним из правильных способов создания phar / phar stub.

    Причина, по которой это не сработало для меня и действительно работало для Марио (см. Его комментарий ниже вопроса), состоит в том, что я установил Suhosin и вам нужно было настроить настройки.

    Исправлено с использованием техники, описанной здесь :

    Чтобы исправить, поставьте:

    suhosin.executor.include.whitelist = "Фары"

    в /etc/php5/cli/php.ini

    вы также можете сделать это следующим образом:

    bootstrap.php;

     <?php function go() { print phpversion() . PHP_EOL; print 'i am some script' . PHP_EOL; } 

    тогда:

    php -r "require" phar: //Myproject.phar '; go (); "

    или не имеют функции, и он будет выполнять любые команды, которые у вас есть, но обычно у вас есть некоторые функции или файлы классов в phar.