海原

 

ワードプレスのWarningメッセージ『Warning: Cannot modify header information – headers already sent by』は、対処法をネット検索するとたくさんヒットします。

 

ほとんどのサイトで「functions.phpの1行目の空白行を削除してください」という解決法が記載されているのですが、functions.phpを確認しても「1行目に空白行なんか無い」という事で全く参考になりませんでした。

 

このワーニングが出る要因はいろいろあるのですが、

私の場合は、PHPのバージョンを5から7に上げた際に出ました。

 

Warning: Cannot modify header information - headers already sent by

 


 

 

エラーメッセージに書かれている「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 Compatibility Checker


 

 

設定画面が開きます。

この画面で、インストールしているプラグインやテーマが、PHPのバージョンに対応しているのかどうかをチェックできます。

 

①私の場合はPHP7.0にバージョンアップさせたいので、PHP7.0にチェック

②アクティブになっているプラグインやテーマだけを調べたいので、「Only scan active plugins and themes」にチェック

「Scan site」ボタンを押します

 

 

PHP Compatibility Checker


 

 

しばらく待つと、下の方に結果が表示されます。

 

PHP Compatibility Checker

 


 

 

緑色で「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


 

「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が消えたのかは説明しづらいですが、為す術が無い方は一度試してみる価値はあります。


スポンサーリンク