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は 何年も更新がされていないので、いずれ修正されるというような期待はできないでしょうね。
ですから、今後、これ以外にもエラーがいつか出てくるかもしれません。今回の方法はとりあえずの対処法ということになります。
他のプラグインを探して利用した方がいいのでしょうけど、コードを貼り付け直す必要があるものだと、ちょっと大変なんですよね。
まあ、更新されていないプラグインですから、仕方ないことですけども。