PHP 7.3 に変更したら Crayon Syntax Highlighter プラグインからエラーログが出力された場合の対応
久々に WPF Prism 以外のエントリです。
この所季節の変わり目で体調を崩していて記事の更新ができていませんが、今日発生したサイトのトラブルの対応を短い記事として紹介します。
季節の変わり目の体調不良は毎年 2 回ある恒例行事なのでいつものことですが、もう少しすれば復調して記事も書けるようになると思います。
このサイトはさくらのレンタルサーバー を使用していて、2019/7/3 に PHP が Ver.7.3 にバージョンアップされました。
PHP のバージョンアップはさくらインターネット が行ってくれるので管理人自身は何もしていませんが、帰宅してこのサイトを開くと血の気が引きました。
このサイトのどのページを開いても何やらエラーメッセージのようなものが大量に表示されていて、記事の内容も途中までしか表示されていなかったので最初はかなり焦りました。
出力されていたのは log. 1 のようなエラーメッセージでどのページにも 300 行程度出力されていました。
1 2 3 4 5 | Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 |
落ち着いてエラーメッセージを読むと見て分かる通り、Crayon Syntax Highlighter が出力しているエラーのようなのでとりあえずプラグインを停止して回避しました。
Crayon Syntax Highlighter プラグインを停止するとログも出力されなくなり、各エントリも見れるようになったので原因は間違いなく Crayon Syntax Highlighter プラグインだと断定しました。
Crayon Syntax Highlighter
ご存じの通り Crayon Syntax Highlighter は非常に高機能なソースハイライタープラグインなので未だに使用しているサイトも多いと思いますが、2016/4 リリースの Ver.2.8.3 を最後に開発を終了しています。
既に開発終了しているプラグインなので別のプラグインに変えれば良いんですが、Crayon Syntax Highlighter しか対応していない機能もあり又、公開済みエントリの修正も必要になるので「問題が出ないなら良いか…」と使い続けてきましたが問題が出てきてしまったので対応せざるを得なくなりました。
Crayon Syntax Highlighter の後継
Google で『crayon syntax highlighter Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4』のようなキーワードで検索すると英語のサイトですが【Fix for Crayon Syntax Highlighter WordPress Plugin and PHP 7.3 Fatal Error – @Crunchify】で対応方法が紹介されていました。
このサイトでは PHP のバージョンを 7.3 に上げると Crayon Syntax Highlighter が Fatal Error になる問題に対応するソースコードの修正箇所を紹介しているだけでなく、対応したバージョン(2019/7 現在の最新:Ver.2.8.6)の配布 もしてくれているようです。
WordPress プラグインの手動更新
PHP 7.3 の仕様変更に対応した Crayon Syntax Highlighter は WordPress.org へ登録されないため、他のプラグインのように更新版がリリースされても当然通知も来ませんし、WordPress 自体のプラグインインストール機能も使用できません。
とは言え、管理人的には Crayon Syntax Highlighter を使い続けたかったので、@Crunchify で配布されているプラグインを手動で導入することにしました。
まず、Crayon Syntax Highlighter Ver.2.8.6 以降は 上で紹介した Crunchify GitHub の Releases ページ で最新版をダウンロードできます。
※ WordPress.org 未登録のプラグインを登録するため、以降で紹介した内容を実行する場合は自己責任でお願いします。
いかなる問題や損害が発生しても halation ghost 管理人は一切関知しません。
fig. 1 の赤枠で囲んだ部分をクリックしてダウンロードします。
ダウンロードした zip ファイルを展開すると【crayon-syntax-highlighter-2.n.n(2.n.n はダウンロードしたバージョン)】のようなフォルダができます。
※ 以降は Crayon Syntax Highlighter プラグインを停止した状態で行ってください。
後は、普段使用している FTP クライアント(FFFFTP、NextFTP 等何でも OK!)から Crayon Syntax Highlighter のインストールフォルダ(通常は {WordPress のインストールディレクトリ}/wp-content/plugins/crayon-syntax-highlighter)へ上書きアップロードするだけです。
アップロード後に Crayon Syntax Highlighter プラグインを有効にするとエラーログも出力されず、各エントリに挿入したソースコード部分も今まで通り表示されるようになりました。
最初はビルドやコンパイル等が必要なのかと思いましたが、よく考えれば PHP はスクリプト言語なのでビルド等は不要ですし、ソースコードを単純に上書きするだけで動くんですね…w
このサイトに適用した手順を紹介していますが、アップロードするソースコードの全内容確認や動作確認を行った訳ではないので使用には十分注意してください。