PHP

WordPressでソースコード掲載(Syntax Highlighter)がエラーになる原因

今まで正常に表示されていたページが、急に以下のようにエラーが表示されるようになっていたことはないでしょうか?

「サイトに重大なエラーが発生しました」

って何事だろうって焦りますよね・・・。

サイトに重大なエラーが発生しました

原因を探っていたところ、以下が怪しいことがわかりました。

・SQL の UPDATE 文を書いていたページ
・PHP7.2 から 7.3 にバージョンアップした

今回はこの原因を究明して解決しましたので紹介します。

エラーが発生するパターン

冒頭でも書いた通り、最初は更新系の SQL(UPDATE, DELETE)を書いているページでのみ発生しているのかと思っていました。

しかし、どうやら SELECT 句を書いているページでも同様のエラーが発生しています。

さらに調べていくと、SQL に関係なく、他のプログラムコードやコマンドを掲載しているページでも・・・。

これは明らかにソースコードのタグが悪さをしています。
(単なる pre タグなんですけどね)

そこで、ソースコード表示に利用しているプラグインを調べてみました。

Crayon Syntax Highlighter(2.8.4)

読み込まれている JS(JavaScript)は「crayon.min.js?ver=_2.7.2_beta」です。

プラグインの状態

プラグインの詳細情報を見てみると、どうやら 4 年近く更新がなく、現在のワードプレスのバージョン(5.x系)で動作確認(テスト)がされていません。

Crayon Syntax Highlighter

しかし、最近この現象が発生するようになったことを考えると、PHP7.3 にしたことも関係がありそうです。

例えば、推奨されなくなっていた関数が完全に利用できなくなったとか、ありがちなパターンです。

原因と対策

そこまでのヒントを手掛かりに調べていたら、以下のサイトがヒットしました。

まさに、今回の現象にピッタリです。

先日、WordPressの動いているPHPを7.3にバージョンアップしたんですよ。そしたらですね、ソースコードを書いている記事のページで本文が表示されなくなったんですね。よくよく調べてみるとエラーログに次のような内容のエラーが出てました。

PHP7.3で動かないCrayon Syntax Highlighterを動くようにする

やはり、PHP7.3 にしたことと関係があるようですね。

解決策としては、「Crayon Syntax Highlighter」の最新バージョンをソースコードで取得してきてプラグインのバージョンアップを行うことです。

参考サイトでは既存のディレクトリに上書きコピーしていますが、私は既存のディレクトリ名を「crayon-syntax-highlighter-bk」に変更して、新しいバージョンのソースコードを「crayon-syntax-highlighter」というディレクトリにしました。

crayon-syntax-highlighter => crayon-syntax-highlighter-bk
crayon-syntax-highlighter-2.8.6 => crayon-syntax-highlighter

プラグインのページから zip ファイルをアップロードした方が早かったかもしれませんが・・・。

Crayon Syntax Highlighter

バージョンも 2.8.4 から 2.8.6 になりましたね。これで無事解決です。

まとめ

結果的に、以下の条件が重なり WordPress でエラーが発生していました。

・PHP7.3
・Crayon Syntax Highlighterのプラグイン

問題が発生した時には、最近何かを変更したかを思い出して、そこから探っていくのが近道ですね。

WordPress も自動アップデートを有効にしているので、本体側に影響があった場合には原因の究明に苦労しそうです。

今回は、先に同じ状況に遭遇している方が情報発信してくれていたので助かりました。