4

PHPで一元的にエラー報告を処理する方法はありますか?アプリケーションによって発生したすべてのエラーを電子メールで通知したいのですが。

アプリケーション全体でこれを実現するための最良の方法は何ですか?

ありがとう

4

3 に答える 3

8

set_error_handlerを使用して、実行時に任意の方法でエラーを処理できます。

于 2009-04-04T15:20:13.100 に答える
6

Kaliumが述べたように、あなたは使用したいと思うでしょうset_error_handler、しかしそれはあなたを途中でしか得られません。また、キャッチされていない例外をトラップする必要があります。そのためには、を使用しますset_exception_handler

私が自分でやっていることは、コードトラップエラーが発生し、それらのエラーを他の場所でキャッチできる適切な例外に変換することです。キャッチされないものについては、デフォルトの例外ハンドラーを使用してログに記録して報告し、必要に応じて適切なエラーを表示します。

于 2009-04-04T15:32:54.163 に答える
4

エラーには次の 3 種類があります。

  1. PHP によって発生した警告や致命的なエラーなどのシステム エラー。404 エラーもこのカテゴリに含まれます。

  2. 不正な形式または失敗したクエリまたはデータベース接続によるデータベース エラー。

  3. サーバーやデータベースに関係のないアプリケーションの内部動作で問題が発生した場合などの論理エラー。たとえば、特定のファイルが特定のフォルダーにあると予想していたが、そうではなかった場合などです。

ErrorHandler3 種類のエラーすべてを処理するクラスを作成する最良の方法です。システム エラーについては、この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 やテキストを送信したりできます。ユーザーをエラーページにリダイレクトするためにも使用できます。

于 2009-04-04T15:39:02.307 に答える