无法使用命令行解释器

时间:2012-04-23 15:09:51

标签: php windows command-line-interface

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

  

启用交互模式

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

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

  

Hello stackoverflow!

9 个答案:

答案 0 :(得分:33)

安装:

php5-readline

然后尝试使用:

php -a

答案 1 :(得分:6)

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

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

  

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

答案 2 :(得分:4)

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

  • 你自己编译PHP了吗?您是否在最终构建之前使用--configure并且没有做正确的make clean
  • php -m是否将readline列为启用功能? (PHP是使用选项--with-readline
  • 构建的
  • 你的php版本是什么?
  • 您使用什么发行版?
  • 您是否安装了libreadline(* -dev包)?

答案 3 :(得分:2)

您处于交互模式,但没有提示,因为您可能没有可用的readline模式。您只需要开始输入,按Enter键后将评估您的命令。看起来似乎没有任何事情发生,但如果你输入,例如:

<?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)系统上,我遇到了一种交互模式,在关闭括号后没有回复。

相反,在按 Ctrl d 之前,输出缓冲区没有刷新。实际上,这使得交互式会话一次性使用。插入所有代码输入,然后 Ctrl d 一次返回所有输出。

答案 4 :(得分: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

答案 5 :(得分:1)

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

如果未显示任何内容,请安装readline模块:sudo apt-get install php5-readline

模块安装完成后,您可以使用上一个命令重新检查它是否存在,而不是进入交互模式:php -a

答案 6 :(得分: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 Interactive shell:

$ php -a
Interactive shell

php >

答案 7 :(得分:0)

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

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

答案 8 :(得分:-3)

这是你应该看到的:

# php -a
Interactive shell

php > echo 1+1;
2
php > echo PHP_VERSION;
5.3.2-1ubuntu4.14
php > exit
#