在 PHP 中,當輸出已經發送給瀏覽器時,嘗試再設置 HTTP 頭部信息會導致 “Headers already sent” 錯誤。為了捕獲這個錯誤,你可以使用 ob_start()
和 ob_get_clean()
函數來捕獲輸出緩沖區的內容,并在發送任何頭部信息之前進行檢查。
下面是一個示例代碼:
<?php
// 檢查是否已經發送了頭部信息
if (headers_sent()) {
// 如果已經發送了頭部信息,則輸出錯誤消息并退出腳本
echo 'Headers already sent in ' . __FILE__ . ' on line ' . __LINE__;
exit(1);
}
// 開始輸出緩沖區
ob_start();
// 在這里編寫你的 PHP 代碼
echo 'Hello, World!';
// 清空輸出緩沖區并捕獲其內容
$output = ob_get_clean();
// 檢查是否有輸出
if ($output !== '') {
// 如果有輸出,則發送頭部信息
header('Content-Type: text/html; charset=utf-8');
echo $output;
} else {
// 如果沒有輸出,可以在這里處理其他邏輯
}
?>
在這個示例中,我們首先檢查是否已經發送了頭部信息。如果已經發送了頭部信息,我們輸出錯誤消息并退出腳本。接下來,我們使用 ob_start()
開始輸出緩沖區,然后編寫你的 PHP 代碼。最后,我們使用 ob_get_clean()
清空輸出緩沖區并捕獲其內容。如果有輸出,我們會發送頭部信息并輸出內容;如果沒有輸出,你可以在這里處理其他邏輯。