php学習の基礎5エラー処理
3855 ワード
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
2.カスタム・エラー・プロセッサの作成
カスタムエラープロセッサを作成するのは簡単です.PHPでエラーが発生したときに呼び出すことができる専用関数を簡単に作成しました.この関数は、少なくとも2つのパラメータ(error levelおよびerror message)を処理する能力が必要ですが、最大5つのパラメータ(オプション:file、line-numberおよびerror context):
error_function(error_level,error_message,
error_file,error_line,error_context)
パラメータ
説明
error_level
必要です.ユーザー定義のエラーに対して、エラー・レポート・レベルを指定します.値の数でなければなりません.次の表を参照してください:エラーレポートレベル.
error_message
必要です.ユーザー定義のエラーに対してエラーメッセージを指定します.
error_file
オプション.エラーが発生したファイル名を指定します.
error_line
オプション.エラーが発生した行番号を指定します.
error_context
オプション.エラーが発生したときに使用される各変数とその値を含む配列を指定します.
エラーレポートレベル
これらのエラー・レポート・レベルは、エラー・ハンドラが処理しようとするエラーの異なるタイプです.
値
定数
説明
2
E_WARNING
致命的でないrun-timeエラー.スクリプトの実行を一時停止しません.
8
E_NOTICE
Run-time通知.スクリプトの検出にエラーが発生する可能性がありますが、スクリプトが正常に実行されている場合に発生する可能性があります.
256
E_USER_ERROR
致命的なユーザーによって生成されたエラー.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_ERROR.
512
E_USER_WARNING
致命的でないユーザーが生成した警告.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_WARNING.
1024
E_USER_NOTICE
ユーザーが生成した通知.これは、プログラマがPHP関数trigger_を使用するのと同じです.Error()設定のE_NOTICE.
4096
E_RECOVERABLE_ERROR
キャプチャ可能な致命的なエラー.類似E_ERRORは、ユーザ定義のプロセッサによってキャプチャされることができる.(set_error_handler()参照)
8191
E_ALL
すべてのエラーと警告、レベルEを除くSTRICT以外.(PHP 6.0でE_STRICTはE_ALLの一部)
次に、エラーを処理する関数を作成します.
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
上のコードは簡単なエラー処理関数です.トリガーされると、エラー・レベルとエラー・メッセージが取得されます.エラー・レベルとメッセージが出力され、スクリプトが終了します.
これで、エラー処理関数を作成しました.この関数がいつトリガーされるかを決定する必要があります.
Set Error Handler
PHPのデフォルトエラーハンドラは内蔵のエラーハンドラです.上記の関数をスクリプト実行中のデフォルトのエラーハンドラに変更するつもりです.
エラーハンドラは、いくつかのエラーにのみ適用されるように変更できます.これにより、スクリプトは異なる方法で異なるエラーを処理できます.ただし、この例では、すべてのエラーに対してカスタムエラーハンドラを使用する予定です.
set_error_handler("customError");
すべてのエラーを処理するためにカスタム関数を望んでいるので、set_error_handler()には1つのパラメータしか必要ありません.2番目のパラメータを追加してエラーレベルを指定できます.
≪インスタンス|Instance|emdw≫
このエラーハンドラは、存在しない変数を出力しようとすることによってテストされます.
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
上記のコードの出力は、次のようになります.
Error: [8] Undefined variable: test
エラーレコード
デフォルトではphp.iniのerror_log構成、PHPはサーバのエラー記録システムまたはファイルにエラー記録を送信する.error_を使用することでlog()関数で、指定したファイルまたはリモート宛先にエラーレコードを送信できます.
エラーメッセージをEメールで送信することは、指定したエラーの通知を得るための良い方法です.
E-Mailによるエラーメッセージの送信
次の例では、特定のエラーが発生した場合、エラーメッセージのあるEメールを送信し、スクリプトを終了します.
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
上記のコードの出力は、次のようになります.
Error: [512] Value must be 1 or below
Webmaster has been notified
上記のコードから受信したメールは、次のようになります.
Error: [512] Value must be 1 or below
この方法はすべての間違いに合わない.通常のエラーは、デフォルトのPHP記録システムを使用してサーバに記録する必要があります.