ワードプレスのWarningメッセージ『Warning: Cannot modify header information – headers already sent by』は、対処法をネット検索するとたくさんヒットします。
ほとんどのサイトで「functions.phpの1行目の空白行を削除してください」という解決法が記載されているのですが、functions.phpを確認しても「1行目に空白行なんか無い」という事で全く参考になりませんでした。
このワーニングが出る要因はいろいろあるのですが、
私の場合は、PHPのバージョンを5から7に上げた際に出ました。
エラーメッセージに書かれている「functions.phpの2500行目」を確認しても、特に問題のあるコードはありませんし、1行目に空白行もありません。
そもそも元テーマのfunctions.phpはほとんど編集していないので、問題は子テーマのfunctions.phpで発生しているのでは?と思い、コードを確認してみたのですが特に問題のある箇所はありません。不要なプラグインを削除するなど、いろいろ試行錯誤した結果、最終的にWarningを解消することができました。
結論を先に言いますと、子テーマのfunctions.phpにある空白行を全て削除して、コードをぎっしり詰めた状態にしてサーバーにアップするとWarningは消えました。
この結果に至るまでには、いくつかの問題の切り分けが必要になります。
エラーが出現した原因を探す(プラグイン?、テーマのphpファイル?)
私の場合は、PHP5からPHP7にバージョンアップさせた際にこのWarningが発生しました。
ということは、プラグインの中にPHP7に対応していないコードが混ざっているのではないか?、そもそも使っているテーマがPHP7対応なのか?というところから疑っていく必要があります。
それらはプラグイン「PHP Compatibility Checker」で確認することができます。
ワードプレスに「PHP Compatibility Checker」をインストールして有効化してください。
「Start Scan」をクリックすると
設定画面が開きます。
この画面で、インストールしているプラグインやテーマが、PHPのバージョンに対応しているのかどうかをチェックできます。
①私の場合はPHP7.0にバージョンアップさせたいので、PHP7.0にチェック。
②アクティブになっているプラグインやテーマだけを調べたいので、「Only scan active plugins and themes」にチェック。
③「Scan site」ボタンを押します。
しばらく待つと、下の方に結果が表示されます。
緑色で「Compatible」と表示されているのがPHP7.0に対応しているプラグインとテーマ。
黄色で「Warning」と表示されているのがWarning。
灰色で「Unknown」と表示されているのが不明。
この結果を見ると、プラグイン「Easy FancyBox」でWarning、「Media Library Assistant」と「SNS Count Cache」でUnknownと表示されているので、この3個のプラグインが問題の可能性があります。
さらに一番下に「賢威7.0クール版」がCompatibleと表示されているので、テーマはPHP7.0に対応できており問題なしという事が分かります。
問題のありそうな3個のプラグイン「Easy FancyBox」「Media Library Assistant」「SNS Count Cache」の詳細を調べるには、
右端の「toggle details」をクリックします。
「toggle details」で詳細を確認してみると、
「Easy FancyBox」のWarningは今回のWarningとは別件で、「Media Library Assistant」と「SNS Count Cache」はコードが長すぎた為にスキャンがスキップされたとの事でした。
念のために、問題のありそうなこの3個のプラグインを停止してからPHP7を適用してみましたが、「Warning: Cannot modify header information – headers already sent by」のエラーは変わらず出現しました。
これらの事から、このWarningはプラグインとテーマが原因ではないと判断しました。
あやしいのは子テーマのfunctions.php
そもそも元テーマのfunctions.phpはほとんど編集していないので、エラーやWarningの原因とは考えにくい。自分勝手に追記しまくっている子テーマのfunctions.phpが原因である可能性が高いです。
ですが、1行目に空白行なんかありませんし、コードを調べても問題は見当たりません。
海外のサイトをググっていると、1行目の空白行に限らず、functions.phpの全ての空白行を消すとWarningが消えるとの記述があったので、なんとなくやってみました。
①念のために子テーマのfunctions.phpのバックアップを取っておく
②子テーマのfunctions.phpから全ての空白行を削除してサーバーにアップロード
③サーバー側でPHP7を適用
サイトを更新してみると、Warningは出なくなり、
問題なくPHP7.0を適用させる事ができました。
何故Warningが消えたのかは説明しづらいですが、為す術が無い方は一度試してみる価値はあります。
スポンサーリンク |
|
|
|