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" ) );