English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
set_error_handler()関数は、ユーザー定義のエラーハンドリング関数を設定します。
mixed set_error_handler(callback $error_handler[, int $error_types]);
スクリプト中で発生するエラーを処理するためのユーザーの関数(error_handler)を設定します。
この関数は、実行中のエラーをユーザー定義の方法で処理するために使用できます。例えば、アプリケーションで重大なエラーが発生した場合や、特定の条件下でエラーが発生した場合(trigger_error()を使用して)、データを/ファイルのクリーンアップとリサイクルを行います。
重要なのは、error_typesで指定されたエラータイプは、コールバック関数がFALSEを返却しない限り、PHP標準のエラーハンドリングプログラムを迂回します。error_reporting()の設定は無効になり、エラーハンドリング関数が引き続き呼び出されますが、error_reportingの現在の値を取得して適切な処理を行うことができます。特に@errorと連携した場合の注意が必要です。-control operatorの前置の文でエラーが発生した場合、この値は0になります。
また、必要に応じてdie()を使用する責任があります。エラーハンドラープログラムが返却すると、エラーが発生した行の次の行が実行されます。
以下のレベルのエラーはユーザー定義の関数で処理できません:E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、およびset_error_handler()関数を呼び出したファイルで生成される多くのE_STRICT。
エラーがスクリプト実行前に発生した場合(例えばファイルアップロード時など)、カスタムのエラーハンドラープログラムはまだその時点で登録されていないため、呼び出されません。
番号 | パラメータ及び説明 |
---|---|
1 | error_handler(必須) エラー発生時に実行する関数を指定します。以下にerror_handlerの文法を示します。 |
2 | error_types(オプション) どのエラーレポートレベルでユーザー定義のエラーを表示するかを指定します。デフォルト値は「E_ALL」です。可能なエラーレポートレベルについては、「PHPエラーやログ記録定数:」を参照してください。 |
error_function(error_level, error_message, error_file, error_line, error_context);
これはparamenterの説明-
errno - 第1引数、errnoは、エラーのレベルを含む integer です。
errstr - 第2引数、errstrは、エラーの情報を含む string です。
errfile - 第3引数、errfileは、エラーが発生したファイル名を含む string です。
errline - 第4引数、errlineは、エラーが発生した行番号を含む integer です。
errcontext - 第5引数、errcontextは、エラーが発生した際のアクティブシンボルテーブルを指す array です。つまり、errcontextはエラーが発生した場所のスコープ内にあるすべての変数を含む配列です。ユーザーのエラーハンドラープログラムはエラーコンテキスト(context)を変更すべきではありません。
既にエラーハンドラープログラムが定義されていた場合、そのプログラム名の string を返します;内蔵のエラーハンドラープログラムの場合、NULLを返します。無効なコールバック関数を指定した場合もNULLを返します。既存のエラーハンドラープログラムがクラスのメソッドの場合、クラスとメソッド名を含むインデックス配列(indexed array)を返します。
以下はこのset_error_handler関数の使用法です:
<?php function customError($errno, $errstr, $errfile, $errline) { echo "カスタムエラー: [$errno] $errstr\n"; echo "行 $errline でエラーが発生しました\n"; echo "エンディング・スクリプト"; die(); } //エラーハンドラープログラムを設定 set_error_handler("customError"); $test = 0; //エラーをトリガー if ($test > -1) { trigger_error("カスタムエラーがトリガーされました"); } ?>テストしてみる‹/›
出力結果:
カスタムエラー: [1024カスタムエラーがトリガーされました 行でエラーが発生しました 16 in /home/cg/root/1531703/main.php エンディング・スクリプト