PHPカスタムエラープロセッサでエラー情報を処理するにはどうすればいいですか?

6835 ワード

PHPのベテランであれば、PHPスクリプトが間違っているときに何が起こったかはもちろん知っています.このときPHP解析器は、Fatal error:Call to undefined function on line 19--などのエラーメッセージを画面に表示するので、プログラムはここで終了する.この情報はお客様を驚かせます.彼はすぐに電話してあなたに相談するかもしれません.
幸いなことに、ここには解決策があります.PHPには、開発者がスクリプトエラーをキャプチャしてカスタムエラープロセッサに転送できるツールが内蔵されています.この場合、プロセッサをプログラミングしてエラーの詳細を表示できます.また、エラーをファイルまたはデータベースに書き込むことで、救済策を講じることもできます.プロセッサ・ライターに対してエラー・メッセージを無視することもできます.
ここでは、PHPのエラー処理APIを使用してユーザー定義のエラープロセッサを構築する方法について説明し、スクリプトのエラー情報を簡単で友好的に表示および管理する方法について説明します.
 
エラー・タイプとレポート・レベル
私たちは最も基本的なことから始めます.PHPには、注意、警告、エラー(または致命的なエラー)の3つの基本的なエラータイプがあります.通常、注意と警告はプログラムを終了しません.ただし、致命的なエラーは、定義されていない関数を呼び出したり、存在しないオブジェクトを参照したりするなど、危険な障害であり、プログラムが中断されます.これらのエラーは、起動、解析、コンパイル、または実行時に発生する可能性があります.
キーワードはE_NOTICE, E_ERRORなどは、エラーの異なるタイプやレベルを示すために使用されます.PHPマニュアルで詳細リストを入手できます.
スクリプトフェーズエラー表示error_Reporting()関数で制御します.この関数は、異なるエラーレベルに対して異なるパラメータを設定します.表Aは、この関数を使用して警告および致命的なエラーを報告するスクリプトプログラムを示している.
表A
<?php

// display warnings and errors

error_reporting(E_WARNING | E_ERROR);

// this will generate a notice, which will never be displayed

echo $undefinedVar;

// this will generate a fatal error, which will be displayed

callUndefFunc();

?>

 
表Bのコードを上記と比較すると、Listing Bにはエラー情報が隠されていたり、致命的な情報が隠されていたりして、エラー情報が表示されないことがわかります.
表B
<?php

// turn off error display

// no errors will be displayed

error_reporting(0);

// this will generate a notice

echo $undefinedVar;

// this will generate a fatal error

callUndefFunc();

?>

 
表Cのコードは、すべてのエラー情報、さらには簡単な注意事項を表示します.
表C
<?php

// all errors will be displayed

error_reporting(E_ALL);

// this will generate a notice

echo $undefinedVar;

// this will generate a fatal error

callUndefFunc();

?>

 
以上の3例に示すようにerror_Reporting()関数は、制御エラーが発生した場合、画面にコンテンツを表示することが重要です.ここでのキーワードはdisplayedであり、エラーが発生していないのではなく、エラーが表示されないことを意味します.したがって、致命的なエラー(不正な関数呼び出しなど)が発生すると、プログラムは終了します.ただし、ユーザーに表示されるメッセージはありません.
以下の例(表D)は、この場合を説明する.
表D
<?php

// no errors will be displayed

error_reporting(0);

// start a task

echo "Starting task...";

// call an undefined function

// a fatal error occurs during task processing

callMe();

// end the task

echo "Successfully completed task...";

?>

表Dでは,echo()関数を呼び出す際に致命的なエラーが発生し,プログラム実行時にはこれまで終了したが,エラーメッセージは何も与えられず,ユーザはこの状況を知らずにプログラムが正しく実行されていると考えている.次の結論は、プロセスが完了するかどうかにかかわらず、誤った報告をしないことは非常に危険であることが明らかです.
注:パラメータなしerror_を呼び出すReporting()は、現在のエラーレポートレベルを返します.
 
カスタムエラープロセッサ
明らかに、エラーレポートを隠すのは正しくありません.他の方法があるかどうか知りたいに違いありません.カスタムエラープロセッサはPHPのデフォルトエラー処理システムに取って代わる良い解決方法です.カスタムエラープロセッサは、情報の表示方法など、処理エラー情報を任意の方法で設定できます.
PHP関数で、この機能を完了したのはset_error_handler()関数.エラーが発生した場合、この関数は自動的に呼び出され、エラーコード、エラーメッセージ、エラーが発生したスクリプト名、エラーが発生した行の4つのパラメータが与えられます.この関数はエラー管理に責任を負います.
表Eは、簡単な例を示す.
表E
<?php

// define custom handler

set_error_handler('myHandler');

// custom handler code

function myHandler($code, $msg, $file, $line) {

echo "Just so you know, something went wrong at line $line of your script $file. The system says that the error code was $code, and the reason for the error was: $msg. Sorry about this!";

}

// generate a notice

echo $undefVar;

?>

このスクリプトを実行すると、次の情報が表示されます.
Just so you know, something went wrong at line 11 of your /dev/error1.php. The system says that the error code was 8, and the reason for the error was: Undefined variable: undefVar. Sorry about this!

 
原文住所:http://www.jcwcn.com/article-16463-1.html