[スポンサーリンク]
PHPバージョンアップ後CrayonSyntaxHighlighterでエラーが発生
PHPバージョンアップした際に、WordPressでエラーが発生しました
PHPのバージョンアップ
WordPressのテーマの更新作業の後、そういえばPHPのバージョンアップしていないことに気付きました
本ブログはエックスサーバーで構築しています
エックスサーバーではサーバーの管理画面からPHPのバージョンアップを行います
「PHP Ver.切替」を押下し、対象ドメインを選択して変更します
現在PHP7.2.34を使用しているのですが、現在の推奨7.4.13を選択し「変更」を押下し更新します
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in 発生
PHPをバージョンアップしたところ、特定のページで下記のようなワーニングが発生しました
XXXXX(サブドメイン名)
1 |
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/*****/*****.com/public_html/XXXXX/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 |
コンパイルに失敗
オフセットの文字クラスの範囲が無効
という警告が出ています
エラーが発生する原因
Crayon Syntax Highlighterは有名なプラグインなので調べるとすぐに理由が分かりました
下記のサイトを参照しましたが、PHP7.3以上には対応していないことが理由の様です
PHPの7.3へのバージョンアップ時に、PCRE(Perl Compatible Regular Expressions)がPCRE2になっています
そしてPCRE2で文字クラスのメタ文字が変わっているようです
PCRE2では文字列クラス([]囲み)内の「-」は範囲(range)を表すメタ文字になっています
従って文字列クラス内で「-」を記号として扱う場合は、エスケープする必要がある様です
・PCRE
・PCRE2
[スポンサーリンク]
対応方法
調べてみたところ対応方法は大きく3つのようです
ベストは対応方法③ですが、今回時間の関係上対応方法②で対応をしました
対応方法① crayon_langs.class.phpを修正
冒頭で参考にさせて戴いたサイトに記載されるいる通り、crayon_langs.class.phpを修正する方法です
430行目に記載されている正規表現の構文を修正します
私の環境では、下記を行うだけでエラーとなっていた箇所は解消しました
ですが、対応方法②の方が有志で検証している物なので信頼性が高そうです
1 2 3 4 5 |
// Override function clean_id($id) { $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) ); return preg_replace('/[^\w-+#]/msi', '', $id); } |
修正後
1 |
return preg_replace('/[^\w\-+#]/msi', '', $id); |
対応方法② 有志で改修されたCrayonSyntaxHighlighterをインストール
対応方法の二つ目として、下記サイトで紹介されているように、有志が改修を行っているCrayonSyntaxHighlighterをインストールする方法があります
こちらも私の環境では問題なく動作しました
下記のGitHubよりPHP7.3に対応しているCrayonSyntaxHighlighterのZipファイルをダウンロードします
WordPressのプラグインの追加画面から、ダウンロードしたZipファイルをアップロードします
古いバージョンのCrayonSyntaxHighlighterを無効化し、新しいCrayonSyntaxHighlighterを有効化します
これでPHP7.3以上(動作確認は7.4)でも正常に動作しました
尚、動作確認をした後は、古いバージョンは削除しました
対応方法③ CrayonSyntaxHighlighter以外のプラグインに変更する
CrayonSyntaxHighlighter以外のプラグインを使い、CrayonSyntaxHighlighterは使用をやめます
CrayonSyntaxHighlighterは5年も前から公式の更新が止まっているので仕方ありませんね
現在更新が継続されている同様のプラグインに切り替えがベストですね
いつか切り替えを検討しなくては・・・
[スポンサーリンク]
コメント