Warning: Cannot modify header information – headers already sent byエラーの発生原因と対処した方法

フリーランスでWeb制作をしているkoukobaと申します。

今この記事を見ている方は下記の事象が発生しているかもしれません。

「突然WordPressの管理画面にアクセスできなくなった!」
「管理画面には入れないが実際のページにはアクセスできる・・・」
上記のような事象が発生してお悩みの方は、今回の記事を読めばエラーが解消されるかもしれません。
※今回のエラーはロリポップサーバーのスタンダードプランで確認しています。

Warning: Cannot modify header information – headers already sent byエラーが発生する原因

原因は2つあります。ともにロリポップサーバーを使用している状況で発生しています。

PHPファイルの先頭に空白や改行がある。
ロリポップサーバーを使用しているWordPressで、デバックモードにした。

PHPファイルの先頭に空白や改行がある

下記のようにテーマファイル内のPHPファイルの開始タグ(<?php)の前に空白や改行があると今回のエラーが発生します。




<?php
PHPファイルの開始タグ<?php)の前に空白や改行が入らないようにしましょう!
PHPファイルの開始タグ<?php)の前に空白や改行を消して、WordPressの管理画面にアクセスできるようになればOKです。

ロリポップサーバーを使用しているWordPressで、デバックモードにした。

wp-config.phpでdefine('WP_DEBUG', true);に変更してデバッグモードにしたところ下記のエラーが表示されました。

Warning: Cannot modify header information – headers already sent by (output started at ファイルパス/wp-includes/functions.php:6691) in ファイルパス/wp-includes/pluggable.php on line 1435

headers already sent byエラーが表示されると、サイトにアクセスはできるが、WordPressの管理画面にアクセスできなくなってしまうという現象が起きます。

エラー発生箇所が、wp-include内になっています。テーマファイルの外側になるので、ファイルを直接編集するのはできないです。

ただ、そもそもデバックモードが原因でエラーが発生するのであれば、デバックモードをOFFにすればエラーは消えます。

デバックモードをOFFにしてまだ管理画面にアクセスができないのであれば、「PHPファイルの開始タグ<?php)の前に空白や改行」が消えていない可能性があります。

ただ、デバッグモードにしてエラーが残るのは気持ちが悪いと思う方もいるかもしれません。

もしエラーを消したい場合は、ファイル側ではなくサーバー側の設定でエラーを対処します。

デバックモードにした後に発生したheaders already sent byエラーをサーバー側で対処した方法

「PHP設定」で対象ドメインのPHPをCGI版に変更する
「PHP設定」でoutput_bufferingの値を「1」に変更する

「PHP設定」で対象ドメインのPHPをモジュール版からCGI版になっているか変更する。

ロリポップサーバーの「ハイスピードプラン」と「エンタープライズ」プランは「PHP設定」を編集することができません。

「PHP設定」でoutput_bufferingの値を「1」に変更する

これでエラーが表示されなくなります。

まとめ

サイトにアクセスすることはできるが、WordPressの管理画面にアクセスできない場合

→headers already sent byエラーが発生している可能性がある。

「PHPファイルの開始タグ<?php)の前に空白や改行」がある可能性があるので全部消す。
WordPressのデバッグモードが原因で、headers already sent byエラーが発生している場合はデバッグモードをOFFにすれば、WordPressの管理画面にアクセスにできるようになる。

デバッグモードにしたときのエラーが表示が気持ち悪いと思う場合はサーバー側の「PHP設定」で「output_buffering」の値を「1」に変更することで解消される。
ただし、ロリポップのハイスピードプランとエンタープライズプランの場合は「PHP設定」を編集することができない。

他のPHPエラーの記事

他のPHPエラー

PHPのエラーの種類について解説しています。具体例や解決方法については順次更新していきます。

>お問い合わせはこちら

お問い合わせはこちら