原因
在nginx下想在浏览器输出stream流,发现ob_flush与flush失效,还是一同输出内容
解决
header('X-Accel-Buffering: no'); // Nginx情况下必须加这一行
header('Content-type: text/event-stream');
header('Cache-Control: no-cache');
echo 'xxxxxx';
echo PHP_EOL;
ob_flush();
flush();
额外
laravel 下按照stream流格式输出返回错误信息
private function stream_error($error) {
return response()->stream(function () use($error) {
$i = 0;
while(true){
$str = mb_substr($error, $i, 1);
echo "data: {$str}\n\n";
$i++;
if ($i >= mb_strlen($error)){
echo "data: [DONE]\n\n";
echo PHP_EOL;
ob_flush();
flush();
break;
}
ob_flush();
flush();
sleep(.5);
}
}, 200, [
'Cache-Control' => 'no-cache',
'X-Accel-Buffering' => 'no',
'Content-Type' => 'text/event-stream',
]);
}