執行PHP 腳本時,您可能會遇到以下錯誤:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
當輸出已傳送到客戶端後嘗試傳送標頭時,會發生此錯誤。以下是發生這種情況的原因以及解決方法:
header()、header_remove()、session_start() 和setcookie() 等函數要求在任何輸出之前發送標頭被生成。如果在呼叫這些函數之前產生輸出,則會觸發警告。
由於以下原因,可能會無意中發生輸出:
有意地,可以透過以下方式產生輸出:
錯誤訊息提供發生過早輸出以及呼叫 header() 的行號和檔案。尋找錯誤訊息的「輸出開始於」部分中提到的行,以確定產生輸出的位置。
1.刪除過早輸出:
確保在 header() 呼叫之前沒有過早輸出。這包括刪除額外的空格、BOM 或有意輸出(如 echo 語句)。
2.使用輸出緩衝:
輸出緩衝可以透過延遲將輸出傳送到客戶端來幫助緩解此問題。透過 php.ini、.htaccess 或 .user.ini 中的 output_buffering 配置設定啟用輸出緩衝。
3.使用 headers_sent() 檢查:
使用 headers_sent() 檢查是否可以在執行敏感操作之前發送標頭。如果 headers_sent() 傳回 true,請使用替代方法,例如 HTML 元標記或 JavaScript 重定向。
4.分離控制與輸出邏輯:
重構程式碼以分離控制邏輯和輸出產生。透過確保在顯示任何輸出之前進行標頭調用,這有助於防止過早輸出。
5.使用編輯器或工具修復 BOM:
BOM 可能出現在文字檔案中,並可能導致過早輸出。使用具有 BOM 偵測功能的文字編輯器或 phptags 等工具來修正 BOM 問題。
以上是為什麼我在 PHP 中收到'標頭已發送”錯誤以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!