PHP7.3で動かないCrayon Syntax Highlighterを動くようにする

  • WordPressが動いているPHPのバージョンを7.3にした
  • Crayon Syntax HighlighterがPHP7.3未対応だったので、本文が表示されない
  • 有志が対応したバージョンを公開してくれているのでそれにアップデートしたら表示されるようになった

このサイトはページ内でのソースコードの見た目を良くするためのプラグイン、Crayon Syntax Highlighterを使ってます。
先日、WordPressの動いているPHPを7.3にバージョンアップしたんですよ。そしたらですね、ソースコードを書いている記事のページで本文が表示されなくなったんですね。
よくよく調べてみるとエラーログに次のような内容のエラーが出てました。

PHP Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340, referer: xxxx

PHP Fatal error: Uncaught Error: Call to a member function id() on array in /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php:36\nStack trace:\n#0 /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(538): CrayonFormatter::format_code(”, Array, Object(CrayonHighlighter))\n#1 [internal function]: CrayonFormatter::delim_to_internal(Array)\n#2 /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(516): preg_replace_callback(‘#()#msi’, ‘CrayonFormatter…’, ‘$ gem install d…’)\n#3 /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(166): CrayonFormatter::format_mixed_code(‘$ gem install d…’, Object(CrayonLang), Object(CrayonHighlighter))\n#4 /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(186): CrayonHighlighter->process()\n#5 /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_wp.class.php(703): CrayonHighlighter->output(true, false)\n#6 /var/w in /var/www/html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 36, referer: xxxxx

Warningはひとまずおいといて、 Fatal error が出ているじゃないですか。
どうやらCrayon Syntax Highlighterが影響しているようです。

Crayon Syntax Highlighterは3年前から更新が止まっています。

Syntax Highlighter supporting multiple languages, themes, fonts, highlighting from a URL, or post text.

なので、公式が対応してくれるのを待つのは難しく、他のプラグインにするにも手間がかかるため、自分で修正しようかと思った矢先に、有志の方が対応バージョンを公開してくれていました。

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

ここから Source code (zip) のリンクからダウンロードしたzipファイルを展開したら crayon-syntax-highlighter-2.8.6 というディレクトリがあるので、その中身をまるごと現在の wp-content/plugins/crayon-syntax-highlighter の中に上書きアップロードします。

そうするとPHP7.3でもエラーが出なくなり、ソースコードもきれいに表示されるようになりました。

Raspberry PiからRubyをつかってDropboxにアップロードしたいので、DropboxAPIをつかってスクリプトをつくってみた。

どこが問題だったかとかは次のページで詳しく書かれています。興味のあるかたは読んでみてください。
※英語ページです。

Be careful before upgrading to PHP 7.3 if you are using Crayon Syntax Highligher WordPress plugin. Your site will crash with fatal Uncaught Error. On

個人的には PHP7.3 から正規表現の拡張機能がPCRE2にアップデートされた影響かなって思ってます。