Windows 上的 PHP 交互没有输出

Posted

技术标签:

【中文标题】Windows 上的 PHP 交互没有输出【英文标题】:No output from PHP interactive on Windows 【发布时间】:2013-06-26 01:54:34 【问题描述】:

我在我的 Win 7 机器上从 xampp (5.4.7) 以交互方式运行 php,并且无法从窗口获得任何输出。我搜索了各种解决方案,但到目前为止没有任何效果。这是一个示例: C:\xampp>php -v PHP 5.4.7 (cli)(构建时间:2012 年 9 月 12 日 23:48:31) 版权所有 (c) 1997-2012 PHP 集团 Zend Engine v2.4.0,版权所有 (c) 1998-2012 Zend Technologies

C:\xampp>php -a
Interactive mode enabled

<?
echo "hi";
printf "hi";
fwrite (STDOUT, "hi");

还有什么想法???

我还尝试了 php -an 并在 php.ini 中设置 output_buffing Off,但均无济于事。

基本上我的目标主要是用它作为 php 表达式的测试平台以及运行一些本地脚本。

【问题讨论】:

【参考方案1】:

我输入php -a后输入的第一行和你的略有不同:

<?php          //press Enter
echo 'This ';  //press Enter
echo 'works';  //press Enter
//Press Ctrl+z on this line to get a ^Z, then press Enter
This works
C:\Windows\System32>

麻烦的是它会返回到 Windows 命令提示符,您必须继续输入 php -a 才能输入更多内容。

为了节省一些输入,我创建了一个快捷方式,右键单击它,打开其属性对话框并在 Target 文本框中输入以下命令:

C:\Windows\System32\cmd.exe /k "php -a"

此快捷方式以交互模式打开 PHP 提示符。或者,这个以交互模式启动并列出 PHP 开关:

C:\Windows\System32\cmd.exe /k "php -h & php -a"

【讨论】:

最后,一些可行的东西(在 Windows 8.1 上):) Thx【参考方案2】:

Interactive modeInteractive shell 相同。后者接受 cmd 中的命令或 linux 中的 shell。第一个读取 whole 脚本,然后返回输出。如果您在 sn-p 结束时点击CTRL-Z,它应该会返回输出。

查看此处:http://php.net/manual/en/features.commandline.interactive.php 了解更多信息(尤其是first comment)。

【讨论】:

谢谢。 Ctrl-Z 不起作用,某些人建议的 ctrl-d 也不起作用。但是对于在 Windows 中获取交互式 php,该链接听起来非常令人沮丧。也许我需要去 Cygwin 或类似的地方才能做到这一点? 我曾尝试将 PHPSH 与 Cygwin 结合使用,它来自 Facebook,并使用一些 Python 来使其工作,但经过一番摆弄后它确实工作正常。 phpsh.org 如果您有交互模式,请确保在开始时输入&lt;?php【参考方案3】:

如果您启动“php -a”并看到“已启用交互式 模式”而不是“交互式 shell”,那么您的 php 副本可能是在没有 readline 支持的情况下编译的,并且没有交互式外壳。

据我所知,PHP 的 Windows 副本都是在没有 readline 支持的情况下编译的。这使得“-a”选项在 Windows 中毫无价值(至少对我而言)。

"php -a" 应该像这样工作(在这种情况下从 php 的 linux 副本输出):

$ php -a
Interactive shell

php > echo 5+8;
13
php > exit
$

PHP 的 Windows 副本中的“php -a”不是交互式 shell,因此其工作原理与取消“-a”选项相同。使用 F6 或 CTRL+Z 键入 EOF 字符以完成脚本(显示为 ^Z):

C:\>php -a
Interactive mode enabled

<?php
echo 5+8;
?>
^Z
13
C:\>

去掉“-a”,你会得到基本相同的结果(减去文本“启用交互模式”:

C:\>php
<?php
echo 5+8;
?>
^Z
13
C:\>

如果您使用“php -a”并获得文本“启用交互模式”并且没有获得 cli.prompt 的输出(通常是“php >”),那么您应该检查您的 php 版本(使用“php -v") 以确保它至少为 5.1,并且您的 php 模块(带有“php -m”)以确保列出了“readline”模块。

【讨论】:

【参考方案4】:

我制作了 cmd 脚本来模拟交互式 php shell。它将每个命令读入一个环境变量,然后启动一个新的 PHP 实例来运行每个命令。

@echo off
:loop
    set /p php="php> " %=%
    php -r "%php%"
    echo.
goto loop

【讨论】:

这个问题是它不会记住你定义的变量或函数【参考方案5】:

从 PHP 7.1.0 开始,Windows 支持 interactive shellreadline

【讨论】:

【参考方案6】:

在 Windows 中使用。确保您有一个 PATH 变量直接在您的 Windows 环境中使用 php。可能需要重新启动。使用 gitbash/cmd/rails shell/nodejs 等,但不应该有任何区别。打开cmd

用命令检查 php: php -v 如果一切都好填充php版本等

加载交互模式: php -a 启用后输入您的代码,例如如下(每行都有回车) ^z 是同时按下 ctrl 键和 z 键的 shell 输出 这会运行你的小 sn-p,但会立即让你退出 php 交互模式

<?php
$x = 5;
$y = 6;
$z = $x + $y;
echo $z;
?>
^z

(将返回 11)非常擅长数学哈:-)

【讨论】:

【参考方案7】:

使用Interactive Mode 时,您实际上需要输入整个脚本。

<?php
echo "HELLO WORLD";

然后要“执行”脚本,您需要在空行上执行CTRL+Z,然后按ENTER

【讨论】:

【参考方案8】:

从其他答案中可以看出,Windows PHP 不支持回显命令(很容易)。 但是,在 Windows 10 上,有一种解决方法,您可以启用 Windows 10 Ubuntu 子 shell 系统。

为 linux 安装 windows 子系统

执行以下操作之一:

控制面板 -> 应用程序 -> 管理可选功能。 然后确保选中Windows-subsystem for linux

您也可以通过在提升的 Powershell 窗口中运行 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 来安装它。

现在重启(也许先收藏这个页面)

重启后安装this app 并打开它。 加载完成并创建用户后,输入sudo apt update &amp;&amp; apt upgrade &amp;&amp; apt install PHP

现在当您需要 php 交互时,只需打开命令提示符并输入 bash 然后输入 php -a

【讨论】:

以上是关于Windows 上的 PHP 交互没有输出的主要内容,如果未能解决你的问题,请参考以下文章

virtualenv和conda的区别及windows 10上的部署

连接到 Windows Server 2008 上的 MS Access accdb 文件

Windows 上的 PHP5.4,有 sqlite 但没有 Apache 和 MySQL

Linux / Mono上的VS编码UI测试

Windows 10 上的 PHP 卷曲,php 5.6.17

Apache+php在windows下的安装和配置