PHPエラー処理

PHP エラー処理


PHP のデフォルトのエラー処理は単純です。ファイル名、行番号、およびエラーを説明するメッセージを含むエラー メッセージがブラウザに送信されます。


PHP エラー処理

エラー処理は、スクリプトや Web アプリケーションを作成する際の重要な部分です。コードにエラー検出コーディングが欠けていると、プログラムは専門的ではないように見え、セキュリティ リスクへの扉が開かれてしまいます。

このチュートリアルでは、PHP の最も重要なエラー検出方法のいくつかについて説明します。

さまざまなエラー処理方法について説明します:

bing - - - - - - - - - - - - - - - - - - - - - - die()die()関数への単純な「die() "ステートメント

最初の例はテキスト ファイルを開くための簡単なスクリプト:

<?php
$file=fopen("welcome.txt","r");
?>

ファイルが存在しない場合、次のようなエラーが表示されます:

警告: fopen(welcome.txt) [function.fopen ]: ストリームを開けませんでした:

いいえ/www/test/test/test.php の 2 行目のファイルまたはディレクトリ

ユーザーが上記のようなエラー メッセージを受け取るのを避けるために、ファイルにアクセスする前にファイルが存在するかどうかを確認します :

<?php
if(!file_exists("welcome.txt"))
{
         die("文件不存在");
}
else
{
         $file=fopen("welcome.txt","r");
}
?>

さて、ファイルが存在しない場合は、存在すると、次のようなエラー メッセージが表示されます:

ファイルが存在しません

上記のコードは、単純なエラー処理を使用しているため、前のコードよりも効率的です。このメカニズムはエラー後にスクリプトを終了します。

ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関数を調べてみましょう。

カスタム エラー ハンドラーの作成

カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関数を作成しただけです。

関数は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できなければなりませんが、最大 5 つのパラメータ (オプション: ファイル、行番号、エラー コンテキスト) を受け入れることができます:

Syntax

error_function(error_level , error_message,

error_file,error_line,error_context)


エラー報告レベル

QQ截图20161009093539.png

これらのエラー報告レベルは、ユーザー定義のエラー ハンドラーによって処理されるさまざまな種類のエラーです。



さて、エラーを処理する関数を作成しましょう: QQ截图20161009093559.png

<?php
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr<br>";
         echo "脚本结束";
         die();
}
?>

上記のコードは単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。

エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。


エラーハンドラーを設定する

PHPのデフォルトのエラーハンドラーは、組み込みエラーハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。

エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:

set_error_handler("customError");

カスタム関数ですべてのエラーを処理したいため、set_error_handler() のみが必要です。パラメータは 1 つだけです。 2 番目のパラメータを追加してエラー レベルを指定できます。

存在しない変数を出力してこのエラー ハンドラーをテストします:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr";
}
 // 设置错误处理函数
set_error_handler("customError");
 // 触发错误
echo($test);
?>

上記のコードの出力は次のようになります:

エラー: [8] 未定義の変数: test

はエラーをトリガーします

スクリプト内 ユーザーがデータを入力する場合、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクはtrigger_error() 関数によって実行されます。

この例では、「test」変数が「1」より大きい場合、エラーが発生します:

<?php
$test=2;
if ($test>1)
{
         trigger_error("变量值必须小于等于 1");
}
?>

上記のコードの出力は次のとおりです:

注意: 変数値はそれより小さい必要があります。 1

in / www/test/text.php の 5 行目以上

2 番目のパラメーターを追加することで、トリガーされるエラー レベルを指定できます。

考えられるエラーの種類:

· E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。

· E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。

· E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。

この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:

<?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);
}
?>

上記のコードの出力は次のようになります:

エラー: [512] 変数値は 1 以下である必要があります

Endスクリプトの説明

さて、独自のエラーを作成する方法と、それらをトリガーする方法を学習しました。次に、エラー レコードを学習しましょう。

エラーログ

デフォルトでは、php.ini の error_log 設定に従って、PHP はエラーレコードをサーバーのログシステムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。

エラー メッセージを自分に電子メールで送信することは、特定のエラーの通知を受け取るための優れた方法です。

電子メールでエラー メッセージを送信する

以下の例では、特定のエラーが発生した場合、エラー メッセージを含む電子メールを送信し、スクリプトを終了します:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr<br>";
         echo "已通知网站管理员";
         error_log("Error: [$errno] $errstr",1,
         "123123@qq.com","From: 123123@qq.com");
}
 // 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);
 // 触发错误
$test=2;
if ($test>1)
{
         trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

上記のコードの出力は次のようになります:

エラー: [512] 変数値は 1 以下である必要があります

Web サイト管理者に通知されました

上記のコードから受信した電子メールは次のとおりです:

エラー: [512] 変数値は 1 以下である必要があります1 以下であること

この方法は適していません。すべて間違いです。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。


学び続ける
||
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