set_error_handler ユーザ定義のエラーハンドラ関数を設定する &reftitle.description; mixedset_error_handler callbackerror_handler interror_types スクリプトのエラー処理を行うユーザ関数 (error_handler)を設定します。 この関数は、実行時のエラー処理をユーザが定義するために使用します。 例えば、致命的なエラーの際にデータやファイルを消去する必要があるような アプリケーションや、ある条件のもとに (trigger_errorを使用して)エラーを発生する必要がある アプリケーションがこの場合にあたります。 PHP の標準のエラーハンドラは完全にバイパスされることに注意してください。 error_reporting の設定にかかわらず、どのような場合でも ユーザが設定したエラーハンドラがコールされます。ただし、この場合でも ハンドラで error_reporting のカレントの値を読み、 それにあわせて適切に動作させることは可能です。エラーを発生した命令の前に @ エラー制御演算子 が付加されている場合、この値は 0 となることには注意しましょう。 ユーザハンドラ関数は、必要に応じて die を コールする責任があることにも注意しましょう。エラーハンドラ関数が リターンした場合、スクリプトの実行は、エラーを発生した命令の次の命令に 継続されます。 以下のエラータイプは、ユーザ定義の関数では扱えません。 E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING および set_error_handler がコールされたファイルで発生した 大半の E_STRICT (ファイルアップロードのように)スクリプトが実行される前にエラーが 発生した場合、カスタムエラーハンドラはコールされません。 これは、その時点では登録されていないためです。 &reftitle.parameters; error_handler ユーザ関数は、エラーコードとエラーを記述する文字列の 2 つの引数を 受け取る必要があります。さらにオプションのパラメータとして 3 つの引数が 追加されています。これらは、エラーが発生したファイル名、エラーが 発生した行、発生したエラーのコンテキスト(エラーが発生した場所での アクティブなシンボルテーブルを指す配列)です。関数は以下のようになります。 handler interrno stringerrstr stringerrfile interrline arrayerrcontext errno 最初のパラメータ errno は、発生させる エラーのレベルを整数で格納します。 errstr 2 番目のパラメータ errstr は、 エラーメッセージを文字列で格納します。 errfile 3 番目のパラメータ errfile はオプションで、 エラーが発生したファイルの名前を文字列で格納します。 errline 4 番目のパラメータ errline はオプションで、 エラーが発生した行番号を整数で格納します。 errcontext 5 番目のパラメータ errcontext はオプションで、 エラーが発生した場所のアクティブシンボルテーブルを指す配列です。 つまり、エラーが発生したスコープ内でのすべての変数の内容を格納した 配列が errcontext だということです。 ユーザエラーハンドラは、決してエラーコンテキストを書き換えては いけません。 error_types 設定パラメータ error_reporting で表示するエラーを制御するのと全く同様に、 error_handler の起動を制御する際に 使用可能です。 このマスクを指定しない場合、 error_handlererror_reporting の設定によらず 全てのエラーに関してコールされます。 &reftitle.returnvalues; 前に定義されたエラーハンドラ(ある場合)を含む文字列、または エラーの場合には &null; を返します。 前に定義されたハンドラがクラスメソッドの場合、この関数は、 クラスとメソッド名からなる添字配列を返します。 &reftitle.changelog; &Version; &Description; 5.0.0 error_types パラメータが追加されました。 4.3.0 error_handler として、関数名のかわりに オブジェクトへのリファレンスとメソッド名を含む配列を指定することも できます。 4.0.2 ユーザ定義関数 error_handler で 3 つの オプションパラメータが利用できるようになりました。filename, line number, および context です。 &reftitle.examples; <function>set_error_handler</function> および <function>trigger_error</function> によるエラー処理 以下の例では、エラーを発生させることによる内部例外の処理や それらをユーザ定義関数で処理する方法を説明します。 My ERROR [$errno] $errstr
\n"; echo " Fatal error in line $errline of file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n"; echo "Aborting...
\n"; exit(1); break; case E_USER_WARNING: echo "My WARNING [$errno] $errstr
\n"; break; case E_USER_NOTICE: echo "My NOTICE [$errno] $errstr
\n"; break; default: echo "Unkown error type: [$errno] $errstr
\n"; break; } } // エラー処理のテスト用関数 function scale_by_log($vect, $scale) { if (!is_numeric($scale) || $scale <= 0) { trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", E_USER_ERROR); } if (!is_array($vect)) { trigger_error("Incorrect input vector, array of values expected", E_USER_WARNING); return null; } for ($i=0; $i ]]>
&example.outputs.similar; 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) ---- vector b - a warning (b = log(PI) * a) WARNING [1024] Value at position 2 is not a number, using 0 (zero)
Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) ---- vector c - an error ERROR [512] Incorrect input vector, array of values expected
NULL ---- vector d - fatal error FATAL [256] log(x) for x <= 0 is undefined, you used: scale = -2.5
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)
Aborting...
]]>
&reftitle.seealso; error_reporting restore_error_handler trigger_error エラーレベル定数 &seealso.callback;