[php]PHP エラー処理

WBOY
リリース: 2016-06-23 14:35:36
オリジナル
861 人が閲覧しました

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

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

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

エラーとエラートリガーエラーレポートをカスタマイズする簡単な「die()」ステートメント

基本的なエラー処理: die() 関数の使用

最初の例は、開くための簡単なスクリプトを示していますテキスト ファイル:

$file=fopen("welcome.txt","r");

?>

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

警告: fopen(welcome.txt) [function.fopen]: ストリームを開くのに失敗しました:

C:webfoldertest.php の 2 行目にそのようなファイルまたはディレクトリはありません

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

if(!file_exists("welcome.txt")) {

die("File not found");

} else {

$file=fopen("welcome.txt","r");

} ?>

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

ファイルが見つかりません

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

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

カスタム エラー ハンドラーを作成する

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

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

Syntax

error_function(error_level , error_message,

error_file,error_line,error_context)

パラメータ

説明

error_level

必須。ユーザー定義エラーのエラー報告レベルを指定します。値である必要があります。

以下の表を参照してください: エラー報告レベル。

error_message

必須。ユーザー定義エラーのエラー メッセージを指定します。

error_file

オプション。エラーが発生したファイルの名前を指定します。

error_line

オプション。エラーが発生した行番号を指定します。

error_context

オプション。エラーが発生したときに使用されていた各変数とその値を含む配列を指定します。

エラー レポート レベル

これらのエラー レポート レベルは、エラー ハンドラーが処理するように設計されているさまざまなタイプのエラーです:説明

スクリプト検出エラーが発生する可能性がありますが、スクリプトが正常に実行されているときに発生することもあります。 (PHP 6.0 では、E_STRICT は E_ALL の一部です)

2

E_WARNING

致命的ではない実行時エラー。スクリプトの実行を一時停止しないでください。

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

レベル E_STRICT を除くすべてのエラーと警告。

それでは、エラーを処理する関数を作成しましょう:

function CustomError($errno, $errstr) {

echo "Error: [$errno] $errstr

echo "スクリプトの終了"; die(); }

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

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

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

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

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

set_error_handler("customError");

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

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

//error handler function

function customError($errno, $errstr) {

echo "Error: [$errno] $errstr";

}

// エラー ハンドラーを設定します

set_error_handler("customError");

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

echo($ test);

?>

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

カスタム エラー: [8] 未定義変数: test

トリガー エラー

ユーザーがデータを入力するスクリプト内で、ユーザーの入力が無効です。エラーを引き起こす場合に役立ちます。 PHP では、このタスクはtrigger_error() によって実行されます。

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

$test=2;

if ($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 が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します。

//error handler function

function customError($errno, $errstr) {

echo " < b>エラー: [$errno] $errstr
";

echo "スクリプトの終了"; die(); }

//エラー ハンドラーを設定します

set_error_handler("customError ", E_USER_WARNING);

//trigger error

$test=2; if ($test>1) {

trigger_error("値は 1 以下である必要があります",E_USER_WARNING);

} ?>

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

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

スクリプトの終了

独自のエラーを作成する方法と、それらを罰する方法を学習したところで、エラー ログについて学習しましょう。 。

エラーログ

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

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

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

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

// エラー ハンドラーfunction

function CustomError($errno, $errstr) {

echo "エラー: [$errno] $errstr
";

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

} ?>

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

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

ウェブマスターに通知されました

上記のコードから受信した電子メールは次のようになります。これに:

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート