PHPメモ:エラー
PHPのエラーの基本について整理しました。
エラーに関する設定
主な設定項目
error_reporting
出力するエラーのレベルを設定する。
E_ALLと設定すると全てのエラーメッセージを出力する。
display_errors
エラーを画面に表示するかどうか設定する。
開発中はエラーの内容を把握するために有効にしておくが、運用中にエラーが表示されると、悪質なユーザーにとって攻撃のヒントとなってしまったり、ページのデザインが崩れてしまうため無効にする。
log_errors
エラーを記録するかどうかを設定する。 ログはエラーの記録のこと。
開発中も運用中も有効にしてエラーのログをとることで、プログラムのどの部分でエラーが起きているか把握できる。
設定方法
php.iniファイルで設定する
php.iniファイルで設定すると、設定がphpファイル全体に影響する。
php.iniファイルとはPHPのプログラムを動かすための設定が書かれたファイルのこと。MAMPを使っている場合、MAMP/bin/php/php7.3.8/conf/php.iniでファイルを見つけることができる。php.iniファイルに先程の設定項目が書かれているので、それをいじることで設定を変更できる。
スクリプトの実行前にエラーが発生することもあるため、なるべくphp.iniファイルで設定することが望ましい。
それぞれのphpファイルで設定する
phpファイルのコードの始めに直接設定を書く方法で、記述したファイルのみ設定が影響する。
php.iniファイルで設定するときとは違い、エラーを出力するファイルと出力しないファイルを分けることができる。
具体的なコードの例はこんな感じ。 書き方は他にもある。
エラーメッセージ
エラーメッセージは
エラーレベル:エラーメッセージ:エラーが起きた場所といった構造になっている。
例
Notice: Undefined variable: var in /Applications/MAMP/htdocs/php/index.php on line 10
Noticeレベルのエラーで、変数が未定義であり、index.phpの10行目のvarの部分、といった意味。ただし必ずしも表示されている行でエラーが起きているとは限らない。
エラーレベル
E_ERROR
致命的なエラーで、処理が中断される。 Fatal Errorと表示される。
E_WARNING
実行時の警告。処理を止めるほどではないが、修正が必要なエラー。エラーを表示したままスクリプトを実行する。
E_PARSE
コンパイル時のパースエラー。文法を間違えたときに起こる。Parse Errorと表示される。
コンパイルとはプログラミングの言語で書かれたコードをコンピュータが実行可能な機械語に翻訳すること。機械語は0と1で表現されるもの。
パースとは解析という意味。
コンパイルはスクリプトの実行前なので、スクリプトは実行されない。
E_NOTICE
実行時の注意。エラーを表示したままスクリプトを実行する。E_WARNINGに比べると無視しても問題ないぐらいの軽いエラーだが、出来るだけなくすほうが良い。
E_DEPRECATED
将来のバージョンで動作しなくなるコードを書いた時のエラー。
エラーが出たときの対処法
ググる
エラーメッセージをそのままコピペして、解決方法を探す。エラーメッセージと解決方法はセットでメモか何かに記録しておくと後々便利。
変数の中身を確認する
var_dump();やprint_r();を使って変数の中身を表示して、変数に値が入っているか、想定した値が入っているかどうかなどをチェックする。
ログを確認する
ログを見ることによってどこでエラーが起きたか調べやすくなる。
参考
エラー設定
https://www.php.net/manual/ja/errorfunc.configuration.php#ini.display-errors
エラー処理
https://www.php.net/manual/ja/language.errors.basics.php
エラーレベル
https://www.php.net/manual/ja/errorfunc.constants.php