phpエラー処理の経験を共有する


本教程ではPHPの中で最も重要な誤り検出方法を紹介しています。さまざまなエラー処理方法を説明します。簡単な「die()」文のカスタムエラーとエラーフリップフロップエラーレポートの基本的なエラー処理:die()関数を使って最初の例でテキストファイルを開く簡単なスクリプトを示しました。
 
<?php
$file=fopen("welcome.txt","r");
?>
ファイルが存在しない場合、このようなエラーが発生します。Warning:fopen(welcome.txt)[function.fopen]:failed to open stream:No such file or directory in C:\webfolder\test.php on line 2ユーザーが上記のようなエラーメッセージを得ることを避けるために、ファイルにこのファイルが存在するかどうかを確認します。このようなエラーメッセージがあります。File not foundは前のコードよりも上のコードの方が効果的です。これは簡単なエラー処理システムを採用していますので、エラーの後にスクリプトを終了しました。しかし、簡単に台本を終了するのはいつも適切な方法ではない。エラー処理のための代替のPHP関数を検討しましょう。カスタムエラープロセッサを作成して、カスタムエラープロセッサを作成するのは簡単です。簡単に専用関数を作成し、PHPでエラーが発生した時にこの関数を呼び出すことができます。この関数は少なくとも2つのパラメータを処理する能力が必要であるが、最大5つのパラメータ(オプション:file、line-number、およびerror context)を受け入れることができる。function(error_)level,error_メッセージ、error_file,error_ラインcontext
パラメータ
説明
error_vel
必要です。ユーザー定義のエラーに対してエラー報告レベルを規定します。値でなければなりません。
以下の表を参照してください。エラーレポートレベル。
error_メッセージ
必要です。ユーザ定義のエラーに対してエラーメッセージを規定します。
error_file
オプション。エラーが発生したファイル名を指定します。
error_ライン
オプション。エラーが発生した行番号を指定します。
error_context
オプション。配列を指定します。エラーが発生したときに使用する変数とその値を含みます。
エラーレポートレベル
これらのエラー報告レベルは、エラー処理プログラムが意図しているエラーの異なるタイプです。

