[PHP] PHP7.2以降MoguraPlusXのeach()がエラーログにたびたび出てくる場合の対処法

自分は以前からずっと、アクセス集計・解析用にMoguraPlusXを導入しています。

導入が楽なことと、集計画面が自分にとってとても見やすくて使いやすいから、というのが理由で、会社のサイト管理でも、GoogleAnalyticsとMoguraPlusXを併用しています。

そんな使いやすいMoguraPlusXですが、PHP7.2の環境に導入したところ、一見正常に動いているように見えますが、エラーログが出力されていることに気が付きました。

今回発生するエラーの内容1

PHP7.2の環境で出力されるエラーログは、下記のようなものになります。

PHP Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/user/www/accesslog/mpx/writelog.php on line 734

each()がPHP7.2より非推奨となったため「廃止予定ですよ」と教えてくれています。

今はまだ放っておいても問題ありませんが、エラーログが肥大化する原因でもありますし、いずれ廃止される関数を使い続けるのもよくないので、ソースを書き換えてしまいましょう。

writelog.phpの修正

エラーログにも表示されていますが、734行目にあるeach()が今回の修正対象です。

while (list ($k, $v) = each ($w3a_buf)) {

          ↓

foreach ($w3a_buf as $k => $v) {

上記のように、list()とeach()を組み合わせてwhile()で回している部分を、そっくりforeach()に置き換えてしまえばOK。

動作確認を行い、正常にアクセスログが取得できていれば作業完了です。

今回発生するエラーの内容2

上記と理由は同じですが、こんなエラーが出ることもあります。

PHP Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/user/www/accesslog/mpx/inc/function.php on line 731

こちらも、each()がPHP7.2より非推奨となったため「廃止予定ですよ」と教えてくれていますので、ソースを書き換えてしまいましょう。

function.phpの修正

エラーログにも表示されていますが、731行目にあるeach()が今回の修正対象です。修正方法ですが、foreach()で取り出す方法と、key()とcurrent()で取り出す方法が使えますので、両方のパターンを載せておきます。

list($platform, $platform_d) = each($v);

          ↓

foreach( $v as $v_k => $v_v ){
    $platform = $v_k;
    $platform_d = $v_v;
    break;
}

ひとつめのパターンは、each()で取得していた連想配列を、foreach()で1回だけ回して取得する修正方法です。連想配列を取得するための苦肉の策、という感じでしょうか。個人的にはあまりやりたくない方法です。

続いてふたつめ。

list($platform, $platform_d) = each($v);

          ↓

$platform = key($v);
$platform_d = current($v);
next($v);

ふたつめのパターンは、each()で取得していた連想配列をkey()とcurrent()で取得する修正方法です。key()で連想配列のキーを取得し、current()で値を取得します。

今回の修正箇所では、最後のnext()は不要になりますが、通常each()の置き換えとして使用する場合は、next()で配列内のポインタを移動しておく必要があると思いますので、念のため入れています。

修正方法としては、おそらくこちらの方が妥当ではないかと思います。each()という関数ひとつでできていたことが、PHP7.2以降は別々の関数を使って処理を行うことが推奨されるようになりました。

動作確認を行い、正常にアクセスログが取得できていれば作業完了です。

さいごに

ひとつのプログラムを使い続けるには、こうしたメンテナンスが必要不可欠です。それはプログラムに限らず、PCも、機械も、われわれ人間にも言えることですね。

こまめに手をかけて、末永く愛用させていただきましょう。

MoguraPlusXの初期セットアップでエラーになってしまう方は、こちらの記事をどうぞ。

自分は以前からずっと、アクセス集計・解析用にMoguraPlusXを導入しています。 導入が楽なことと、集計画面が自分にとってとても見やすくて使いやすいから、...

MoguraPlusXがMySQL5.7でエラーになってしまう方は、こちらの記事をどうぞ。

自分は以前からずっと、アクセス集計・解析用にMoguraPlusXを導入しています。 導入が楽なことと、集計画面が自分にとってとても見やすくて使いやすいから、...
初稿:2020年1月18日