以下面這段代碼並不會逐個輸出,而是當瀏覽器籌夠一定字節數進行統一輸出,結果顯而易見,10秒后一次性輸出所有內容
for($i=0;$i<10;$i++){ echo $i.'</br>'; sleep(1); }
在Apache環境下可以這樣解決此問題
for($i=0;$i<10;$i++){ echo $i.'</br>'; sleep(1); ob_flush(); //關閉緩存 flush(); //刷新緩存即立即輸出了 }
nginx 里面 flush 默認是無效的, 這個函數默認是作用在php作為 apache模塊時才有效,如果需要 nginx 里面支持,需要加上一行
header('X-Accel-Buffering: no');
實例代碼
header('Content-Type: text/event-stream'); // 以事件流的形式告知瀏覽器進行顯示 header('Cache-Control: no-cache'); // 告知瀏覽器不進行緩存 header('X-Accel-Buffering: no'); // 關閉加速緩沖 for($i=0;$i<10;$i++){ echo $i.'</br>'; sleep(1); ob_flush(); flush(); }