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