2017.08.09 2017.08.09

【解決】PHPバージョン変更後にWordPress画面が真っ白になり表示されなくなった!

LINEで送る
Pocket

この記事を書いた人
しんまい君

しんまい君 元ネットワークエンジニア。WordPressのカスタマイズを主に担当。
難しそうな顔をするのが得意。福島県南相馬市出身。好きなものは柴犬。

PHPのバージョンを5系から7系に変更したらWordPressのホームページが真っ白になり、なにも表示されなくなった!」そんな場合のトラブルシューティングです。

今回は当社で担当した実例をご紹介します。

PHPを7にアップグレードしたら、「通常のページが真っ白、管理画面にはログインできる」といったトラブルを抱えたお客様サイトについての解決アプローチ、PHPのバージョン変更前の事前確認方法を便利なプラグインを使って解説します。

 

障害のあったワードプレス環境

  • WordPress:4.5.4(トラブルのあった時点の最新バージョンは4.7.5)
  • PHP:5系
  • テーマ:外注した自作テーマ
  • プラグイン:多数利用

サイトを運用しているレンタルサーバー会社がPHPを7に変更した直後より事象が発生。レンタルサーバー会社の都合によりPHPのバージョンを以前のバージョンに戻すことが出来ない。WordPressダッシュボードにログインし、ダッシュボード上で投稿の追加、テーマの切り替え、プラグインの追加、停止などの作業は行える。ただし通常のページが表示されない。

 

障害の切り分け

今回のお客様は当社でサポートを行っているお客様ではない為、事前に情報いただいた内容についても確認作業から行う必要があります。

PHPバージョンアップ前は正常にサイトは表示されていた

これも確認の必要があります。検証サーバーにワードプレスサイトをインストール、アップグレード前のPHPバージョンにて確認です。本番サイトのテーマ、プラグインをコピーしたものを設定しサイトが表示されるか確認しました。

検証環境で以前のPHPを有効にしている場合はサイトが表示されました。

同じ検証環境でPHPのバージョンを、トラブルの発生した7系にアップロードしたところサイトが表示されなくなりました。事象の再現が可能であり原因はやはりPHPでした。

PHPを以前のバージョンに戻すことで改善できるのですが、お客様のレンタルサーバー会社はPHPのバージョンダウンには対応しておらずPHP7系での運用が大前提。不具合の特定が必要です。

 

不具合の原因がテーマなのかプラグインなのかを切り分ける

テーマや多数有効化しているプラグインがPHP7非対応の可能性があります。

まずはPHPを7に戻し、不具合が発生している状態にします。その後有効化しているプラグインを一つ一つ停止していきます。停止しながらサイトが表示されていくかを確認します。もし停止したタイミングでサイトが表示されるのであれば、そのプラグインが原因だと考えられます。そのプラグインがどのようなものかによりますが該当プラグインを停止して運用(同等の役割のプラグインを導入)するか、プラグインのプログラムコードをPHP7に書き換える上級者向け解決方法もあります。

今回のお客様の場合は、全てのプラグインを停止しても事象が改善されませんでした。この場合、外注したテーマに問題があると考えられます。全てのプラグインを再び有効化した後、テーマをデフォルトに切り替えるとサイトが表示されるようになりました。つまり「テーマ」のどこかしらかにPHP7非対応のコードが含まれているということです。

 

テーマ上からPHP7非対応のコードを特定するプラグイン「PHP Compatibility Checker」

問題がテーマであっても、デザインも含めオーダーメイドしたものであれば簡単に他のテーマに切り替えて運用を再開することができない場合があります。今回のお客様も現在のテーマをそのまま使いたいとの希望の為、テーマ上の問題を特定し改善をする方法をとりました。

テーマ上のPHP7非対応コードを特定するのは簡単です。無料プラグイン「PHP Compatibility Checker」を使うことで、初心者でも特定可能です。

checker

 

プラグインはWordPresss公式プラグインディレクトリーに公開されています。PHP Compatibility Checkerをインストール後、対象のPHPバージョンを指定しスキャンすることで非対応のコード一覧が表示されます。

PHP Compatibility

 

ちなみにこのプラグインのスキャン対象は、テーマだけでなくプラグインも含みます。同様の事象が発生している場合で問題がプラグインであれば、非対応のコードを特定できます。

 

今回のスキャンで、テーマに非推奨コードが複数含まれていることが分かりました。

「非推奨」ってなんだ?

ワードプレスには固有のコード(関数)が用意されています。
それらはテンプレートタグという名称です。「このコードを書くと、こういった動作をするようになっています」というものです。

テンプレートタグは、特定のバージョンで動作しますが、バージョンが切り替わると動作しないものがあります。ワードプレスは動作しなくなるものを非推奨タグと呼んでいます。

現在のバージョンでは推奨されていない関数(テンプレートタグ)のページです。

以下の関数は、推奨されなくなりました。新しい関数に置き換えられているか、サポートされなくなり、将来のバージョンから削除されることを意味します。
以下の関数を使用するコードが1つでも存在する場合、代替に変換する必要があります。

引用:WordPress公式サイト

 

一般的にワードプレスのバージョンアップとともに、非推奨テンプレートタグが動作しなくなります。不思議なことに、非推奨であっても動作するテンプレートタグもあるのです。

またこれとは別に、ワードプレスのバージョンを維持したままPHPのバージョンを変更すると動作しなくなるテンプレートタグがあります。

 

非推奨コードが原因かを切り分ける

PHP Compatibility Checkerプラグインを使い非推奨コードを見つけたら、そのコードが原因となっているかを切り分けます。方法はそのコードを削除するというシンプルなものです。この方法を行う前に必ずバックアップを取得しましょう。コードは修正するのではなく、あくまで削除で十分です。重要な機能のコードかもしれませんが、サイトが表示されるかどうかの切り分けを行いましょう。コードを削除してもサイトが表示されない場合は再度スキャンを行い、問題のコードを確認します。この繰り返しで問題の原因となっているコードを特定します。

コードを特定できたら非推奨コードを、推奨コードに書き換える作業です。

 

非推奨コードを後継に切り替える

WordPress Codexには、非推奨コードと後継コードが掲載されています。

例えば「the category ID」ページには、このテンプレートタグは非推奨であることを掲載しています。このテンプレートタグの後継は「get_the_category 」であることと、記述方法が記載されています。

これらを参考に、非推奨を後継に切り替えることで問題が解決できます。実際に、お客様サイトでは非推奨タグを後継に切り替えることでサイトが表示され問題が解決できました。

 

PHPの切り替え作業前に不具合が起きるか確認する

PHPのアップグレード作業を行うと、サイトに障害が発生する可能性があります。今回紹介したPHP Compatibility Checkerツール等を使い、事前検証をすることで障害を未然に防ぐことができます。

サイト運営上のポリシーでチェッカープラグインを使えない場合は、本番環境に影響がない検証サイトを用意し、検証サイト上でPHPのバージョンアップのテストを行うテストを行いましょう。

PHPアップグレード前にはバックアップの取得、いざという時にPHPのバージョンを戻せる準備をお忘れなく。

 



LINEで送る
Pocket



この記事の関連記事