ログを取得するプラグインであるLogBookプラグインにて、PHPを8.1に更新すると管理画面にエラーが発生しました。
このエラーについて解説します。
目次
WordPress管理画面に2件のDeprecatedエラー
Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /path-to-wordpress/wp-includes/functions.php on line 7241
Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /path-to-wordpress/wp-includes/functions.php on line 2187
PHPを7.4から8.1に更新したところ、管理画面に上記2件のDeprecatedエラーが発生しました。Deprecatedのため、エラーを表示する設定にしていないと画面には表示されません。(エラーログには残る)
原因はプラグインのLogBook
WordPress本体は最新(6.4.3)だったため、プラグインの可能性を考えました。一旦全プラグインを無効化し、一つずつ確認していきます。すると見つかりました。ログを取得するLogBookプラグインが原因でした。
Logbook – WordPress プラグイン | WordPress.org 日本語
素晴らしいプラグインですが、最終更新は6年前となっており、開発は停止している可能性が高いです。よって、今後のメンテナンスは望めそうに有りません。
このプラグインは WordPress の最新3回のメジャーリリースに対してテストされていません。もうメンテナンスやサポートがされていないかもしれず、最新バージョンの WordPress で使用した場合は互換性の問題が発生する可能性があります。
よって、エラーを表示している場合はプラグインの該当箇所を修正するか、理解した上で使っていく必要がありそうです。
Passing null to parameterはそもそもどんなエラーなのか
2つのエラーメッセージの共通として「Passing null to parameter」と書かれています。これは関数(今回でいうとstrpos()関数とstr_replace()関数)にnullを渡しているために発生しているエラーです。
PHP 8.1から、関数の引数に型が指定されている場合、その型に合わない値(この場合はnull)を渡すと非推奨(deprecated)の警告が表示されるようになりました。(参考)
strpos()の第1パラメータ$haystackは文字列型、str_replace()の第3パラメータ$subjectは配列または文字列型である必要があります。
WordPressのデバッグを非表示にしていれば一旦は表示されない
今回はWordPressのエラーを表示しているためにエラーが表示されています。開発環境やテスト環境ではエラーを表示させておいて、将来廃止される機能等に対応する必要があります。
一方で、本番環境ではエラーは表示してしまうとユーザーが困惑したり、サーバー内部の情報が表示されたりしてセキュリティ的に危険です。
本番環境ではエラー表示はしないようにしておきましょう。
コメントを残す