3
这是我想要做的事:如何检查流是否有任何数据?
$output = '';
$stream = popen("some-long-running-command 2>&1", 'r');
while (!feof($stream)) {
$meta = stream_get_meta_data($stream);
if ($meta['unread_bytes'] > 0) {
$line = fgets($stream);
$output .= $line;
}
echo ".";
}
$code = pclose($stream);
貌似这个代码是不正确的,因为它卡在调用stream_get_meta_data()
。什么是正确的方式来检查流是否有一些数据要读取?这里的要点是避免锁定在fgets()
。
需要注意的是,正如@DaveRandom所做的那样,如果您要使用NULL,您必须将其分配给一个变量,以避免传入一个非变量引用的麻烦(前三个参数被声明)。请阅读http://php.net/manual/en/function.stream-select.php上的说明 – Jeff