エラー: 予期しない出力により cookies がブロックされました。ヘルプが必要な場合はこちらのドキュメンテーションを読むか、サポートフォーラムをご利用ください。
というエラーメッセージがWordPressのログイン時に発生することがあります。以前、お客さんに聞かれて対処したものの細かく調べたりはしなかったので一度整理してみたいと思います。もちろん、そのときの対処方法も共有致します。ただ、原因はいろいろとありますので分からないときにはお電話やお問い合わせいただけると早急に対応を代行できるかもしれません。 また、どうしてもプログラム(PHP)を修正することになるので初心者の方やWordPressの操作に自身のない方にとってはWordPressの破壊行為に繋がるかもしれません。あらかじめ覚悟してから操作してくださいね。もちろん、バックアップを取得してから作業してくださいね。

090-1852-8189

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」にしましょう。

さくらのレンタルサーバーの場合

予期しない出力により cookies がブロックされました【さくらサーバーのphp.ini設定画面】

ロリポップのレンタルサーバーの場合

「サーバーの管理・設定」ー「PHP設定」から該当ドメインの php.ini の設定ボタンをクリックしてください。 予期しない出力により cookies がブロックされました【ロリポップのphp.ini設定画面】

Xサーバーの場合

「サーバーパネル」ー「php.ini」から該当ドメインを選択して「php.ini直接編集」を選択してください。 私の場合、output_buffering = 4096 となっていますが、これは標準値のはずです。 output_buffering = on でもどちらでも構わないはずです。 予期しない出力により cookies がブロックされました【エックスサーバーのphp.ini設定画面】

事例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 になっているかを確認してみましょうね。もちろん、どのエディタも無料ですよ。

サクラエディタの文字コードセットの確認箇所

サクラエディタをお持ちでない方は以下よりダウンロードしてください。

DownLoad

サクラエディタで該当ファイルを開くと右下のステータスバーに表示されます。 予期しない出力により cookies がブロックされました【さくらエディタの文字コードセットの確認箇所】

Sublime Textの文字コードセットの確認箇所

Sublime Textをお持ちでない方は以下よりダウンロードしてください。

DownLoad

Sublime Textでの文字コードセットは他と違ってちょっと難し目です。 1.文字コードを設定します。 インストールしたら、 [Preferences] > [Settings] をクリックします。 2.設定ファイルに以下を追加します。 ↓こんな感じになります。 ※設定内容
“show_encoding”: true
3.設定ファイルを保存します。 4.これでステータスバーに文字コードが表示されます。

TeraPadの文字コードセットの確認箇所

TeraPadをお持ちでない方は以下よりダウンロードしてください。

DownLoad

TeraPadで該当ファイルを開くと右下のステータスバーに表示されます。

秀丸エディタの文字コードセットの確認箇所

秀丸エディタをお持ちでない方は以下よりダウンロードしてください。

DownLoad

秀丸エディタで該当ファイルを開くと右下のステータスバーに表示されます。

K2Editorの文字コードセットの確認箇所

K2Editorをお持ちでない方は以下よりダウンロードしてください。

DownLoad

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円【税込】)それでは、あなたのご武運をお祈り申し上げております。

お問い合わせはこちらからどうぞ!


メールでのお問い合わせ

お名前 (必須)
メールアドレス (必須)
電話番号 (必須)
URL (必須)
お問い合わせ内容 (必須)

確認画面は表示されません。上記内容にて送信しますがよろしいですか? (必須)
はい


電話でのお問い合わせ

090-1852-8189

住所:埼玉県川口市江戸袋1-17-41
名称:アイデアマート
担当:茂田 道輝

アクセス(お越しの際は不在のときがあるので事前に必ずお電話ください。):