2023.11.07 Tue 2024.01.04
PHP警告エラーの原因と対処方法
PHPで発生する警告・エラーメッセージと対処方法
WordPress本体やプラグイン、PHPアップデート直後に、WordPressサイト上で多数のWarningから始まる警告文やエラーが表示されて上手く動作しないことがあります。原因は単純記述ミスから、やや難解なメッセージまでいろいろあります。海外サイトなどでないとエラーメッセージの警告内容が言及されていないエラーも
発生する度に毎回調べるのが手間なので自社用リファレンスとして、PHPのエラーメッセージの内容と原因、対処方法などを随時更新されるページ形式で一覧にまとめてみました。
登録されているエラー一覧
- The magic method XXX ZZZ() must have public visibility
- Undefined array key “xxxxxx” in
- Undefined variable $post in
- Attempt to read property “ID” on null in
- Fatal error: Call to undefined function
- PHP言語リファレンス(外部ページ)
PHPエラー一覧
- Warning:The magic method XXX ZZZ() must have public visibility
エラー発生時の条件
問題の原因と解決策
-
PHP7からPHP8へバージョンが変わったことにより推奨記述方法が変更され、従来の記述で非推奨となる記述箇所はすべて対象となりプラグインRestrict Categoriesから 警告文がでる。
所定箇所の関数コールがprivateが非推奨と判断されpublicでの呼び出し推奨となっているため。該当箇所のprivate宣言をpublicに変更することで、Warning警告文を回避。 注意したいのは、プラグインが対応している場合もあるため、サイト全体をバックアップ後に該当プラグインをアップデートして、それでも警告がでる場合の最終手段。場合によってはpublic宣言することで別の不具合を生じさせる恐れもあるため十分な知識と注意が必要。
PHP7からPHP8にバージョンアップしたことで、これまでわりと大雑把な記述でも警告がでなかった条件分岐なども、明確な変数などの未定義判定をしたりアクセス修飾子と呼ばれるpublicとprivate関数の厳密化が明確になってきているようです。
ほとんどの場合はpublic宣言するかissetによる変数のnull判定記述を追加することで回避できるようです。Warning(警告)の場合はエラーとはことなりプログラム実行には支障はありませんし、ローカル関数を開発者以外がパブリック化することはセキュリティ上も好ましくなく警告自体を非表示にすることは可能で現状のPHP8でも実は記述修正なしでも使用可能なのですが、なんとなくスッキリしないので都度修正をかけておいた方が後々のバージョンアップを前提と考えると推奨されるでしょう。
- Warning: Undefined array key “xxxxxx” in
エラー発生時の条件
問題の原因と解決策
-
PHP7からPHP8へバージョンが変わったことにより推奨記述方法が変更され、従来の記述で非推奨となる記述箇所はすべて対象となり警告文がでる。
PHPの$_POSTはスーパーグローバル変数が定義されていたが、フォームから送信されたデータを格納するデータがないため配列にて存在しないキー名を指定した際に発生するエラーです。 もともと記述すべき箇所に記載されていましたがPHP7ではスルーされていたようですが、PHP8ではきちんと警告されるようになったようです。配列に正しい値を入れれば警告はなくなります。今回は不要な記述であったためコメントアウトすることで対処しました。
- Warning: Undefined variable $post in
エラー発生時の条件
問題の原因と解決策
-
PHP7からPHP8へバージョンが変わったことにより推奨記述方法が変更され、従来の記述で非推奨となる記述箇所はすべて対象となり警告文がでる。
該当するPHPの処理内で参照される変数が未定義の場合に生じる警告エラーのようです。通常はisset()関数で変数の設定を判定してif判定することで警告文を回避できます。今回はページタイプで分ける必要があったので、!is_page()でif分岐させて警告文を回避できました。
- Warning: Attempt to read property “ID” on null in
エラー発生時の条件
問題の原因と解決策
-
PHP7からPHP8へバージョンが変わったことにより推奨記述方法が変更され、従来の記述で非推奨となる記述箇所はすべて対象となり警告文がでる。
該当するPHPの処理内で参照されるIDが空の場合に生じる警告エラーのようです。通常はisset()関数で変数の設定を判定してif判定することで警告文を回避できますが、今回はページタイプで分岐処理をさせている箇所であり、かつ、すでに条件分岐で警告文を回避していたところに404not foundページも対象条件にする必要があり、条件に&&追加することで警告文を回避できました。
- Fatal error: Call to undefined function XXX() in
エラー発生時の条件
問題の原因と解決策
-
サーバー設定の影響でPHPバージョンアップ後にサイトヘルスに改善警告が表示され、なんどか再インストールやテーマインポートをした状態で上手くインポートできなかったためか、エラーが表示される。
FatalエラーはWarningのような警告とことなり、サイト表示上致命的なエラーを意味しており、正常にページ表示ができなくなります。 エラーメッセージの内容は書いてある通り、対象箇所から呼び出している関数が見つからないことによる致命的なエラーを意味してます。 原因はインクルードしたPHP関数がプラグインのPostSnippetsからショートコードでコールしていたため、インクルードPHPに記載されているすべての関数が実行されないことが原因であったため、header.phpにショートコードで呼び出されている関数PHPをインクルードさせてあげることで解決しました。
各アップデート後は結構な割合でエラーが発生しやすい
お薦めの関連記事
掲載情報につきましては当社が独自に調査、検証および収集した情報です。
情報の妥当性や確実性を一切保証するものでなく、情報や内容が訂正や修正、変更されている場合があります。 よって、当社サイトの利用により生じたいかなる損害等についても運営側にて一切の責任を負いません。
掲載情報の修正・変更等をご希望の場合はお知らせください。