首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP ob_flush() 與 flush() 輸出緩衝控制詳解

     編輯:PHP 綜合知識

PHP 輸出緩衝分為兩層:PHP 內部緩衝 與 Web Server 緩衝。ob_flush() 將 PHP 緩衝推送到 Server 緩衝,flush() 再將 Server 緩衝推送到瀏覽器。正確順序必須是先 ob_flush() 再 flush()。

運作流程圖解

PHP 腳本 → PHP Output Buffer → ob_flush() → Server Buffer → flush() → 瀏覽器

即時輸出範例

<?php
echo str_repeat('m0sh1', 1000); // 先輸出大量資料填滿緩衝
for ($i = 0; $i < 4; $i++) {
    echo $i . '<br />';
    ob_flush(); // 1. 釋放 PHP 緩衝
    flush();    // 2. 釋放 Server 緩衝
    sleep(1);   // 模擬耗時運算
}
?>

執行現象

瀏覽器會每秒顯示一行數字(0,1,2,3),而非等 4 秒一次性顯示。

常見陷阱與解法

問題原因解決
無效果Web Server(Nginx/Apache gzip)再次緩衝關閉 gzip 或加 header('X-Accel-Buffering: no')
瀏覽器不顯示瀏覽器需收到足夠資料才渲染先輸出 1-2KB 填充資料(如 str_repeat)
順序顛倒先 flush() 再 ob_flush()嚴守 ob_flush() → flush() 順序

適用場景

  • 長時間執行的匯出、匯入、報表產生
  • 即時日誌、進度條顯示
  • Server-Sent Events (SSE) 串流

掌握雙重緩衝機制,才能真正實現 PHP 即時輸出。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved