XserverでPHP7.3.14にしたらCrayon Syntax Highlighterがエラーになった




 

XserverのPHPの推奨バージョンがPHP7.3.14になったという通知メールが来てたので、サーバーパネルからPHPバージョン切替を行った。

すると

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 …

というエラーがサイトに表示されまくっていました。

数時間気付かず…

こういうものはきちんと確認しておきたいですね。

慌てて、PHPのバージョンを元に戻して対策を考えます。

エラーの原因はプラグインのCrayon Syntax Highlighter

他のいくつか管理しているドメインのサイトは問題なくPHPのバージョンを切替られてました。同じWordPressテーマを使っているようなサイトでも、エラーになるものとならないものがあったので、これはテーマは無関係。

もう一度、エラーをよく見てみます。

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/(…)/(ドメイン名)/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

どうやら、コードの表示に使っているプラグインのCrayon Syntax Highlighterがエラーの原因のようです。

エラー対処法

エラーを見ると、crayon_langs.class.php の340行目が、どうやら原因のようです。

ネットを調べてみると、PHPのpreg_match()関数を使った正規表現が、PHP7.2系からPHP7.3系で変わっているということがこちらの記事にありました。

【PHP】preg_match()関数を用いた正規表現のマッチングの挙動が7.2系から7.3系で変わってる(PCREのバージョン変更)

crayon_langs.class.php の340行目をWordPressのダッシュボートからプラグインエディターを使って覗いてみます。

次のようになっています。

return preg_replace('/[^\w-+#]/msi', '', $id);

これの正規表現部分を、先ほどの記事を参考にして、次のように変更してみます。

return preg_replace('/[^\w+#-]/msi', '', $id);

微妙な違いですが、w-+# の部分を w+#- に変えています。

これでプラグインエディターを保存して、PHPのバージョンを切替たら、エラーは表示されなくなりました。

最後に

Crayon Syntax Highlighterは 何年も更新がされていないので、いずれ修正されるというような期待はできないでしょうね。

ですから、今後、これ以外にもエラーがいつか出てくるかもしれません。今回の方法はとりあえずの対処法ということになります。

他のプラグインを探して利用した方がいいのでしょうけど、コードを貼り付け直す必要があるものだと、ちょっと大変なんですよね。

まあ、更新されていないプラグインですから、仕方ないことですけども。