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 mode
不与Interactive 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 如果您有交互模式,请确保在开始时输入<?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 shell
和 readline
。
【讨论】:
【参考方案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 && apt upgrade && 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