PHP 4.0 引入輸出緩衝函數集,允許在腳本執行期間暫存輸出內容,解決「Header already sent」錯誤,並實現頁面靜態化、壓縮輸出等高級功能。
| 函數 | 功能 | 說明 |
|---|---|---|
| flush() | 輸出並清空緩衝區 | 高效,常用於實時輸出 |
| ob_start() | 開啟輸出緩衝 | 非 Header 輸出將暫存於內存 |
| ob_get_contents() | 獲取緩衝區內容 | 返回字符串,未啟用時返回 FALSE |
| ob_get_length() | 獲取緩衝區長度 | 返回字節數,未啟用時返回 FALSE |
| ob_end_flush() | 輸出並關閉緩衝 | 發送內容到瀏覽器 |
| ob_end_clean() | 清空並關閉緩衝 | 不輸出內容,直接丟棄 |
| ob_implicit_flush() | 開啟/關閉絕對刷新 | 類似 Perl 的 $|=x,默認關閉 |
<?php
ob_start(); // 開啟緩衝
echo "Welcome \n"; // 輸出暫存,不發送到瀏覽器
header("location:next.php"); // 可正常發送 Header
?>
若無 ob_start(),echo 會導致 Header 發送失敗。緩衡區將輸出延遲至 flush() 或腳本結束時。
<?php
ob_start();
phpinfo(); // 大量輸出
$info = ob_get_contents(); // 獲取緩衝內容
$file = fopen('phpinfo.txt', 'w');
fwrite($file, $info); // 寫入文件
fclose($file);
?>
此技巧可將動態生成的內容「函數化」,實現頁面緩存、報表導出等需求。
輸出緩衝是 PHP 進階開發的關鍵技能,善用它能解決輸出順序衝突、實現模板引擎核心機制、優化響應性能。