我经常发现 PHP 的交互模式php -a
非常有用,但如果我可以启动它并立即执行一些命令来初始化我的环境,它会更加有用。诸如运行自动加载器、use
为命名空间设置一些快捷方式等。
这是一个例子:
include "../../autoloader.php";
use App/Foo/Bar as Bar;
我想也许我可以将这些行添加到文本文件中initialize.txt
,然后启动交互模式,php -a < initialize.txt
但这不起作用。
有人知道怎么做吗?
我经常发现 PHP 的交互模式php -a
非常有用,但如果我可以启动它并立即执行一些命令来初始化我的环境,它会更加有用。诸如运行自动加载器、use
为命名空间设置一些快捷方式等。
这是一个例子:
include "../../autoloader.php";
use App/Foo/Bar as Bar;
我想也许我可以将这些行添加到文本文件中initialize.txt
,然后启动交互模式,php -a < initialize.txt
但这不起作用。
有人知道怎么做吗?
正如 Tomas Creemers 所提到的,您必须使用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 >
您可以使用 php.ini 设置auto_prepend_file
来指定应始终在实际文件之前执行的文件。
根据有关交互式 shell 的文档,此设置在那里也处于活动状态。
假设您不想在每次启动 PHP 时都进行此初始化,我建议您创建 php.ini 的副本(例如,将其称为“php.ini-interactive”)并使用-c
选项指定该配置文件: php -c /path/to/php.ini-interactive -a
.
(在对此答案和问题本身进行一些评论后附加此部分。)
根据 PHP 交互式 shell 文档页面上的评论(由“Ryan P”撰写),php -a
并不总是做同样的事情:
尽管名称和功能相似,但交互外壳和交互模式并不是一回事。
如果您键入“php -a”并得到“Interactive Shell”的响应,然后是“php>”提示符,则您可以使用交互式 shell(PHP 是使用 readline 支持编译的)。相反,如果您收到“已启用交互模式”的响应,则说明您没有可用的交互式 shell,并且本文不适用于您。
您还可以检查“php -m”并查看输出中是否列出了 readline - 如果没有,则说明您没有交互式 shell。
交互模式本质上就像使用标准输入作为文件输入运行 php。您只需输入代码,完成后 (Ctrl-D),php 将执行您输入的任何内容,就好像它是一个普通的 PHP (PHTML) 文件一样 - 因此您以交互模式开始 '
我没有可用的交互式shell的 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。)