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 /www/php/test/test.php on line 2
ユーザーが上記のようなエラーを表示しないようにするにはメッセージにアクセスする前に、ファイルが存在するかどうかをチェックしています:
<?php
if(!file_exists("welcome.txt"))
{
die("文件不存在");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
ファイルが存在しない場合は、次のようなエラー メッセージが表示されます:
以前と比較上記のコードは、エラー後にスクリプトを終了する単純なエラー処理メカニズムを使用しているため、より効率的です。
ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関数を調べてみましょう。
カスタム エラー ハンドラーの作成
カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関数を作成しただけです。
関数は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できる必要がありますが、最大 5 つのパラメータ (オプション: ファイル、行番号、エラー コンテキスト) を受け入れることができます。
error_level | 必須。ユーザー定義エラーのエラー報告レベルを指定します。数値である必要があります。以下の表を参照してください: エラー報告レベル。 |
error_message | 必須。ユーザー定義エラーのエラー メッセージを指定します。 |
error_file | オプション。エラーが発生したファイル名を指定します。 |
error_line | オプション。エラーが発生した行番号を指定します。 |
error_context | オプション。エラーが発生したときに使用されていた各変数とその値を含む配列を指定します。 |
エラー レポート レベル
これらのエラー レポート レベルは、ユーザー定義のエラー ハンドラーによって処理されるさまざまなタイプのエラーです。 -時間エラー。スクリプトの実行を一時停止しないでください。
8 | E_NOTICE | 実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。 |
256 | E_USER_ERROR | 致命的なユーザー生成エラー。これは、プログラマが PHP 関数trigger_error()を使用して設定する E_ERROR に似ています。 |
512 | E_USER_WARNING | 致命的ではないユーザー生成の警告。これは、プログラマが PHP 関数 trigger_error() を使用して設定する E_WARNING に似ています。 |
1024 | E_USER_NOTICE | ユーザーが生成した通知。これは、プログラマが PHP 関数trigger_error() を使用して設定する E_NOTICE に似ています。 |
4096 | E_RECOVERABLE_ERROR | キャッチ可能な致命的なエラー。 E_ERROR と似ていますが、ユーザー定義のハンドラーによってキャッチされる可能性があります。 (set_error_handler() を参照) |
8191 | E_ALL | すべてのエラーと警告。 (PHP 5.4 では、E_STRICT は E_ALL の一部になります) |
それでは、エラーを処理する関数を作成しましょう:
error_function(error_level,error_message,
error_file,error_line,error_context)
上記のコードは、単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。
エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。
エラー ハンドラーを設定する
PHP のデフォルトのエラー ハンドラーは、組み込みのエラー ハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。
エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用する予定です:
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "脚本结束";
die();
}
カスタム関数ですべてのエラーを処理するようにしたいため、set_error_handler() には 1 つの引数のみが必要で、2 番目の引数を指定するパラメーターを追加できます。エラーレベル。
例
存在しない変数を出力してこのエラー ハンドラーをテストします:
set_error_handler("customError");
は、ユーザーの入力時にユーザーがデータを入力するスクリプトでエラー
をトリガーします。は無効です。これは、エラーが発生する場合に役立ちます。 PHP では、このタスクはtrigger_error() 関数によって実行されます。
例
この例では、「test」変数が「1」より大きい場合、エラーが発生します:
<?php// 错误处理函数function customError($errno, $errstr){echo "<b>Error:</b> [$errno] $errstr";}// 设置错误处理函数set_error_handler("customError");// 触发错误echo($test);?>
以上代码的输出如下所示:
Error: [8] Undefined variable: test
上記のコードの出力は次のようになります:
<?php
$test=2;
if ($test>1)
{
trigger_error("变量值必须小于等于 1");
}
?>
をトリガーできます。スクリプト内の任意の場所にエラーを追加します。2 番目のパラメーターを追加することで、トリガーされるエラー レベルを指定できます。
考えられるエラーの種類:
E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。
E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。
E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。
例
この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:
Notice: 变量值必须小于等于 1
in /www/test/php.php on line 5
上記のコードの出力は次のようになります:
<?php
// 错误处理函数
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "脚本结束";
die();
}
// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);
// 触发错误
$test=2;
if ($test>1)
{
trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>
ここで、独自のエラーを作成する方法とその方法を学びました。それらをトリガーとして、次にエラーログを見てみましょう。
エラーログ
デフォルトでは、PHP は、php.ini の error_log 設定に従って、エラーレコードをサーバーのログシステムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。
電子メールでエラー メッセージを自分に送信することは、特定のエラーの通知を受け取るための優れた方法です。
電子メールでエラー メッセージを送信する
以下の例では、特定のエラーが発生した場合、エラー メッセージを含む電子メールを送信し、スクリプトを終了します:
Error: [512] 变量值必须小于等于 1
脚本结束
上記のコードの出力は次のようになります。 :
<?php
// 错误处理函数
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "已通知网站管理员";
error_log("Error: [$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);
}
?>
この方法はすべてのエラーに適しているわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。
|