■エラーの種類
Compile-time errors
コンパイル中にパーサーに感知されたエラー。
Fatal errors
スクリプトの実行をとめる停止するエラー。
Recoverable errors(>=PHP5.2.0)
ユーザー定義のエラーハンドラで処理が可能。
Warning
致命的ではないエラー。関数に渡す引数を間違えた場合などに起こり、スクリプトの実行は止まらない。
Notice
通常の実行時に起こりうる注意。初期化していない変数にアクセスしようとした場合などに発生し、スクリプトの実行は止まらない。
■エラーレベルを表す定数
固有のビット値を持っている。
- E_ERROR
- 実行時エラー
- E_WARNING
- 実行時の警告
- E_PARSE
- パースエラー
- E_NOTICE
- 実行時の注意
- E_STRICT
- コードの互換性上の注意(PHP5.0.0以降)
- E_RECOVERABLE_ERROR
- E_ERRORと同レベル
- E_ALL
- E_STRICT以外の全て
■エラーの表示
php.iniのいくつかのディレクティブで定義できるが、デバッグなどで一時的にエラーを表示させたい時は、error_reporting関数をスクリプトの先頭などに記述する。
<?php error_reporting(E_ALL ^ E_NOTICE);//PHPのデフォルトのエラー表示 ini_set('display_errors', 1);//エラーを表示しない設定にしている場合は左記も追記する ?>
■エラーハンドラ
通常、エラーは関数に$errNo(エラーレベル), $errStr(エラーメッセージ), $errFile(エラーが発生したファイル名), $errLine(行番号), $errContext(エラーが発生したスコープ内での全変数の配列)を渡す。ユーザー定義関数がfalseを返した場合は、通常のエラーハンドラが処理を引き継ぐ。
<?php $oldEh = ''; function MyEh($errNo, $errStr, $errFile, $errLine, $errContext){ global = $oldEh; logToFile("Error: $errStr in $errFile as line $errLine"); if($oldEh){ $oldEh($errNo, $errStr, $errFile, $errLine, $errContext); } } $oldEh = set_error_handler('MyEh'); ?>