自身のホームページを更新せぬまま、3月末になってしまいました。
3月はVue.js を使ったWEBアプリ開発の一方で、WordPressを使った開発がメインの月になりました。色々と書き留めるべきTipsはあったのですが、更新することができず、もったいなかったです。
何も書かないまま3月が終わるのももったいないので、今日出会ったエラーについて記しておきます。
開発を続けるごとに、いろいろなエラーに出会うのですが、今回のはまた困ったエラーです。
WordPressでの開発を続けるにあたって、Query Monitor・Debug Bar・Debug 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を上の記事に従って修正します。
ローカルの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にいらんことを書いているのだろうか。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_errorsはOffになっていました(Local Value)。効いています。
error_reportingも設定した値が確認できました。
では、なぜエラーが出続けるのか。設定すべき.htaccessが違うのか?
理由が分からぬまま、ググり続けます。
wordpressのDeprecatedエラーを至急抑制したい
こちらのページが参考になりそう!
とりあえず、今まで行った、php.iniやhtaccessへの変更は元に戻します(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の編集で止められなかったのか・・・」ですね。修正箇所を間違えていたのでしょうか。いたのでしょうね、おそらく。
投稿記事のカテゴリやタグと同じ記事をランダム表示します。