有没有一种方式可以使用 PHP 从
我尝试过这个方法:
STDIN
中进行非阻塞读取:我尝试过这个方法:
stream_set_blocking(STDIN, false);
echo fread(STDIN, 1);
还有这个:
$stdin = fopen('php://stdin', 'r');
stream_set_blocking($stdin, false);
echo 'Press enter to force run command...' . PHP_EOL;
echo fread($stdin, 1);
但它仍会一直阻塞,直到fread
获得一些数据。
我注意到有几个关于此问题的未解决的bug报告(已有7年历史)。如果无法解决此问题,是否有人知道任何可以实现此功能的简单方法(适用于Windows和Linux)?
fread()
应该返回FALSE吗?它如何区分这一点与EOF?在我看来,您需要某种除fread()
之外的测试*来确定stdin是否有等待数据,因为没有明确的失败信息。 - Grahamfread
函数在没有从STDIN
接收到输入之前,即暂停脚本的执行。基本上我想要的是检查是否有用户输入到STDIN
,如果没有,则继续执行,否则运行其他一些操作。 - Petahfread()
无法读取应该读取的数据量(第二个参数),但它仍应立即返回,但读取的数据量少于此。在这种情况下,它应返回一个空字符串。@Petah 你尝试过fopen('php://stdin)
吗?我模糊地记得我之前遇到过STDIN
的问题。 - KingCrunchstream_set_blocking(STDIN, false)
应该发生的行为是,fread()
不会等待,并且如果if (strlen(fread($stdin,1)) == 0)
,那么没有任何等待输入? - Graham