サーバーのPHPをPHP7.2からPHP7.3にバージョンアップし、その後にブログの動作確認をしていたら、一部のページが「サイトに重大なエラーがありました。」と表示されて完全にバグっている。
インストール済みのテーマやプラグインなどの互換性をチェックするために、あらかじめ「PHP Compatibility Checker」というプラグインを利用してPHP7.3への互換性をチェックしたはずなのだが、見事に重大なエラーが発生。
というわけで対策します。
※「PHP Compatibility Checker」の使い方は以下の記事を参考にしてください。
WordPressのデバッグモードでエラー原因を特定
デバッグモードをON
まず、エラーの原因を特定するためにWordPressのデバッグモードをONにします。
wp-config.phpを編集します。
1 2 3 4 5 6 7 8 9 10 11 |
/** * 開発者へ: WordPress デバッグモード * * この値を true にすると、開発中に注意 (notice) を表示します。 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。 * * その他のデバッグに利用できる定数については Codex をご覧ください。 * * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0 */ define('WP_DEBUG', false); |
デバッグモードはデフォルトではOFFになっているので、上記の
define('WP_DEBUG', false);
を
define('WP_DEBUG', true);
に変更してデバッグモードをONにします。
エラーの原因は「Crayon Syntax Highlighter」
再度、エラーの出ていたページをリロードしたところ、以下のようなエラーがズラっと表示されました。
1 2 3 4 5 |
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340 Notice: Undefined offset: 0 in /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 532 Fatal error: Uncaught Error: Call to a member function id() on array in /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php:36 Stack trace: #0 /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(538): CrayonFormatter::format_code('', Array, Object(CrayonHighlighter)) #1 [internal function]: CrayonFormatter::delim_to_internal(Array) #2 /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(516): preg_replace_callback('#()#msi', 'CrayonFormatter...', '# yum -y instal...') #3 /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(166): CrayonFormatter::format_mixed_code('# yum -y instal...', Object(CrayonLang), Object(CrayonHighlighter)) #4 /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(186): CrayonHighlighter->process() #5 /home/onorede in /■■■/■■■■■■/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 36 |
原因は、しばらく前に既に更新が止まっている「Crayon Syntax Highlighter」プラグインですね。
原因がわかればあとは対処するだけです。
【対策方法その①】 Urvanov Syntax Highlighterに変更
Crayon Syntax Highlighterは随分と前から既に更新が止まっていますが、その後、同じ作者が「Urvanov Syntax Highlighter」という新しいプラグインを公開しています。
【Urvanov Syntax Highlighter – WordPress プラグイン | WordPress.org 日本語】
https://ja.wordpress.org/plugins/urvanov-syntax-highlighter/
この「Urvanov Syntax Highlighter」は、Crayon Syntax Highlighterと操作方法もほぼ同じで、以前にCrayon Syntax Highlighterを使って作成したページも、何の変更も無しにそのまま設定を引き継いで従来と同じように表示してくれます。
プラグインの変更方法は、まずWordPressメニューの「プラグイン」からCrayon Syntax Highlighterを削除し、次にUrvanov Syntax Highlighterをインストールして有効化するだけです。
手順も簡単なのでこの対策方法をおすすめします。
【対策方法その②】 Crayon Syntax Highlighterのエラーを修正
どうしても今後もCrayon Syntax Highlighterを使い続けたいという場合は、Crayon Syntax Highlighterのエラーが発生している箇所を修正して対策します。
手動でのエラー修正方法【プランA】
crayon_langs.class.php の修正
crayon_langs.class.phpの340行目付近を修正します。
修正前
1 |
return preg_replace('/[^\w-+#]/msi', '', $id); |
修正後
1 |
return preg_replace('/[^\w\-+#]/msi', '', $id); |
crayon_formatter.class.php の修正
crayon_formatter.class.phpの118行目付近を修正します。
修正前
1 2 |
$toolbar_height = $font_size * 1.5 . 'px !important;'; $info_height = $font_size * 1.4 . 'px !important;'; |
修正後
1 2 3 |
$crunchify_height = 1.5; $toolbar_height = $_font_size * $crunchify_height . 'px !important;'; $info_height = $_font_size * $crunchify_height . 'px !important;'; |
crayon_settings.class.php の修正(2つあります。)
【1つ目】
crayon_settings.class.phpの88行目付近を修正します。
修正前
1 |
const SHOW_MIXED = 'show_mixed'; |
修正後
1 |
const SHOW_MIXED = 'show-mixed'; |
【2つ目】
crayon_settings.class.phpの229行目付近を修正します。
修正前
1 |
new CrayonSetting(self::SHOW_MIXED, TRUE), |
修正後
1 |
new CrayonSetting(self::SHOW_MIXED, FALSE), |
これで完了です。
最新版プラグインのアップロードによる修正方法【プランB】
有志によるcrayon-syntax-highlighterの最新版をGitHubからダウンロードして、プラグイン画面からアップロード⇒インストールでも対応できます。
■crayon-syntax-highlighter(GitHub)
https://github.com/Crunchify/crayon-syntax-highlighter/releases
【手順】
- 上記のURLからzipファイルをダウンロード
- 既存の「Crayon Syntax Highlighter」プラグインを削除
- 「プラグイン」⇒「新規追加」⇒「プラグインのアップロード」にてzipファイルをアップロードしてインストール
動作確認
最後にWordPressおよびWebサイトの動作確認を行いましょう。
エラーが消えて問題が無ければ、wp-config.phpを開き、
define('WP_DEBUG', true);
から
define('WP_DEBUG', false);
に変更してWordPressのデバッグモードをOFFに戻します。
これにて「Crayon Syntax Highlighter」による「サイトに重大なエラー」への対策が完了です。
以上で解決です。