ob_start();
for ($i = 0; $i < 20; $i++) {
// 耗時操作 3秒
echo "ABC";
ob_flush(); // 僅刷新 PHP 輸出緩衝區
}
結果:60 秒後一次性輸出 20 個 ABC。
輸出鏈路:PHP output_buffering → Web 服務器緩衝(nginx/apache) → 瀏覽器緩衝。
ob_flush() 僅刷新 PHP 層,Web 服務器與瀏覽器仍攔截。
@ob_end_clean(); // 關閉輸出緩衝
for ($i = 0; $i < 20; $i++) {
// 耗時操作
echo "ABC" . str_repeat(' ', 256); // 填滿瀏覽器緩衝區(IE 需 256+ 字節)
ob_flush(); // PHP 層
flush(); // Web 服務器層(需 php.ini: output_buffering = Off / implicit_flush = On)
sleep(3);
}
缺點:依賴服務器配置、瀏覽器行為不一致、佔用長連接、易觸發超時、不利於擴展。
// 服務端
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
for ($i = 0; $i < 20; $i++) {
echo "data: ABC\n\n";
ob_flush(); flush();
sleep(3);
}