@blog.justoneplanet.info

日々勉強

PHP Errors and Error Management(PHPにおけるエラー)

■エラーの種類

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');
?>

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment