инициализация PHP-взаимодействия

Я часто нахожу интерактивный режим php -aphp -a – очень полезен, но было бы гораздо полезнее, если бы я мог запустить его и сразу же запустить несколько команд для инициализации моей среды. Такие вещи, как запустить автозагрузчик, настроить несколько ярлыков для пространств имен и т. Д.

Вот пример:

 include "../../autoloader.php"; use App/Foo/Bar as Bar; 

Я думал, может быть, я мог бы просто добавить эти строки в текстовый файл initialize.txt а затем запустить интерактивный режим с php -a < initialize.txt но это не сработало.

Кто-нибудь знает, как это сделать?

Solutions Collecting From Web of "инициализация PHP-взаимодействия"

Как отметил Томас Кремерс, вы должны использовать флаг auto_prepend_file PHP для автоматического запроса файла. Например:

 <?php # foo.php function bar() { print "Bar.\n"; } 

Вы можете загрузить PHP-интерпретатор следующим образом:

 [hron@merlin tmp ] $ php -d auto_prepend_file=$PWD/foo.php -a Interactive shell php > bar(); Bar. php > 

Или вы можете включить файл вручную:

 [hron@merlin tmp ] $ php -a Interactive shell php > include 'foo.php'; php > bar(); Bar. php > 

Вы можете использовать параметр auto_prepend_file php.ini для указания файла, который должен всегда исполняться перед фактическим файлом.

В соответствии с документацией на интерактивной оболочке этот параметр также активен.

Предполагая, что вы не хотите делать эту инициализацию за каждый раз, когда вы запускаете PHP, я бы предложил создать копию вашего php.ini (например, назвать его «php.ini-interactive») и указать этот файл конфигурации с помощью -c : php -c /path/to/php.ini-interactive -a .


(Приложил эту часть после некоторых комментариев по этому вопросу и по самому вопросу).

Согласно комментарию («Ryan P») на странице документации для интерактивной оболочки php -a , php -a не всегда делает то же самое:

Интерактивная оболочка и интерактивный режим – это не одно и то же, несмотря на аналогичные имена и функциональные возможности.

Если вы наберете «php -a» и получите ответ «Интерактивная оболочка», за которым следует приглашение «php>», у вас есть доступная интерактивная оболочка (PHP был скомпилирован с поддержкой readline). Если вместо этого вы получите ответ «Интерактивный режим включен», у вас НЕ имеется интерактивная оболочка, и эта статья не применима к вам.

Вы также можете проверить «php -m» и посмотреть, есть ли в выводе readline – если нет, у вас нет интерактивной оболочки.

Интерактивный режим по существу похож на запуск php с stdin в качестве входного файла. Вы просто набираете код, и когда вы закончите (Ctrl-D), php выполняет все, что вы набрали, как если бы это был обычный файл PHP (PHTML), поэтому вы начинаете в интерактивном режиме с '

У меня нет копии PHP с доступной интерактивной оболочкой . По-видимому, у меня есть только интерактивный режим . Я протестировал (см. Ниже) и могу подтвердить, что файлы, настроенные с помощью auto_prepend_file , выполняются в интерактивном режиме . Однако вы можете захотеть пересмотреть его использование, если у вас появятся те же симптомы, что и у меня:

 tomas@debianvm:~$ cat /tmp/prepend.php <?php echo 'cookies are people too!'; tomas@debianvm:~$ grep auto_prepend_file /etc/php5/cli/php.ini auto_prepend_file = tomas@debianvm:~$ grep auto_prepend_file /etc/php5/cli/php.ini-interactive auto_prepend_file = /tmp/prepend.php tomas@debianvm:~$ php -a Interactive mode enabled tomas@debianvm:~$ php -c /etc/php5/cli/php.ini-interactive -a Interactive mode enabled cookies are people too! Segmentation fault tomas@debianvm:~$ php --version PHP 5.4.4-14+deb7u2 (cli) (built: Jun 5 2013 07:56:44) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies 

(Ввод клавиатуры в этом последнем запуске интерактивного режима – это только возврат, за которым следует ctrl-d.)