PHPのデフォルトのエラー処理は非常に簡単です。 ファイル名、行番号とエラーを説明するメッセージとエラーメッセージがブラウザに送信されます。
PHPのエラー処理
スクリプトとWebアプリケーションを作成する場合は、エラー処理は重要な部分です。 あなたのコードは、エラーチェックコードがない場合、あなたのプログラムは非常に専門外に見えることがあり、あなたはセキュリティリスクに開放されていてもよいです。
このチュートリアルでは、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
上記のようなエラーメッセージを得ることからユーザーを防ぐために、我々はそれにアクセスしようとする前に、ファイルが存在するかどうかをテストします。
<?php
if(!file_exists("welcome.txt")) {
die("File not found");
}
else {
$file=fopen("welcome.txt","r");
}
?>
ファイルが存在しない場合は今、あなたは、このようなエラーが表示されます。
File not found
それは、エラーの後にスクリプトを停止するには、単純なエラー処理メカニズムを使用しているため、上記のコードは、以前のコードよりも効率的です。
しかし、単純にスクリプトを停止することは常に行くための正しい方法ではありません。 エラーを処理するための代替のPHPの関数を見てみましょう。
カスタムエラーハンドラの作成
カスタムエラーハンドラを作成することは非常に簡単です。 私たちは、単にエラーがPHPで発生したときに呼び出すことができる特殊な関数を作成します。
この関数は、2つのパラメータ(エラーのレベルとエラーメッセージ)の最小値を扱うことができなければならないが、5つのパラメータまで受け入れることができる(optionally: file, line-number, and the error context) :
構文
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の関数使用して、プログラマによって設定されたE_ERRORに似ているtrigger_error() |
512 | E_USER_WARNING | 非致命的なユーザー生成警告。 これは、PHPの関数使用して、プログラマによって設定されたE_WARNINGに似ているtrigger_error() |
1024 | E_USER_NOTICE | ユーザー生成の通知。 これは、PHPの関数使用して、プログラマによって設定されたE_NOTICEのようなものですtrigger_error() |
4096 | E_RECOVERABLE_ERROR | キャッチ可能な致命的なエラー。 これは、E_ERRORに似ていますが、ユーザ定義のハンドルによってキャッチすることができます(see also set_error_handler() ) |
8191 | E_ALL | すべてのエラーと警告(E_STRICT became a part of E_ALL in PHP 5.4) |
今すぐエラーを処理する関数を作成することができます:
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
上記のコードは、単純なエラー処理機能です。 それがトリガされると、それはエラーレベル、エラーメッセージを取得します。 その後、エラーレベルとメッセージを出力して、スクリプトを終了します。
今、私たちはエラー処理機能を作成していることを我々はそれがトリガーされなければならない時に決定する必要があります。
設定されたエラーハンドラ
PHPのデフォルトのエラーハンドラがエラーハンドラ内で構築されています。 私たちは、スクリプトの期間中、デフォルトのエラーハンドラ上記の関数を作成しようとしています。
それだけでいくつかのエラーを申請するエラーハンドラ、スクリプトは異なる方法で異なるエラーを処理することができ、その方法を変更することが可能です。 しかし、この例では、我々はすべてのエラーのために私たちのカスタムエラーハンドラを使用しようとしています。
set_error_handler("customError");
我々はカスタム関数は、すべてのエラーを処理したいので、 set_error_handler()パラメータを1つだけ必要で、2番目のパラメータはエラーレベルを指定するために追加することができます。
例
存在しない出力変数に試みることによって、エラーハンドラをテストします:
<?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);
?>
上記のコードの出力は次のようなものでなければなりません。
Error: [8] Undefined variable: test
エラーをトリガ
ユーザーが入力することができるデータスクリプトでは、不正入力が発生したときにエラーを誘発するのに有用です。 PHPでは、これはによって行われるtrigger_error()関数。
例
この例では、エラーが発生した場合"test"変数がより大きい"1" :
<?php
$test=2;
if ($test>=1)
{
trigger_error("Value must be 1 or below");
}
?>
上記のコードの出力は次のようなものでなければなりません。
Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6
エラーは、スクリプト内で希望する、2番目のパラメータを追加することによって、あなたはエラーレベルがトリガされたものを指定することができますどこにでもトリガすることができます。
可能性のあるエラーの種類:
- E_USER_ERROR - 致命的なユーザー生成実行時エラー。 から回収することができないエラー。 スクリプトの実行が停止され
- E_USER_WARNING - 非致命的なユーザー生成の実行時の警告。 スクリプトの実行が停止されていません
- E_USER_NOTICE - デフォルト。 ユーザーが生成した実行時の通知。 スクリプトはエラーであるかもしれない何かを発見したが、通常のスクリプトを実行している場合にも起こる可能性
例
この例では、E_USER_WARNING場合に発生し"test"変数がより大きい"1" 。 E_USER_WARNINGが発生した場合、我々は我々のカスタムエラーハンドラを使用して、スクリプトを終了します。
<?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
Ending Script
今、私たちは私たち自身のエラーを作成するために学んできたことと、それらをトリガーする方法を、エラーログを見てみましょう。
エラーログ
デフォルトでは、PHPは、error_logの設定がphp.iniファイルに設定されている方法に応じて、サーバのロギングシステムまたはファイルにエラーログを送信します。 使用してerror_log()関数を指定したファイルまたはリモートの宛先にエラーログを送信することができます。
電子メールで自分自身にエラーメッセージを送信すると、特定のエラーの通知を取得する良い方法することができます。
Eメールでエラーメッセージを送信
特定のエラーが発生した場合の例では、以下の我々は、エラーメッセージを表示して電子メールを送信し、スクリプトを終了します。
<?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);
}
?>
上記のコードの出力は次のようなものでなければなりません。
Error: [512] Value must be 1 or below
Webmaster has been notified
そして、上記のコードから受信したメールは、次のようになります。
Error: [512] Value must be 1 or below
これは、すべてのエラーで使用すべきではありません。 定期的なエラーは、デフォルトのPHPのロギングシステムを使用してサーバーにログオンする必要があります。