PHP4 引入輸出緩衝函數,允許腳本將輸出暫存在記憶體緩衝區,而非直接發送給瀏覽器。此機制不影響 header()、setcookie() 送出的 HTTP 標頭,僅作用於 echo、print 等輸出內容。
<?php
ob_start();
echo 'Hello ';
setcookie('cookiename', 'cookiedata'); // 不會產生 "headers already sent" 錯誤
ob_end_flush();
?>
緩衝區內容在 ob_end_flush() 時一次性送出,故 setcookie 仍在標頭發送前生效。
| 函數 | 說明 |
|---|---|
flush() | 刷新輸出緩衝區,送出至瀏覽器 |
ob_start() | 開啟輸出緩衝,後續輸出暫存於緩衝區 |
ob_get_contents() | 取得目前緩衝區內容字串(可備份或後處理) |
ob_get_length() | 取得緩衝區內容長度 |
ob_end_flush() | 送出緩衝區內容並關閉緩衝 |
ob_end_clean() | 捨棄緩衝區內容並關閉緩衝(防止敏感資料外洩) |
ob_implicit_flush() | 開啟/關閉隱含刷新,開啟後每次輸出自動送出 |
ob_start(),形成多層緩衝。ob_end_clean() 放棄輸出,改顯示錯誤頁面。output_buffering,僅在需要處理標頭與輸出順序的腳本中使用。