このチュートリアルでは、PHP の最も重要なエラー検出方法のいくつかについて説明します。
さまざまなエラー処理方法について説明します:
単純な「die()」ステートメント
カスタムエラーとエラートリガー
エラーレポート
基本的なエラー処理: die() 関数の使用
最初の例 開くための簡単なスクリプトを示しますテキスト ファイル:
コードをコピーします。 コードは次のとおりです:
$file=fopen("welcome.txt","r");
ファイルが存在しない場合は、次のようなエラーが発生します:
警告: fopen(welcome.txt) [function.fopen]: ストリームを開けませんでした:
C:webfoldertest.php の 2 行目にそのようなファイルまたはディレクトリがありません ユーザーが次のようなエラーを受け取るのを避けるため上記のエラー メッセージが表示された場合は、アクセスする前にファイルが存在するかどうかを確認します。
コードをコピーします。 コードは次のとおりです。
if(!file_exists("welcome.txt"))
{
die("ファイルがありませんfound");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
ここで、ファイルが存在しない場合は、エラー メッセージが表示されます次のように:
ファイルが見つかりません 上記のコードは、単純なエラー処理メカニズムを使用してエラー後にスクリプトを終了するため、前のコードよりも効率的です。
ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関数を調べてみましょう。
カスタム エラー ハンドラーを作成する
カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関数を作成しただけです。
関数は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できる必要がありますが、最大 5 つのパラメータ (オプション: ファイル、行番号、エラー コンテキスト) を受け入れることができます。
構文
error_function(error_level, error_message) 、
error_file,error_line,error_context)
それでは、エラーを処理する関数を作成しましょう:
コードをコピーします。 コードは次のとおりです:
function CustomError($errno, $errstr)
{
echo "Error: [$errno] $errstr< ;br />";
echo "スクリプトの終了";
die();
}
上記のコードは、単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。
エラー処理関数を作成したので、関数をいつトリガーするかを決定する必要があります。
エラー ハンドラーを設定する
PHP のデフォルトのエラー ハンドラーは、組み込みのエラー ハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。
エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:
set_error_handler("customError"); カスタム関数ですべてのエラーを処理する必要があるため、set_error_handler() パラメータは 1 つだけ必要です。 2 番目のパラメータを追加してエラー レベルを指定します。
例
存在しない変数を出力してこのエラー ハンドラーをテストします:
コードをコピー コードは次のとおりです:
//エラー ハンドラー関数
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr"
}
//エラー ハンドラーを設定
set_error_handler("customError")
// エラーをトリガー
echo($ test);
?>
上記のコードの出力は次のようになります:
エラー: [8] 未定義の変数: テストがエラーをトリガーします
ユーザーがデータを入力したときにエラーをトリガーすると便利です。ユーザーの入力が無効な場合のスクリプト。 PHP では、このタスクはtrigger_error() によって実行されます。
例
この例では、「test」変数が「1」より大きい場合、エラーが発生します。
コードをコピーします。 コードは次のとおりです。
$test=2; $test>1)
{
trigger_error("値は 1 以下である必要があります");
}
?>
上記のコードの出力は次のようになります。
注意: 値は 1 以下である必要があります。
C:webfoldertest.php の 6 行目 スクリプト内のどこでもエラーをトリガーでき、2 番目のパラメーターを追加することで、トリガーされるエラー レベルを指定できます。
考えられるエラーの種類:
E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。
E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。
E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトは、スクリプトが正常に実行されているときに発生した可能性のあるエラーを検出しました。
例
この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:
コードをコピー コードは次のとおりです:
//エラー ハンドラー関数
function customError($errno, $errstr)
{
echo "エラー: [$errno] $errstr
";
echo "スクリプトの終了"
}
//エラーハンドラーを設定します
set_error_handler(" customError",E_USER_WARNING);
//トリガーエラー
$test=2;
if ($test>1)
{
trigger_error("値は 1 以下である必要があります",E_USER_WARNING);
}
?>
上記のコードの出力は次のようになります:
エラー: [512] 値は 1 以下でなければなりません
終了スクリプト 独自のエラーを作成する方法とそれらを罰する方法を学習したので、エラー ログについて学習しましょう。
エラーログ
デフォルトでは、php.ini の error_log 設定に従って、PHP はエラーレコードをサーバーのエラーログシステムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。
電子メールでエラー メッセージを自分に送信することは、特定のエラーの通知を受け取るための優れた方法です。
電子メールでエラー メッセージを送信する
以下の例では、特定のエラーが発生した場合、エラー メッセージを含む電子メールを送信し、スクリプトを終了します:
コードをコピーする コードは次のとおりです:
/ /エラーハンドラー関数
function CustomError($errno, $errstr)
{
echo "エラー: [$errno] $errstr
";
echo "ウェブマスターに通知されました"
error_log("エラー: [$errno] $errstr"; ,1,
"someone@example.com","From: webmaster@example.com");
//エラーハンドラーを設定する
set_error_handler("customError",E_USER_WARNING);
//エラーをトリガーする
$test =2;
if ($test>1)
{
trigger_error("値は 1 以下である必要があります",E_USER_WARNING);
}
?> 上記のコードの出力は次のようになります。エラー: [512] 値は 1 以下でなければなりません
ウェブマスターに通知されました 上記のコードから受け取った電子メールは次のようなものです:
エラー: [512] 値は 1 以下でなければなりません この方法は、すべてのエラーに適しているわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。
エラーバックトレース
定義と使用法
PHP debug_backtrace() 関数はバックトレースを生成します。
この関数は連想配列を返します。返される可能性のある要素は次のとおりです。
構文
コードのコピー コードは次のとおりです。 function one($str1, $str2)
{
two( "グレン", "泥沼");
}
関数 2($str1, $str2)
{
three("クリーブランド", "ブラウン")
}
関数 3($str1, $str2)
{ print_r(debug_backtrace()) ;
}
one("ピーター", "グリフィン");
出力:
配列
(
[0] => 配列
(
[ファイル] = > C:webfoldertest.php
[行] => 7
[関数] => 3 つの
[引数] => ] => C:webfoldertest.php
[行] => 3
[関数] => 2
[1] =>
)
[ファイル] => ; C:webfoldertest.php
[行] => 14
[関数] = > 1
[引数] => 配列
(
[0] => ピーター
[1] => グリフィン
)
)
)