Cannot modify header information – headers already sent エラーの対処法

WordPress(ワードプレス)を使っていると突然真っ白な画面になるエラーに出くわすことがあります。

その場合、エラーの原因を探っていくと「Cannot modify header information – headers already sent」のエラーが出ていることに気付くことがあります。

その場合の対応方法です。

エラーの原因

HTTPヘッダーが送信された状態で更にHTTPヘッダーを送信しようとしたタイミングでエラーになります。
予期せぬヘッダー出力には以下のケースが考えられます

  • UTF8 BOM
  • <?php の前にある空白、改行
  • print や echo による出力を行ったあとのヘッダー出力

エラー箇所の特定方法

デバッグ出力状態にしてもエラー原因を特定することが難しい場合があります。
なぜならエラーログに出力される情報が2度目以降のヘッダー出力時のものであり、根本的な原因である意図しない1度目のヘッダー出力の箇所が残らないからです。
また、ワーニングなどのエラーメッセージが画面に出力されたタイミングでもヘッダー出力がされているので、更に特定が難しくなります。

そういう場合は headers_sent() 関数を使って、ヘッダーが出力済みか確認するようにしましょう
以下のコードでエラーログに出力することでどのタイミングでヘッダーが出力されているか確認できます

error_log(__FILE__ . "(" . __LINE__ . ") : header " . (headers_sent() ? "done" : "not yet" ) );

 

 

タイトルとURLをコピーしました