初始化PHP交互式

时间:2013-08-18 00:42:59

标签: php

我经常发现PHP的交互模式 - php -a - 非常有用,但如果我可以启动它并立即执行一些命令来初始化我的环境,那将会更有用。比如运行自动加载器,为命名空间设置一些use快捷方式等等。

以下是一个例子:

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

我想也许我可以将这些行添加到文本文件initialize.txt中,然后使用php -a < initialize.txt启动交互模式,但这不起作用。

任何人都知道怎么做?

2 个答案:

答案 0 :(得分:6)

正如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 > 

答案 1 :(得分:2)

您可以使用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的文档页面上的comment(由“Ryan P”提供),php -a并不总是做同样的事情:

  尽管如此,交互式Shell和交互模式并不是一回事   相似的名称和功能。

     

如果您输入'php -a'并获得'Interactive Shell'的回复   然后是'php&gt;'提示,你有可用的交互式shell(PHP   编译时使用readline支持)。如果相反你得到了回应   '启用交互模式',您没有交互式shell   可用,本文不适用于您。

     

您还可以检查'php -m',看看是否列出了readline   输出 - 如果没有,则没有交互式shell。

     

交互模式本质上就像运行带有stdin的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。)