PHP 7.4 是否损坏了 fgets(STDIN)?
Has PHP 7.4 broken fgets(STDIN)?
我刚刚在 Windows 从 PHP 7.3.12 升级到 PHP 7.4.0(今天发布)。
这一直有效到现在:
<?php
$input = fgets(STDIN);
var_dump($input);
它现在输出:
bool(false)
它不再 ask/allow 用于输入。它立即 returns 一个 bool false.
我在变更日志或手册页中找不到任何关于 fgets 最近更改的提及。
怎么了?我应该做些什么?这是一个错误吗?它是已知的吗?其他人遇到过吗?
此外,如果这是错误的(尽管工作了这么长时间,尽管我在网上找到了推荐的代码),接受用户 input/wait 的 "real" 方式是什么输入?
我现在已经降级回 7.3.12 来解决这个问题。
编辑:终于有人为此提交了错误报告。我当然希望它不会被忽略,就像许多 FOSS 项目中经常发生的情况一样:https://bugs.php.net/bug.php?id=78883
确认我在 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";
我刚刚在 Windows 从 PHP 7.3.12 升级到 PHP 7.4.0(今天发布)。
这一直有效到现在:
<?php
$input = fgets(STDIN);
var_dump($input);
它现在输出:
bool(false)
它不再 ask/allow 用于输入。它立即 returns 一个 bool false.
我在变更日志或手册页中找不到任何关于 fgets 最近更改的提及。
怎么了?我应该做些什么?这是一个错误吗?它是已知的吗?其他人遇到过吗?
此外,如果这是错误的(尽管工作了这么长时间,尽管我在网上找到了推荐的代码),接受用户 input/wait 的 "real" 方式是什么输入?
我现在已经降级回 7.3.12 来解决这个问题。
编辑:终于有人为此提交了错误报告。我当然希望它不会被忽略,就像许多 FOSS 项目中经常发生的情况一样:https://bugs.php.net/bug.php?id=78883
确认我在 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";