【问题标题】:Has PHP 7.4 broken fgets(STDIN)?PHP 7.4 是否破坏了 fgets(STDIN)?
【发布时间】:2019-11-28 16:09:47
【问题描述】:

我刚刚在 Windows 上从 PHP 7.3.12 升级到 PHP 7.4.0(今天发布)。

这一直有效:

<?php

    $input = fgets(STDIN);
    var_dump($input);

现在输出:

bool(false)

它不再要求/允许输入。它立即返回一个 bool false。

我在更新日志或手册页中找不到任何关于 fgets 的最新更改的提及。

怎么了?我应该做些什么?这是一个错误吗?它是已知的吗?有没有其他人遇到过?

另外,如果这是错误的(尽管工作了这么长时间,尽管我在网上找到了推荐的代码),那么接受用户输入/等待 Enter 的“真实”方式是什么?

我现在暂时降级回 7.3.12 来解决这个问题。

编辑:终于有人为此提交了错误报告。我当然希望它不会被忽视,就像许多 FOSS 项目中经常发生的那样:https://bugs.php.net/bug.php?id=78883

【问题讨论】:

  • 世界上没有什么是完美的。您绝对不应该害怕将来升级您的 PHP 版本——但有两句话建议:首先阅读变更日志,然后在本地环境中进行(这样您的生产数据不会受到影响)。如果一切正常,您也可以在生产主机中升级。
  • @Qirel 如前所述,我确实阅读了更改日志。对此什么也没说。
  • @u_mulder 我对 var_dump 有什么期望?当然是返回值。像你这样的人在这个网站上随意、无端的侮辱是怎么回事?
  • 作为记录,该错误现已修复,将成为 7.4.1 版本的一部分。

标签: php php-7.4


【解决方案1】:

确认我在 7.4 中遇到了相同的行为。我现在创建了一个笨拙的解决方法:

    ob_start();                                         // buffer so we don't see the output generated at DOS prompt
    $cmd_line='SET/P phpinput= & SET phpinput';         // Step 1: prompt user to enter a value for variable phpinput & Step 2: display the value for phpinput
    $result=system($cmd_line);                          // Execute
    $result=str_replace('phpinput=', '', $result);      // Clean up the returned result
    ob_end_clean();                                     // resume normal output
    echo "\nReturned result from user typing is: $result\n";

【讨论】:

  • 有了这样一个“凌乱”的解决方法(顺便说一句,这不怪你),我将不得不坚持使用 7.3.12 直到 7.4.0.1 至少......可能是 7.4 .1,虽然这将是一个痛苦的等待......
猜你喜欢
  • 1970-01-01
  • 2013-01-18
  • 2016-08-23
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多