【PHP】アップデート時のエラー対応

PHPをアップデートしたらエラーが出たので対応したお話

とあるサーバをPHP7.0系から7.4系にアップデートしてみることにしました。

アップデート完了後に表示が崩れたりエラーが出たりしたので備忘録。

スポンサーリンク

Head Cleaner

表示崩れの調査をしてみるとWordPressの「Head Cleaner」というプラグインが原因でした。

Head Cleaner
Cleaning tags from your WordPress header and footer.

コードエラー出まくりで読み込めていない感じです。

PHP Warning:  Use of undefined constant WPLANG - assumed 'WPLANG' (this will throw an Error in a future version of PHP) in /wp-content/plugins/head-cleaner/head-cleaner.php on line 270
PHP Warning:  preg_match(): Compilation failed: invalid range in character class at offset 4 in /wp-content/plugins/head-cleaner/includes/simple_html_dom.php on line 722
PHP Warning:  preg_match_all(): Compilation failed: invalid range in character class at offset 4 in /wp-content/plugins/head-cleaner/includes/simple_html_dom.php on line 387
PHP Warning:  Invalid argument supplied for foreach() in /wp-content/plugins/head-cleaner/includes/simple_html_dom.php on line 392
…

最終更新が2016年で開発は終了しているようですね。

キャッシュ系ですが他のプラグインとの相性問題で不具合も多かったようです。

改修するのは面倒なので無効化にすると正常に表示されました。

表示はなおったけどエラーがまだでる。。。

Invalid argument supplied for foreach()

エラーメッセージは下記。

PHP Warning:  Invalid argument supplied for foreach() in ...

配列関係のエラーっぽいです。

該当のソースは下記のような感じ。

foreach($List as $arrItem){
    foreach($arrItem as $arrData){
        ...
    }
}

foreachの入れ子で$arrItemが空だったりNullだったりするとエラー。

ついでの元の$Listもチェックするようにしておく。

綺麗に書くならis_arrayですかね。

if(is_array($List)){
    foreach($List as $arrItem){
        if(is_array($arrItem)){
            foreach($arrItem as $arrData){
                ...
            }
        }
    }
}

でも面倒くさいのでキャストにしておきました。

foreach((array)$List as $arrItem){
    foreach((array)$arrItem as $arrData){
        ...
    }
}

これでエラーは消えました。

すっきり!

コメント

タイトルとURLをコピーしました