自身のホームページを更新せぬまま、3月末になってしまいました。

3月はVue.js を使ったWEBアプリ開発の一方で、Wordpressを使った開発がメインの月になりました。色々と書き留めるべきTipsはあったのですが、更新することができず、もったいなかったです。

何も書かないまま3月が終わるのももったいないので、今日出会ったエラーについて記しておきます。

WordPressにプラグインをいれたところ、エラー表示が頻発

開発を続けるごとに、いろいろなエラーに出会うのですが、今回のはまた困ったエラーです。

WordPressでの開発を続けるにあたって、Query MonitorDebug BarDebug Bar Extenderといったプラグインをローカルの開発環境に入れた瞬間から、下のようなエラーが頻発。
(画像はWordPressの投稿画面です。)

Deprecated: Function create_function() is deprecated in /opt/lampp/htdocs/hiroshi-wp/wp-content/plugins/debug-bar-extender/debug-bar-extender.php on line 222

「create_function() は将来なくなるから、非推奨。使うな!」というところでしょうか。

ググってみると、PHP7.3以降で発生するエラーのようです(ローカルの開発環境(XAMPP)はPHP7.4.1でした)。

エラーをみたところ、DebugBarExtenderをいれた開発環境でのみ起こるエラーなので、とりいそぎ、Deprecatedのエラーは表示させないように修正。

wordpressをPHP7.3で使うと「Notice」「Deprecated」のエラー表示がされる対応

ローカルのXAMPPで動かしていたので、そこのphp.iniを上の記事に従って修正します。

php.iniを編集(してもダメ)

ローカルのXAMPPが見ているphp.iniのパスは、「/opt/lampp/etc/php.ini」。早速こちらのファイルを開きます。

516行目に
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
という箇所がありました。

ちなみに、109行目にはこんな説明も。

 ; error_reporting
 ;   Default Value: E_ALL & ~E_NOTICE
 ;   Development Value: E_ALL | E_STRICT
 ;   Production Value: E_ALL & ~E_DEPRECATED

とりいそぎ、516行目を、

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

と修正し、Apacheを再起動。が、なおらず

PHP.iniがちゃんと反映されているのか知るために、534行目を修正。

display_errors=Off

しかし、エラーは消えず。ちなみに、phpinfo()側での「display_errors」はoffになっているので、php.iniの修正は反映されているみたいです。

.htaccessを修正(してもダメ)

なら、.htaccessにいらんことを書いているのだろうか。WordPressルートフォルダの.htaccess側は次の通り。

# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
RewriteBase /hiroshi-wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
RewriteRule . /hiroshi-wp/index.php [L]
</IfModule>
# END WordPress

とくにおかしいところは見当たらず。

ここに下の行を加えてみます。

php_value "error_reporting" "E_ALL & ~E_NOTICE & ~E_DEPRECATED"

こちらも同様にダメ

php_flag  display_errors Off

エラーの非表示も効かず

こちらも、そもそも修正が効いているのかどうか調べるために、同じディレクトリで<?php phpinfo(); ?>を確認。

display_errorsOffになっていました(Local Value)。効いています。
error_reportingも設定した値が確認できました。

では、なぜエラーが出続けるのか。設定すべき.htaccessが違うのか?

理由が分からぬまま、ググり続けます。

@を問題の関数の前につけて、エラー表示を抑制

wordpressのDeprecatedエラーを至急抑制したい

こちらのページが参考になりそう!

とりあえず、今まで行った、php.inihtaccessへの変更は元に戻します(Apacheも再起動)。

そして、エラーの出ているファイル「wp-content/plugins/debug-bar-extender/debug-bar-extender.php」の222行目にある「create_function() 」に@をつけます。

221 foreach( $checkpoint_actions as $action_hook ) {
222   add_action( $action_hook, @create_function( '$in=NULL','dbgx_checkpoint("' . $action_hook . ' action");if ( $in ) return $in;' ) );
223 }

上のような具合です。すると、エラーが出なくなりました
(エラーは出ているんだけれど、出力させていない、でいいのかな。)

このプラグインは、本番環境で使用するつもりはないので、とりあえず、開発環境にてエラーが出なければそれで良いです。

そして、次の問題として、「なぜこのエラーをphp.ini.htaccessの編集で止められなかったのか・・・」ですね。修正箇所を間違えていたのでしょうか。いたのでしょうね、おそらく。

こちらも参照

PHPのエラー表示設定について

.htaccessでPHPの設定

 一覧ページへもどる