使用輸出緩衝時,如果一個被 include 的檔案在輸出緩衝區關閉之前呼叫了 die(),則緩衝區的內容會被輸出而不是清除。也就是說,預設會呼叫 ob_end_flush()。
<?php
// a.php (這個檔案不應該顯示任何內容)
ob_start();
include('b.php');
ob_end_clean();
?>
<?php
// b.php
print "b";
die();
?>
這樣會輸出 "b" 而不是什麼都沒有,因為呼叫的是 ob_end_flush() 而不是 ob_end_clean()。也就是說,die() 會輸出緩衝區而不是清除它。我花了一段時間才確定是什麼導致了輸出,所以我想分享一下。