【WordPress】【プラグイン】PHPバージョンアップ後CrayonSyntaxHighlighterでエラーが発生する対策

[スポンサーリンク]


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(サブドメイン名)

コンパイルに失敗
オフセットの文字クラスの範囲が無効
という警告が出ています


エラーが発生する原因


Crayon Syntax Highlighterは有名なプラグインなので調べるとすぐに理由が分かりました
下記のサイトを参照しましたが、PHP7.3以上には対応していないことが理由の様です

【WordPress】Crayon Syntax Highlighterの致命的エラー修復について – エンジニアゲート
以前ソースコードをブログに綺麗に記載するプラグインとして「Crayon Syntax Highlighter」をご紹介しました。 しかしこの「Crayon Syntax Highlighte...

PHPの7.3へのバージョンアップ時に、PCRE(Perl Compatible Regular Expressions)がPCRE2になっています

PHP 7.3: PCRE to PCRE2 migration
PHP 7.3: PCRE to PCRE2 migration

そしてPCRE2で文字クラスのメタ文字が変わっているようです
PCRE2では文字列クラス([]囲み)内の「-」は範囲(range)を表すメタ文字になっています
従って文字列クラス内で「-」を記号として扱う場合は、エスケープする必要がある様です

・PCRE

perlre - Perl regular expressions - Perldoc Browser

・PCRE2

pcre2syntax specification

[スポンサーリンク]


対応方法


調べてみたところ対応方法は大きく3つのようです
ベストは対応方法③ですが、今回時間の関係上対応方法②で対応をしました


対応方法① crayon_langs.class.phpを修正


冒頭で参考にさせて戴いたサイトに記載されるいる通り、crayon_langs.class.phpを修正する方法です
430行目に記載されている正規表現の構文を修正します
私の環境では、下記を行うだけでエラーとなっていた箇所は解消しました
ですが、対応方法②の方が有志で検証している物なので信頼性が高そうです

修正後


対応方法② 有志で改修されたCrayonSyntaxHighlighterをインストール


対応方法の二つ目として、下記サイトで紹介されているように、有志が改修を行っているCrayonSyntaxHighlighterをインストールする方法があります
こちらも私の環境では問題なく動作しました

[WordPress] CrayonSyntaxHighlighterをPHP7.3以降で使う方法 | ぱそまき
「Crayon Syntax Highlighter」は有名なソースコードを表示するプラグインですが、更新が止まっていてPHP7.3以降だと例外が発生して動きません。 本来であれば...

下記のGitHubよりPHP7.3に対応しているCrayonSyntaxHighlighterのZipファイルをダウンロードします

Releases · Crunchify/crayon-syntax-highlighter
Trying to make crayon-syntax-highlighter work with PHP 7.3 (Added few bug fixes) - Crunchify/crayon-syntax-highlighter

WordPressのプラグインの追加画面から、ダウンロードしたZipファイルをアップロードします

古いバージョンのCrayonSyntaxHighlighterを無効化し、新しいCrayonSyntaxHighlighterを有効化します
これでPHP7.3以上(動作確認は7.4)でも正常に動作しました
尚、動作確認をした後は、古いバージョンは削除しました


対応方法③ CrayonSyntaxHighlighter以外のプラグインに変更する


CrayonSyntaxHighlighter以外のプラグインを使い、CrayonSyntaxHighlighterは使用をやめます
CrayonSyntaxHighlighterは5年も前から公式の更新が止まっているので仕方ありませんね
現在更新が継続されている同様のプラグインに切り替えがベストですね
いつか切り替えを検討しなくては・・・

[スポンサーリンク]

[スポンサーリンク]
▼オンラインで、初心者のプログラミングへの挑戦も、SE職のスキルアップも▼

コメント

タイトルとURLをコピーしました