作者:你就夜沉思 | 来源:互联网 | 2018-05-12 06:47
PHP的STDIN是阻塞操作,直接读取内容的话会造成阻塞.如下代码会一直运行直到有数据输入:$datastream_get_contents(STDIN);按理可以通过声明stream_set_blocking(STDIN,FALSE)来操作:stream_set_blocking(STDIN,FALSE);$datastream_get_contents(ST
PHP的STDIN是阻塞操作,直接读取内容的话会造成阻塞.如下代码会一直运行直到有数据输入: $data = stream_get_contents(STDIN); 按理可以通过声明stream_set_blocking(STDIN, FALSE)来操作: stream_set_blocking(STDIN, FALSE);$data = stream_get_contents(ST
PHP的STDIN是阻塞操作,直接读取内容的话会造成阻塞.如下代码会一直运行直到有数据输入:
$data = stream_get_contents(STDIN);
按理可以通过声明stream_set_blocking(STDIN, FALSE)来操作:
stream_set_blocking(STDIN, FALSE);
$data = stream_get_contents(STDIN);
运行依旧不行,其实这是一个Bug,描述:https://bugs.php.net/bug.php?id=34972
通过测试发现,可用通过ftell函数获取STDIN文件句柄指针读/写的位置来判断.
if(ftell(STDIN)===0){
$data = stream_get_contents(STDIN);
}
原文地址:PHP命令行如何判断有管道数据输入, 感谢原作者分享。