PHP 中許多函數直接輸出 (如 passthru(), readfile(), var_dump()),若想攔截輸出存入變數、寫入檔案或經處理後再輸出,需使用輸出緩衝函數。
ob_start():開啟緩衝,後續輸出導向內部緩衝區ob_get_contents():取得緩衝區內容 (字串)ob_get_length():取得緩衝區長度ob_end_flush():關閉緩衝並輸出內容ob_end_clean():關閉緩衝並捨棄內容<?php
$var = array('key' => '<script>alert(1)</script>', 'num' => 123);
ob_start();
var_dump($var);
$output = ob_get_contents();
ob_end_clean();
// 轉義 HTML 特殊字元後包在 <pre> 中顯示
echo '<pre>' . htmlspecialchars($output) . '</pre>';
?>
此法解決 var_dump 輸出含 HTML 標籤導致瀏覽器解析而看不見的問題。
readfile()、passthru() 輸出存入變數供模板引擎使用ob_start() 開頭,結尾取內容存檔,下次直接讀檔輸出