ホームページ  >  記事  >  バックエンド開発  >  PHP例外ハンドラのカスタマイズ

PHP例外ハンドラのカスタマイズ

*文
*文オリジナル
2017-12-23 15:18:002242ブラウズ

プログラミングでは異常なエラーが発生することは避けられません。私たちがしなければならないのは、例外がユーザーに認識されないように、例外を合理的に処理することです。今日は例外ハンドラーをカスタマイズする方法を共有します。

カスタム エラー ハンドラーの作成

カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関数を作成しただけです。

関数は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できなければなりませんが、最大 5 つのパラメータ (オプション: ファイル、行番号、エラー コンテキスト) を受け入れることができます:

Syntax

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 致命的ではない実行時エラー。スクリプトの実行を一時停止しないでください。

8 E_NOTICE

実行時通知。

スクリプト検出エラーが発生する可能性がありますが、スクリプトが正常に実行されているときに発生することもあります。

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 "Error: [$errno] $errstr
";
echo "Ending Script";
die();
}

上記のコードは、単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。

エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。

エラー ハンドラーを設定する

PHP のデフォルトのエラー ハンドラーは、組み込みのエラー ハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。

エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:

set_error_handler("customError");

カスタム関数ですべてのエラーを処理したいため、set_error_handler() のみが必要です。パラメータは 1 つだけです。 2 番目のパラメータを追加してエラー レベルを指定できます。

存在しない変数を出力してこのエラー ハンドラーをテストします:

<?php
//error handler function
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

上記のコードの出力は次のようになります:

エラー: [8] 未定義の変数: test

がエラーをトリガーします

スクリプト内 ユーザーがデータを入力する場所。ユーザーの入力が無効な場合にエラーをトリガーするのに役立ちます。 PHP では、このタスクはtrigger_error() によって実行されます。

この例では、「test」変数が「1」より大きい場合、エラーが発生します:

ca397a1d05c1e9953d3daf2989203e481)

{

trigger_error("値は 1 以下である必要があります");

}

?>

上記のコードの出力は次のようになります:

注意: 値は 1 以下である必要があります

C:webfoldertest.php の 6 行目

2 番目のパラメーターを追加すると、スクリプト内の任意の場所でエラーをトリガーできます。トリガーされるエラー レベルを指定できます。

考えられるエラーの種類:

E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。

E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。

E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトは、スクリプトが正常に実行されているときに発生した可能性のあるエラーを検出しました。

この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:

1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

上記のコードの出力は次のようになります:

エラー: [512] 値は 1 以下でなければなりません

スクリプトを終了します

、独自のエラーを作成する方法とそれらをトリガーする方法を学習しました。次に、エラー ログについて学習しましょう。

エラーログ

默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。

通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。

通过 E-Mail 发送错误消息

在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:

<?php
//error handler function
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr
";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"someone@example.com","From: webmaster@example.com");
}
//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 记录系统在服务器上进行记录。

相关推荐:

PHP 异常处理 Exception 类

PHP 错误处理机制

php 错误级别设置方法

以上がPHP例外ハンドラのカスタマイズの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。