フリーランスでWeb制作をしているkoukobaと申します。
今この記事を見ている方は下記の事象が発生しているかもしれません。
「管理画面には入れないが実際のページにはアクセスできる・・・」
Warning: Cannot modify header information – headers already sent byエラーが発生する原因
原因は2つあります。ともにロリポップサーバーを使用している状況で発生しています。
ロリポップサーバーを使用しているWordPressで、デバックモードにした。
PHPファイルの先頭に空白や改行がある
下記のようにテーマファイル内のPHPファイルの開始タグ(<?php
)の前に空白や改行があると今回のエラーが発生します。
<?php
<?php
)の前に空白や改行が入らないようにしましょう!<?php
)の前に空白や改行を消して、WordPressの管理画面にアクセスできるようになればOKです。ロリポップサーバーを使用しているWordPressで、デバックモードにした。
wp-config.phpでdefine('
WP_DEBUG'
, true);に変更してデバッグモードにしたところ下記のエラーが表示されました。
headers already sent byエラーが表示されると、サイトにアクセスはできるが、WordPressの管理画面にアクセスできなくなってしまうという現象が起きます。
エラー発生箇所が、wp-include内になっています。テーマファイルの外側になるので、ファイルを直接編集するのはできないです。
ただ、そもそもデバックモードが原因でエラーが発生するのであれば、デバックモードをOFFにすればエラーは消えます。
デバックモードをOFFにしてまだ管理画面にアクセスができないのであれば、「PHPファイルの開始タグ(<?php
)の前に空白や改行」が消えていない可能性があります。
ただ、デバッグモードにしてエラーが残るのは気持ちが悪いと思う方もいるかもしれません。
もしエラーを消したい場合は、ファイル側ではなくサーバー側の設定でエラーを対処します。
デバックモードにした後に発生したheaders already sent byエラーをサーバー側で対処した方法
「PHP設定」でoutput_bufferingの値を「1」に変更する
「PHP設定」で対象ドメインのPHPをモジュール版からCGI版になっているか変更する。
「PHP設定」でoutput_bufferingの値を「1」に変更する
これでエラーが表示されなくなります。
まとめ
サイトにアクセスすることはできるが、WordPressの管理画面にアクセスできない場合
→headers already sent byエラーが発生している可能性がある。
<?php
)の前に空白や改行」がある可能性があるので全部消す。WordPressのデバッグモードが原因で、headers already sent byエラーが発生している場合はデバッグモードをOFFにすれば、WordPressの管理画面にアクセスにできるようになる。
デバッグモードにしたときのエラーが表示が気持ち悪いと思う場合はサーバー側の「PHP設定」で「output_buffering」の値を「1」に変更することで解消される。
ただし、ロリポップのハイスピードプランとエンタープライズプランの場合は「PHP設定」を編集することができない。