PHPをバージョンアップしたら500エラーが出る
WordPressで公開しているサイトのレンタルサーバーのPHPを7.系にするとエラーになりました。現時点でレンタルサーバーはMixhostを使っており、コントロールパネルでPHP5.6からPHP7.0→7.1→7.2→7.3と順に設定を変えてみました。バージョン7系はどれもWordpressの公開ページにアクセスすると以下のような画面になってしまいました。
サイトに重大なエラーがありました。詳細については、サイトの管理者のメール受信ボックスを確認してください。
WordPressでのデバッグをさらに詳しく見る。
PHP7系のバージョンによっては以下のエラーページが表示されました。
サイトに重大なエラーがありました。
WordPressでのデバッグをさらに詳しく見る。
放置していたこの問題を本気で対処することに
以前からこの問題はあったのですが面倒くさくて原因を探らず、ずっとPHP5.6のまま使っていました。WordPressのバージョンアップとかで『そのうち自然に解消するだろう』と思っていましたが、まったく解消の気配がなく、WordPressのダッシュボードにも『PHPの更新が必要です』と注意表示が出ていたので、『そろそろ本腰入れて対処するか』と解決方法を探ることにしました。
プラグイン『PHP Compatibility Checker』で互換性を調べてみる
テーマがPHP7に対応していないのかな?とインストール済みのプラグインとテーマのPHPの互換性を調べてくれるプラグイン『PHP Compatibility Checker』で、スキャンしてみました。すると現在使用している『Basic』というテーマで以下の警告が出ました。
21 | WARNING | Function create_function() is deprecated since PHP 7.2; Use an anonymous function instead
21 | 警告| 関数create_function()はPHP 7.2以降廃止されました。 代わりに匿名関数を使用してください
テーマを更新してして、PHP7.0→7.1→7.2→7.3と各バージョンを試しましたが、結局状況は変わりませんでした。テーマ以外に別に問題があるのかな?と今度はプラグインを疑いました。
エラーの原因はプラグイン『Exec-PHP』だった
以下のメールがサーバーから届いていました。
WordPress 5.2から、サイトでプラグインやテーマが致命的なエラーを発生させた場合にそれを検知してこの自動メールでお知らせする機能が追加されました。
今回の場合、WordPress がプラグイン Exec-PHP でエラーを捉えました。
まずはじめに、ご自分のサイト (https://sample.com) を開き、目に見える問題がないか確認してください。次に、エラーが発生したページ (https://sample.com/wp/wp-admin/index.php) を開き、同様に問題がないか確認してください。
この問題をさらに調査するにはサーバーホストに連絡してみてください。
もしサイトが壊れていてダッシュボードに正常に接続できない場合、WordPress には特別な『リカバリーモード』があります。これによりダッシュボードに安全にログインし、さらに調査をすることができます。
https://sample.com/wp/wp-login.php?action=enter_recovery_mode&rm_token=L**M0yRRK1L*yzS5*Qj*Gw&rm_key=iwaXrgB*RNDhO**tnm*Iwi
サイトを安全に保つため、このリンクは 1日 で有効期限が切れます。ですが、心配なく。有効期限後にこのエラーが再度発生すれば新しいリンクをお送りします。
この問題を解決しようとする際、以下の情報を聞かれるかもしれません。
WordPress バーション5.3.2
現在のテーマ: Basic (バージョン 1.3.10)
現在のプラグイン: Exec-PHP (バージョン 4.9)
PHP バージョン7.3.11
エラー詳細
===============
エラータイプ E_PARSE が /home/abcdefg/public_html/sample.com/wp/wp-content/plugins/exec-php/exec-php.php ファイルの 22 行目で発生しました。 エラーメッセージ: syntax error, unexpected 'new' (T_NEW)
WordPressのテーマや記事内でPHPのコードを使用できるようにするプラグイン『Exec-PHP』がPHP7系に対応していませんでした。これに関する検索をしてみたら、プラグインが『PHP7に対応していない』とか『危険』『セキュリティ上問題あり』とかのページがぼろぼろ出てきました。