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){ ... } }
これでエラーは消えました。
すっきり!
コメント