17

我试图在 php 解释器中执行简单的 php 代码。当我执行命令时,php -a我收到消息

启用交互模式

没有任何地方供php输入。但我可以通过命令执行 php 代码php -r。例如:

php -r "echo 'Hello stackoverflow!';"

你好堆栈溢出!

4

9 回答 9

36

安装这个:

php5-readline

然后尝试使用:

php -a
于 2014-03-11T03:24:48.393 回答
7

键入php -m并确保您有 readline 模块。如果你不这样做,你将无法使用它。

http://www.php.net/manual/en/features.commandline.interactive.php

从 PHP 5.1.0 开始,如果 PHP 使用--with-readline选项编译,CLI SAPI 使用-a选项提供交互式 shell 。

于 2012-04-23T15:15:49.870 回答
4

您的 PHP 和 libreadline 之间似乎存在编译/链接错误。这记录在PHP Bug #48759中。

  • 你自己编译PHP吗?make clean您是否使用过 --configure 并且在最终构建之前没有做适当的事情?
  • 是否php -m将 readline 列为启用的功能?(PHP 是用 option 构建的--with-readline
  • 你的php版本是多少?
  • 你使用什么发行版?
  • 您是否安装了 libreadline(*-dev 软件包)?
于 2012-04-23T15:17:17.330 回答
2

在我厌倦了在每台机器上编译它之后,我使用了 PHPSH(正如 joey-adams 所提到的)

它比 php -a 好得多(语法突出显示和自动完成)

安装 python phpsh

看看install-php5-with-readline-support-on-debian-wheezy

$ sudo apt-get install python # this is necessary to run phpsh
$ cd ~/

$ wget https://github.com/facebook/phpsh/zipball/master
$ unzip phpsh-master.zip

$ cd phpsh-master
$ sudo cp -r src /etc/phpsh # phpsh seems to complain unless it resides at /etc/phpsh
$ sudo ln -s /etc/phpsh/phpsh /usr/bin/phpsh # put phpsh on the $PATH
于 2013-12-12T08:45:09.723 回答
2

您处于交互模式,但没有提示,因为您可能没有可用的 readline 模式。您只需要开始输入,您的命令将在您按下回车后进行评估。看起来并没有发生任何事情,但是如果您输入,例如:

<?php

echo "hello world";

?>

...你会得到输出...

如果您输入支撑块,它们会在您在关闭后按 Enter 后进行评估}

<?php 
for ($i = 0; $i < 5; $i++) {
  echo $i;
}
// prints 12345 after closing }

请注意,您必须开始,<?php否则输入的任何内容都不会被评估。

更新(多年后):

在运行供应商的安全补丁 PHP 5.3.3 的 Red Hat (RHEL5) 系统上,我遇到了一种交互模式,它在右大括号后没有回显。

相反,直到我按下输出缓冲区才被刷新Ctrld。实际上,这使得交互式会话一次性使用。插入所有代码输入,并Ctrld一次返回所有输出。

于 2012-04-23T15:14:54.417 回答
1

要检查您是否安装了 readline 模块,请键入:php -m | grep readline

如果没有显示,安装 readline 模块:sudo apt-get install php5-readline

安装模块后,您可以使用先前的命令重新检查它的存在,而不是使用以下命令进入交互模式:php -a

于 2016-02-03T08:29:50.720 回答
1

因为模块readline没有安装。 http://php.net/manual/en/features.commandline.interactive.php

这是我通过重新编译 php 源代码来安装模块的方式:

查找之前的配置命令:

$ php -i | grep configure
Configure Command =>  './configure'  '--prefix=/usr/local/php7' ...

然后重新编译:

./configure --prefix=/usr/local/php7 \
--with-readline \

...

$ make clean 
$ make
$ make test 
$ sudo make install

检查是否安装了readline模块:

$ php m | grep readline
readline

然后启动 php 交互 shell:

$ php -a
Interactive shell

php >
于 2016-09-13T14:32:01.643 回答
0

如果您使用的是 Mac,请安装 Homebrew ( http://brew.sh ),然后键入: brew install phpsh

然后你可以运行 phpsh 来获得一个交互式的 shell。

于 2016-04-18T11:08:18.583 回答
-2

这是你应该看到的:

# php -a
Interactive shell

php > echo 1+1;
2
php > echo PHP_VERSION;
5.3.2-1ubuntu4.14
php > exit
#
于 2012-04-23T15:13:51.153 回答