不能使用命令行解释器

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

交互模式启用

没有任何地方的PHPinput。 但是我可以通过命令php -r执行一个php代码。 例如:

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

你好,stackoverflow!

安装这个:

 php5-readline 

然后尝试使用:

 php -a 

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

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

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

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

  • 你自己编译PHP吗? 你玩过–configure,并没有做一个适当的make clean之前,你最终的构建?
  • php -m列表readline是否启用了功能? (PHP是用选项--with-readline构建的)
  • 你是什​​么PHP版本?
  • 你使用什么分配?
  • 你有没有安装libreadline(* -dev包)?

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

这是好得多然后php -a(语法高亮和自动完成)

安装python phpsh

看看install-php5-read-line-support-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 

您处于交互模式,但没有提示,因为您可能没有可用的readline模式。 你只需要开始输入,而你按下回车后你的命令将被评估。 它看起来并不是什么事情,但是如果你输入,例如:

 <?php echo "hello world"; ?> 

…你会得到输出…

如果你输入花括号,在你按下输入后,他们会被评估}

 <?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一次返回所有输出。

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

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

在模块安装之后,您可以使用先前的命令重新检查它的存在,比如使用php -a进入交互模式

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

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

由于模块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 > 

这是你应该看到的:

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