PHPで一元的にエラー報告を処理する方法はありますか?アプリケーションによって発生したすべてのエラーを電子メールで通知したいのですが。
アプリケーション全体でこれを実現するための最良の方法は何ですか?
ありがとう
PHPで一元的にエラー報告を処理する方法はありますか?アプリケーションによって発生したすべてのエラーを電子メールで通知したいのですが。
アプリケーション全体でこれを実現するための最良の方法は何ですか?
ありがとう
set_error_handlerを使用して、実行時に任意の方法でエラーを処理できます。
Kaliumが述べたように、あなたは使用したいと思うでしょうset_error_handler
、しかしそれはあなたを途中でしか得られません。また、キャッチされていない例外をトラップする必要があります。そのためには、を使用しますset_exception_handler
。
私が自分でやっていることは、コードトラップエラーが発生し、それらのエラーを他の場所でキャッチできる適切な例外に変換することです。キャッチされないものについては、デフォルトの例外ハンドラーを使用してログに記録して報告し、必要に応じて適切なエラーを表示します。
エラーには次の 3 種類があります。
PHP によって発生した警告や致命的なエラーなどのシステム エラー。404 エラーもこのカテゴリに含まれます。
不正な形式または失敗したクエリまたはデータベース接続によるデータベース エラー。
ErrorHandler
3 種類のエラーすべてを処理するクラスを作成する最良の方法です。システム エラーについては、このset_error_handler
ようなオンライン チュートリアルのいずれかを使用するか、読んでください。
データベースについては、すべてのクエリを処理する集中型のデータベース クラスを使用することをお勧めします。次のようなものを使用します。
$result=mysql_query($sql);
if (! $result)
{
$ErrorHandler->dbError(mysql_error(), $sql);
}
予期したファイルまたはデータベース レコードが見つからないなどの論理エラーの場合は、同じ ErrorHandler クラスを呼び出して、次のようにします。
if ($logicalError)
{
$ErrorHandler->appError('Something bad happened',__LINE__, __FILE__);
$ErrorHandler->showAppErrorPage();
}
ここで、__FILE__
および__LINE__
定数は、このエラーが発生した場所を正確に示します。php.netサイトでそれらを読んでください。
クラスErrorHandler
はすべてのエラーをログ ファイルに記録したり、電子メールで送信したり、携帯電話に SMS やテキストを送信したりできます。ユーザーをエラーページにリダイレクトするためにも使用できます。