Пожалуйста, объясните, как создать Php Phar Stubs

StackOverflow https://stackoverflow.com/questions/6336144

  •  27-10-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top