English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 基礎チュートリアル

PHP 高級チュートリアル

PHP そして MySQL

PHP リファレンスマニュアル

PHP set_error_handler() 関数の使い方および例

PHP エラーアンドロギング リファレンスマニュアル

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 
エンディング・スクリプト