我经常发现PHP的交互模式-php -a
-非常有用,但是如果我能启动它并立即执行一些命令来初始化我的环境,比如运行autoloader,为名称空间设置一些use
快捷方式,等等,它会更有用。
下面是一个例子:
include "../../autoloader.php";
use App/Foo/Bar as Bar;
我想也许我可以把这些行添加到一个文本文件initialize.txt
中,然后用php -a < initialize.txt
启动交互模式,但是没有用。
我该怎么做呢?
2条答案
按热度按时间e4eetjau1#
正如Tomas Creemers提到的,你必须使用auto_prepend_file PHP标志来自动请求一个文件。
你可以像这样加载PHP解释器:
会议:
也可以手动包含文件:
会议:
evrscar22#
您可以使用 * php.ini * 设置auto_prepend_file来指定一个始终应在实际文件之前执行的文件。
根据documentation on interactive shell,此设置在那里也是活动的。
假设您不想在每次启动PHP时都执行此初始化,我建议您创建一个 * php. ini * 文件的副本(例如,将其命名为'php. ini-interactive'),并使用
-c
选项指定该配置文件:php -c /path/to/php.ini-interactive -a
.根据PHP交互式shell文档页面上的一条评论(作者"Ryan P"),
php -a
并不总是做同样的事情:交互式 shell 和交互式模式不是一回事,尽管名称和功能相似。
如果你输入'php-a',得到的响应是'Interactive Shell',后面跟着'php〉'提示符,那么你就可以使用交互式环境了(PHP编译时支持readline);如果你得到的响应是'Interactive mode enabled',那么你就不能使用交互式环境,这篇文章对你不适用。
你也可以检查'php-m',看看输出中是否列出readline--如果没有,你就没有交互式环境。
交互模式本质上就像运行php,把stdin作为文件输入,你只需要输入代码,当你输入完代码后(Ctrl-D),php就会执行你输入的任何东西,就像它是一个普通的PHP(PHTML)文件一样--因此你可以在交互模式下用'〈?php'开始执行代码。
我没有带交互式 * shell * 的PHP副本。显然,我只有交互式 * 模式 *。我已经测试过(见下文),可以确认使用
auto_prepend_file
* 配置的文件 * 在交互式 * 模式 * 下执行。但是,如果您遇到与我相同的症状,您可能需要重新考虑使用它:输出:
此外:
输出:
一个三个三个一个
输出:
会议:
输出:
输出:
(在上次运行的交互模式中,键盘输入只是回车,然后是Ctrl + D。)