Php 无法使用命令行解释器

Php 无法使用命令行解释器,php,windows,command-line-interface,Php,Windows,Command Line Interface,我尝试在php解释器中执行简单的php代码。 当我执行命令php-a时,我收到了消息 交互式模式已启用 没有php输入的任何位置。 但是我可以通过命令php-r执行php代码。 例如: <?php echo "hello world"; ?> php-r“echo'Hello stackoverflow!”;“ 你好 这是您应该看到的: # php -a Interactive shell php > echo 1+1; 2 php > ech

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

交互式模式已启用

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

<?php

echo "hello world";

?>
php-r“echo'Hello stackoverflow!”;“

你好


这是您应该看到的:

# php -a
Interactive shell

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

您处于交互模式,但没有提示,因为您可能没有可用的readline模式。您只需要开始键入,然后在按enter键后,您的命令将被计算。看起来没有发生任何事情,但如果您输入,例如:

<?php

echo "hello world";

?>

请注意,您必须从
类型
php-m
开始,并确保具有readline模块。如果你不这样做,你将无法使用它

从PHP5.1.0开始,CLI SAPI使用 -如果PHP是使用--with readline选项编译的,则为选项


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

  • 你是自己编译PHP的吗?您是否在最终构建之前使用了--configure,但没有执行正确的
    清理
  • php-m
    是否将readline列为已启用功能?(PHP是使用选项
    --使用readline
    构建的)
  • 你的php版本是什么
  • 您使用什么分发
  • 您是否安装了libreadline(即*-dev包)

在我厌倦了在每台机器上编译它之后,我使用了PHPSH (乔伊·亚当斯提到)

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

安装python phpsh

安装此:

php5-readline
然后尝试使用:

php -a

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

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


模块安装后,您可以使用上一个命令重新检查它的存在,然后使用以下命令进入交互模式:
php-a
如果您使用的是Mac,则安装Homebrew(),然后键入: brew安装phpsh


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

因为没有安装模块readline

以下是我如何通过重新编译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
检查是否安装了读线模块:

$ php m | grep readline
readline
然后启动php交互式shell:

$ php -a
Interactive shell

php >

这看起来像一只虫子;看见您可以改为尝试
phpsh
。@这不是一个bug,而是一个用户错误,它也记录在这个bug报告中。正确的
makeclean
解决了这个问题。顺便说一句,您在Windows上这一事实是一个重要的细节,因为readline是一个gnu模块。在尝试调试功能时请记住这一点。(连同其他链接)基本上表示“php-a”在Windows上不可用。不过还有其他方法。啊,是的,一些原本不需要远程访问的模组不可用,所以它会在没有任何警告或指示的情况下无声地失败。太棒了。可能是因为他刚刚发布了预期的行为,而OP似乎无法在他的机器上产生这种行为。这不是一个答案。@halfer不是我的,但我想是因为这个问题是关于没有readline支持的PHP交互模式的,意思是没有
PHP>
提示。原始海报上的内容仅仅是“它不工作”。这在很大程度上让我们只能猜测到底发生了什么,而没有什么可以比较的。这不是一个答案-@Kai,我礼貌地不同意。试着对人们的贡献持积极态度,尤其是当他们来自一个有着出色代表性的人时。
:)。编辑:尤其是当你也发布了答案的时候。在这里发布答案应该是协作的,而不是竞争@我同意你关于积极的看法。我只是想回答你的问题,为什么这会被否决,事实上,“交互式模式启用”已经足够好了,因为这是OP从
php-a
收到的唯一消息。现在我知道为什么我不能正确使用交互式模式了。我使用的是Windows操作系统,无法安装readline模块。所以我的解决方案是移动到linux(我可以纯粹使用cli吗?@user1341970查看我的答案-你可以在Windows上使用交互模式,它只是不给你提示。您必须在交互模式下输入终端。@user1341970我不明白您为什么不能。如果你想在windows上这样做,你总是可以从脚本中读取输入,但是你会遇到readline的问题(模块,而不是函数)。OP在windows上(没有说),但它除了在屏幕上显示你正在键入的内容之外,实际上什么都不做(嗯,我测试过的机器)@craniumonempty正如我上面所描述的,它确实可以在windows上工作。我在发帖前核实过了。在没有readline的其他平台上也可以这样工作。嗯,是否需要安装其他东西,因为它不在这个平台上(windows7)。这不是我的机器,所以它在xampp上从一个跳转驱动器启动。@craniumonempty你是用
启动它的吗?是的,用和不用都试过了。它只显示我键入的内容,不计算任何内容。OP使用的是windows,因此可能使用了预编译的二进制文件。在cmd中运行PHP函数非常有趣!
$ php -a
Interactive shell

php >