定数
説明
2
同前WARNING
致命的でないrun-timeエラー。スクリプトの実行を一時停止しません。
8
同前NOTICE
Run-timeのお知らせ。
スクリプトの発見はエラーが発生する可能性がありますが、スクリプトが正常に実行されている場合もあります。
256
同前USER_ERROR
致命的なユーザが生成したエラー。これはプログラマがPHP関数trigger_を使うのと似ています。error()設定のE_ERROR
512
同前USER_WARNING
致命的でないユーザが作成した警告です。これはプログラマがPHP関数trigger_を使うのと似ています。error()設定のE_WARNING。
1024
同前USER_NOTICE
ユーザが作成した通知。これはプログラマがPHP関数trigger_を使うのと似ています。error()設定のE_NOTICEです。
4096
同前RECOVERBLE_ERROR
捕獲可能な致命的なエラー。似ていますERRORは、ユーザ定義の処理プログラムによって捕捉されることができる(set_を参照せよerror_handler()
8191
同前ALL
すべてのエラーと警告は、レベルE_を除く。STRICT以外。
(PHP 6.0、E_STRICTはE_ですALLの一部)では、エラー処理の関数を作成します。
 
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
上のコードは簡単なエラー処理関数です。これがトリガされると、エラーレベルとエラーメッセージが取得されます。エラーレベルとメッセージを出力してスクリプトを終了します。ここでは、関数がいつトリガされるかを決定する必要があるエラー処理関数を作成しました。Set Error Handler PHPのデフォルトエラー処理プログラムは、ビルド内のエラー処理プログラムです。上記の関数をスクリプト実行中のデフォルトエラー処理プログラムに変換します。エラー処理プログラムをいくつかのエラーにのみ適用することができます。このようにスクリプトは異なる方法で異なるエラーを処理することができます。しかし、この例では、すべてのエラーに対して、私たちのカスタムエラー処理プログラムを使用するつもりです。error_handler(「customerError」);私たちは私たちのカスタム関数がすべてのエラーを処理することを望むので、set_error_handler()は一つのパラメータだけが必要で、第二のパラメータを追加してエラーレベルを指定できます。例は、存在しない変数を出力することを試みることによって、このエラー処理プログラムをテストする。
 
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
以上のコードの出力は、同様であるべきである。Error:[8]Udefined variable:testトリガエラーは、シナリオにおいてユーザがデータを入力する位置にあり、ユーザの入力が無効であるときにエラーをトリガするのに有用である。PHPでは、このタスクはtrigger_error()が完了しましたこの例では、「test」変数が「1」より大きいとエラーが発生します。
 
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>
以上のコードの出力はこのようにするべきです。Notice:Value must be 1 or below in C:\webfolder\test.php on line 6は、シナリオのどこでもエラーを起こすことができます。追加された第2のパラメータを通じて、トリガされたエラーレベルを規定することができます。可能なエラータイプ:E_USER_ERROR-致命的なユーザが生成したrun-timeエラー。エラーが回復できませんでした。スクリプトの実行が中断されました。同前USER_WARNING-致命的でないユーザが生成するrun-time警告。スクリプトの実行は中断されません。同前USER_NOTICE-デフォルト。ユーザが生成したrun-time通知。スクリプトが可能なエラーを発見しました。スクリプトが正常に実行される場合もあります。この例では、「test」変数が「1」より大きいとE_が発生します。USER_WARNINGエラー。もしE_が発生したらUSER_WARNING、私達は私達のカスタムエラー処理プログラムを使ってスクリプトを終了します。
 
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
以上のコードの出力はこのようにするべきです。Err:[512]Value must be 1 or below Eding Scriptは今、私達は自分のerrorをどうやって作成するかを勉強しました。エラー記録はデフォルトで、php.iniにおけるerror_によるとログ設定、PHPはサーバのエラー記録システムまたはファイルにエラー記録を送信します。error_を使うことによってlog()関数は、指定されたファイルまたはリモート宛先にエラーレコードを送信できます。メールであなた自身にエラーメッセージを送ることは、指定されたエラーの通知を得るための良い方法です。E-Mailでエラーメッセージを送信します。以下の例では、特定のエラーが発生した場合、エラーメッセージ付きのメールを送信します。スクリプトを終了します。
 
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}

//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は上記のコードからメールを受信します。通常のエラーはデフォルトのPHP記録システムを使用してサーバーに記録するべきです。エラートレース定義と用法PHP debug_backtrace()関数はbacktraceを生成します。関数は、関連する配列を返します。以下は戻り可能な要素です。
名前
タイプ
説明
機能
文字列
現在の関数名。
ライン
整数
現在の行番号。
file
文字列
現在のファイル名。
クラス
文字列
現在のクラス名
object
オブジェクト
現在のオブジェクト。
タイプ
文字列
現在の呼び出しのタイプ、可能な呼び出し:
を返します  - メソッドの呼び出し
は、「:」を返します。  - 静的方法の呼び出し
は、nothing-関数呼び出しを返す。
アークス
行列
関数内で関数パラメータを一覧表示します。参照されたファイルに参照されたファイル名がリストされます。文法デバッグbacktrace()例
 
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//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);
}
?>
出力:Aray([0]=>Aray([file]=>C:\webfolder\test.php=>7[Fnction]=>Aray([0]=>Clieventland[1]=>Brown)[Armtweldline]=Arftttweldration=[Ardededededededededededededededededededededel=Arftttttttttttttttttttttttttttttttttttttttttttttttttttwer==========>Arff[ 0]=>Glenn[1]=>Qugmire)[2]=>Aray([file]=>C:\webfolder\test.php[line]=>14[function]=>one[args]=>Aray([0]=>Peter[1]=>Greffin)