WordPressのエラー: 予期しない出力により cookies がブロックされました…の対処法をまとめてみました | 解決事例集
WordPressのエラーを説明している方がいらっしゃいましたのでご紹介しておきます。
エラー: 予期しない出力により cookies がブロックされました。ヘルプが必要な場合はこちらのドキュメンテーションを読むか、サポートフォーラムをご利用ください。
というエラーメッセージがWordPressのログイン時に発生することがあります。以前、お客さんに聞かれて対処したものの細かく調べたりはしなかったので一度整理してみたいと思います。
もちろん、そのときの対処方法も共有致します。ただ、原因はいろいろとありますので分からないときにはお電話やお問い合わせいただけると早急に対応を代行できるかもしれません。
また、どうしてもプログラム(PHP)を修正することになるので初心者の方やWordPressの操作に自身のない方にとってはWordPressの破壊行為に繋がるかもしれません。
あらかじめ覚悟してから操作してくださいね。もちろん、バックアップを取得してから作業してくださいね。
1.原因を特定する
まず、始めに疑うのは「cookies がブロックされました」という文言からブラウザのCookieの設定を疑う人が大半でしょう。しかし、このメッセージ自体を疑うところから始めないといけません。 ちなみにCookieとは日本語読みでクッキーと読みます。ユーザー情報などの情報を保存するためのシステムのひとつです。Google Chrome を始めとしたブラウザが持っています。 ほとんどのブラウザの標準の設定ではクッキーを許可しています。 そこでいろんなブラウザでCookieを受け付けない設定にして検証してみました。しかし!このメッセージは表示されなかったのです!!(゚∀゚)Cookieを拒否してもエラーメッセージ(予期しない出力により cookies がブロックされました)が出なかったブラウザ
- Google Chrome
- Firefox
- Opera
- Pale Moon
エラーメッセージをデバッグする
wp-config.php の80〜90行くらいにある設定を変えてデバッグモードにします。
※変更前
define(‘WP_DEBUG’, false);
※変更後
define(‘WP_DEBUG’, true);
if (WP_DEBUG) {
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
@ini_set(‘display_errors’,0);
}
そうすると具体的なエラーログが出力されます。出力箇所は、wp-content の直下にファイル名:debug.log として出力されます。
例えば、プラグインから発生している場合もあるし、WordPress本体の場合もあります。
2.原因を対処する
ここは原因によるので一概には言えないのですが、プラグインが原因だったらそのプラグインのバージョンが適切かなどを確認します。 WordPress本体だとPHPのバージョンが古くて対応できていないケースもあるはずです。その場合は、エラーメッセージをグーグルなどで再検索してみてください。 諸先輩たちが親切に対処方法を教えてくれることも多いです。レアケースで言うと改行コードがUTF-8ではなかったとかあるらしいですね。 おそらく自分で修正したときに誤ったキャラクターで保存してしまったのでしょう。 ここではよくある事例をご紹介しましょう。事例1:php.ini の設定を確認する
「php.ini」 の 「output_buffering」が「on」になっているか確認します。もし、なっていなければ「on」にしましょう。さくらのレンタルサーバーの場合
ロリポップのレンタルサーバーの場合
「サーバーの管理・設定」ー「PHP設定」から該当ドメインの php.ini の設定ボタンをクリックしてください。Xサーバーの場合
「サーバーパネル」ー「php.ini」から該当ドメインを選択して「php.ini直接編集」を選択してください。 私の場合、output_buffering = 4096 となっていますが、これは標準値のはずです。 output_buffering = on でもどちらでも構わないはずです。事例2:プラグインが原因の場合
もし、プラグインが原因でエラーメッセージが出ているなら、すべてのプラグインを無効化してしまえば原因の切り分けができます。 FTPでログインして「wp-content」ー「plugins」のディレクトリ名を変更するだけです。確認が取れたら元の名前へ修正しておいてくださいね。事例3:テーマが原因の場合
もし、テーマが原因でエラーメッセージが出ているなら、プラグインを停止するのと同じように対応します。ただし、プラグインのときと違って利用中のテーマを無効化します。 FTPでログインして「wp-content」ー「themes」ー「利用中のテーマ名」のディレクトリ名を変更するだけです。確認が取れたら元の名前へ修正しておいてくださいね。事例3:session_start が含まれる
メッセージに以下が含まれる場合は、XXX行目の付近に空行が入っていることがあるかもしれません。その場合は、空行を削除しましょう。
PHP Warning: session_start(): Cannot send session cookie – headers already sent by (output started at /home/wp-content/themes/ThemeName/functions.php:XXX:XXX) in /home/wp-content/plugins/hoge/hogehoge on line XXX
事例4:Cannot modify header informationが含まれる
メッセージに以下が含まれる場合は、該当ファイル(この場合、wp-config.php )の1行目の付近に空白が入っていることがあるかもしれません。 不必要な空白を削除してみましょう。 以下は後述するサクラエディタで見たときの空白の見え方です。ご参考になさってください。
PHP Warning: Cannot modify header information – headers already sent by (output
started at /home/wp-config.php:1) in /home/wp-login.php on line XXX
メッセージに以下が含まれる場合は、該当ファイル(この場合、functions.php )の最終行の付近に空白が入っていることがあるかもしれません。
不必要な空白を削除してみましょう。ちなみに過去の事例では WordPress の公式テーマ Baskerville で発生したことがありました。
PHP Warning: Cannot modify header information – headers already sent by (output
started at /home/wp-content/themes/ThemeName/functions.php:1) in /home/wp-login.php on line XXX
事例5:wp-config.php の文字コードセットを確認する
wp-config.php をよく読めば書いてあるのですが、UTF-8 の BOM なし (UTF-8N) で保存しないといけないようです。 レンタルサーバーが用意してくれているエディターでは文字コードが分かりにくいことがあります。そのため、FTPで wp-config.php をダウンロードしてメモ帳以外のエディタ(秀丸やさくらエディタ)などで文字コードセットを確認しましょう。 もちろん、なっていないようでしたら、UTF-8 の BOM なし (UTF-8N)にしましょう。UTF-8 の BOM なし (UTF-8N)とは?
まず、「UTF-8」は国際的に認められた正式の文字コード形式です。HTMLのキャラクターセット(文字コード)を指定するときも「UTF-8」を使います。 次に BOM なし(8N)の説明です。BOMは、Byte Order Mark(バイトオーダーマーク)の省略した形で、コンピュータに知らせるためにファイルの先頭に付ける、人間の目には見えないデータです。 バイナリエディタと呼ばれる特殊なソフトで覗かないと分からないのですね。そして、現在ではUTF-8はBOMを付けないで保存するのが一般的になりました。 むしろ、今回の事例のようにBOMが付いているとかえって問題が起こる場合があるらです。UTF-8 の BOM なし (UTF-8N)にしましょうね。 ちなみに以前のソフトウエアの中には、BOMが付いていないと文字コードの判別に失敗して文字がバケバケになるものがありました。でも、今はそういう心配はほぼありえなくなりました。時代は進歩していきますね^^wp-config.phpからの抜粋
// 注意:
// Windows の “メモ帳” でこのファイルを編集しないでください !
// 問題なく使えるテキストエディタ
// (http://wpdocs.sourceforge.jp/Codex:%E8%AB%87%E8%A9%B1%E5%AE%A4 参照)
// を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。
以下の通り、いろんな種類のエディタでの確認方法をご案内しますのでお好きなエディタを利用して文字コードセットが UTF-8N になっているかを確認してみましょうね。もちろん、どのエディタも無料ですよ。
サクラエディタの文字コードセットの確認箇所
サクラエディタをお持ちでない方は以下よりダウンロードしてください。 サクラエディタで該当ファイルを開くと右下のステータスバーに表示されます。Sublime Textの文字コードセットの確認箇所
Sublime Textをお持ちでない方は以下よりダウンロードしてください。 Sublime Textでの文字コードセットは他と違ってちょっと難し目です。 1.文字コードを設定します。 インストールしたら、 [Preferences] > [Settings] をクリックします。
“show_encoding”: true
3.設定ファイルを保存します。
TeraPadの文字コードセットの確認箇所
TeraPadをお持ちでない方は以下よりダウンロードしてください。 TeraPadで該当ファイルを開くと右下のステータスバーに表示されます。秀丸エディタの文字コードセットの確認箇所
秀丸エディタをお持ちでない方は以下よりダウンロードしてください。 秀丸エディタで該当ファイルを開くと右下のステータスバーに表示されます。K2Editorの文字コードセットの確認箇所
K2Editorをお持ちでない方は以下よりダウンロードしてください。 K2Editorで該当ファイルを開くと右下のステータスバーに表示されます。事例7:外部から書き換えられてしまった
私も過去にやられてしまったことがありますが、ある程度アクセス数のあるWordPressを運用していると外部から書き換えられてしまうことがあります。 いわゆるハッキングと言うやつですね。私の場合は、ヘッダー画像を書き換えられました。こんなにセキュリティが甘いとハッキングされちゃうぞ、というようなことが書いてある英語の画像に変えられてしまいました。 当時はハッキングへ対抗できる知識もありませんでしたからブルブルと震えてしまいましたね。そういう場合は、私へ一度ご相談いただいたほうがよいと思います。 そのときに最適な手段を一緒に考えましょう。 …ということで悪意のある攻撃を受けたら自分で対応せずにご連絡ください。3.設定を元へ戻す
修正が完了したら、wp-config.php のデバッグモードを元に戻します。
※変更前
define(‘WP_DEBUG’, true);
if (WP_DEBUG) {
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
@ini_set(‘display_errors’,0);
}
※変更後
define(‘WP_DEBUG’, false);
最近の人気記事
もし、宜しければこちらもご覧下さい。あなたのお役に立てるかもしれませんので。最後に
【エラー: 予期しない出力により cookies がブロックされました】の対処法をご紹介してきましたが、いかがでしたでしょうか?もしかしたら、ここまでご紹介した事象以外のケースもあるかもしれませんし、私がうまく説明できていないかもしれません。 その時は、問題を解決するように設定を代行させていただきます。(有料:3000円【税込】)また、このほかにも上位表示対策の方法などを個人指導しています。詳細は以下よりご覧くださいませ。各種サービスの料金はこちらからご覧ください
お問い合わせはこちらからどうぞ!
- Tags
- ノウハウ