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

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

Ответы [ 2 ]

11 голосов
/ 13 июля 2011

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

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

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

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

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

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

в /etc/php5/cli/php.ini

0 голосов
/ 14 июня 2011

Вы также можете сделать это так:

bootstrap.php;

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

, то:

php -r "require 'Фары: //Myproject.phar'; идти (); "

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

...