PHP 提供兩種相關的方法來清空(發送並捨棄內容)系統緩衝區:呼叫 flush() 函式,以及使用 ob_implicit_flush() 或 implicit_flush php.ini 設定來啟用隱式清空。
停用隱式清空時,PHP 只會在呼叫 flush() 或腳本結束時清空輸出。
啟用隱式清空時,PHP 會在每個產生輸出的程式碼區塊後嘗試清空。此處的輸出是指長度非零且
<?php ?>
標籤之外的資料
php://output
的內容
注意: 印出空字串或發送標頭不被視為輸出,不會導致刷新操作。
如果啟用了隱式刷新,控制字元(例如 "\n"
、"\r"
、"\0"
)也會觸發刷新。
此功能無法刷新使用者層級的輸出緩衝區。要將它們一起使用,必須先刷新使用者層級的輸出緩衝區,然後再刷新系統緩衝區,才能讓 PHP 產生任何輸出。
呼叫 flush() 或啟用隱式刷新可能會干擾在 Web 環境中設定和發送標頭的使用者層級輸出緩衝區的輸出處理程式(例如 ob_gzhandler()),因為它會在這些處理程式執行之前發送標頭。
底層軟體/硬體實現的緩衝機制無法被 PHP 覆蓋,在使用 PHP 的緩衝控制函式時應將其納入考量。檢查網路伺服器/瀏覽器/控制台的緩衝設定並配合這些設定可以減輕潛在的問題。在 Web 環境中工作時,可以調整網路伺服器的緩衝設定或腳本的緩衝設定以協同工作,而解決各種瀏覽器的緩衝策略則可以通過調整 PHP 腳本中的緩衝來實現。在實現行緩衝的控制台上,可以在刷新輸出之前在適當的位置插入換行符。
雖然每個 SAPI 的刷新實現方式略有不同,但這些實現都屬於以下兩種類型之一
Apache2Handler
、CGI
、FastCGI
和 FPM
都是這類 SAPI。
CLI
和 embed
,只會刷新輸出。