【问题标题】:No output from PHP interactive on WindowsWindows 上的 PHP 交互没有输出
【发布时间】: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 表达式的测试平台以及运行一些本地脚本。

【问题讨论】:

    标签: php windows-7 command-line-interface output


    【解决方案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

            【讨论】:

              猜你喜欢
              • 2011-11-01
              • 2014-02-28
              • 1970-01-01
              • 1970-01-01
              • 2019-08-13
              • 2020-12-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多