■エラーメッセージの構成
PHPが出すエラーメッセージは、3つの要素で構成されている
▼1.「エラーレベル」
エラーの性質(重要度)を示す。構文が間違っている、実行不可能な致命的なものである等。
▼2.「メッセージ」
問題の要素やエラーの性質を補足。原因を特定するために利用する。エラーを発生させたモジュール名やPHPのトークン(これ以上に分解することのできない最小単語)を表示。
▼3.「ファイルのパスと行番号」
エラーの発生個所を示す。あくまでもエラー発生位置を示していて、問題箇所と必ずしも一致するわけではない(エラー原因となる箇所と、エラー発生する箇所は違う場合もある、という意)。この行を基準に、それ以前で原因を探す、ことも多い。
▼1.「エラーレベル」
▽Parse error:
PHPの構文から外れスクリプトとして成り立っていないことを示すエラー。構文が間違っているため、このメッセージが表示されている限り、スクリプトが実行されることはない。
対応するカッコや " がない、変数頭の "$" や文末の ";" 忘れ、演算子の評価順序違いなど、ほとんどが単純な記述ミスや勘違いによるもの。
▽Fatal error:
実行時に出るエラーで、これ以降の処理が実行できないほどの「致命的エラー」を表している。このエラーが発生するとそこで強制終了される。
▽Warning:
実行時に出るエラーで、以降の処理に影響を与える可能性がある「警告」。Warning が発生しても処理は続けられるが、これ以降も関連してエラーが出る可能性が高いので、いくつも発生する場合は初めの Warning から解決することが望ましい。
▽Notice:
プログラムの実行には影響ないけれど、これはこれでいいのかな? 程度の PHP からの「通知」。Notice が発生しても処理継続可能。バグの原因になったりセキュリティホールを生む可能性もあるため、Notice も ゼロになるようなコードを書くことが望ましい。
なお、PHPのデフォルトでは、error_reporting = E_ALL & ~E_NOTICE (Notice以外のエラーを表示)が設定されているため、Notice が表示されることはない。php.ini か error_reporting関数で E_ALL を指定すると全てのエラーメッセージが表示されるようになるので、開発段階ではすべて表示するよう設定することが望ましい。
▼2011.6.6.追記
// 全ての PHP エラーを表示させる
error_reporting(-1);
□使用例:連想配列をunset();後、var_dumpして、下記エラーを確認したかった際、利用
Notice: Undefined index:
□下記でもO.K.
error_reporting(E_ALL); //エラー出力のレベルを設定→すべてのエラー
ini_set("display_errors", "On"); //画面上にエラー出力を表示
□下記だけだと、NG。画面に表示されないので
error_reporting(E_ALL); //エラー出力のレベルを設定→すべてのエラー
PHPが出すエラーメッセージは、3つの要素で構成されている
Parse error: syntax error, unexpected ';' in /***/***.php on line ***
|エラーレベル| メッセージ | ファイルのパスと行番号 |
▼1.「エラーレベル」
エラーの性質(重要度)を示す。構文が間違っている、実行不可能な致命的なものである等。
▼2.「メッセージ」
問題の要素やエラーの性質を補足。原因を特定するために利用する。エラーを発生させたモジュール名やPHPのトークン(これ以上に分解することのできない最小単語)を表示。
▼3.「ファイルのパスと行番号」
エラーの発生個所を示す。あくまでもエラー発生位置を示していて、問題箇所と必ずしも一致するわけではない(エラー原因となる箇所と、エラー発生する箇所は違う場合もある、という意)。この行を基準に、それ以前で原因を探す、ことも多い。
▼1.「エラーレベル」
▽Parse error:
PHPの構文から外れスクリプトとして成り立っていないことを示すエラー。構文が間違っているため、このメッセージが表示されている限り、スクリプトが実行されることはない。
対応するカッコや " がない、変数頭の "$" や文末の ";" 忘れ、演算子の評価順序違いなど、ほとんどが単純な記述ミスや勘違いによるもの。
▽Fatal error:
実行時に出るエラーで、これ以降の処理が実行できないほどの「致命的エラー」を表している。このエラーが発生するとそこで強制終了される。
▽Warning:
実行時に出るエラーで、以降の処理に影響を与える可能性がある「警告」。Warning が発生しても処理は続けられるが、これ以降も関連してエラーが出る可能性が高いので、いくつも発生する場合は初めの Warning から解決することが望ましい。
▽Notice:
プログラムの実行には影響ないけれど、これはこれでいいのかな? 程度の PHP からの「通知」。Notice が発生しても処理継続可能。バグの原因になったりセキュリティホールを生む可能性もあるため、Notice も ゼロになるようなコードを書くことが望ましい。
なお、PHPのデフォルトでは、error_reporting = E_ALL & ~E_NOTICE (Notice以外のエラーを表示)が設定されているため、Notice が表示されることはない。php.ini か error_reporting関数で E_ALL を指定すると全てのエラーメッセージが表示されるようになるので、開発段階ではすべて表示するよう設定することが望ましい。
▼2011.6.6.追記
// 全ての PHP エラーを表示させる
error_reporting(-1);
□使用例:連想配列をunset();後、var_dumpして、下記エラーを確認したかった際、利用
Notice: Undefined index:
□下記でもO.K.
error_reporting(E_ALL); //エラー出力のレベルを設定→すべてのエラー
ini_set("display_errors", "On"); //画面上にエラー出力を表示
□下記だけだと、NG。画面に表示されないので
error_reporting(E_ALL); //エラー出力のレベルを設定→すべてのエラー