PHPエラー処理
PHP エラー処理
PHP のデフォルトのエラー処理は単純です。ファイル名、行番號、およびエラーを説明するメッセージを含むエラー メッセージがブラウザに送信されます。
PHP エラー処理
エラー処理は、スクリプトや Web アプリケーションを作成する際の重要な部分です。コードにエラー検出コーディングが欠けていると、プログラムは専門的ではないように見え、セキュリティ リスクへの扉が開かれてしまいます。
このチュートリアルでは、PHP の最も重要なエラー検出方法のいくつかについて説明します。
さまざまなエラー処理方法について説明します:
bing - - - - - - - - - - - - - - - - - - - - - - die()die()関數(shù)への単純な「die() "ステートメント
最初の例はテキスト ファイルを開くための簡単なスクリプト:
<?php $file=fopen("welcome.txt","r"); ?>
ファイルが存在しない場合、次のようなエラーが表示されます:
警告: fopen(welcome.txt) [function.fopen ]: ストリームを開けませんでした:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>さて、ファイルが存在しない場合は、存在すると、次のようなエラー メッセージが表示されます: ファイルが存在しません 上記のコードは、単純なエラー処理を使用しているため、前のコードよりも効率的です。このメカニズムはエラー後にスクリプトを終了します。 ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関數(shù)を調(diào)べてみましょう。
カスタム エラー ハンドラーの作成
カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関數(shù)を作成しただけです。
関數(shù)は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できなければなりませんが、最大 5 つのパラメータ (オプション: ファイル、行番號、エラー コンテキスト) を受け入れることができます:
Syntax
これらのエラー報告レベルは、ユーザー定義のエラー ハンドラーによって処理されるさまざまな種類のエラーです。
さて、エラーを処理する関數(shù)を作成しましょう:
<?php function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "腳本結(jié)束"; die(); } ?>
上記のコードは単純なエラー処理関數(shù)です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。
エラー処理関數(shù)を作成したので、関數(shù)をいつ起動するかを決定する必要があります。
エラーハンドラーを設(shè)定する
PHPのデフォルトのエラーハンドラーは、組み込みエラーハンドラーです。スクリプトの実行時に、上記の関數(shù)をデフォルトのエラー ハンドラーに変換します。
エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:
set_error_handler("customError");
カスタム関數(shù)ですべてのエラーを処理したいため、set_error_handler() のみが必要です。パラメータは 1 つだけです。 2 番目のパラメータを追加してエラー レベルを指定できます。
例
存在しない変數(shù)を出力してこのエラー ハンドラーをテストします:
<?php // 錯誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 設(shè)置錯誤處理函數(shù) set_error_handler("customError"); // 觸發(fā)錯誤 echo($test); ?>
上記のコードの出力は次のようになります:
エラー: [8] 未定義の変數(shù): test
はエラーをトリガーします
スクリプト內(nèi) ユーザーがデータを入力する場合、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクはtrigger_error() 関數(shù)によって実行されます。
例
この例では、「test」変數(shù)が「1」より大きい場合、エラーが発生します:
<?php $test=2; if ($test>1) { trigger_error("變量值必須小于等于 1"); } ?>
上記のコードの出力は次のとおりです:
注意: 変數(shù)値はそれより小さい必要があります。 1
in / www/test/text.php の 5 行目以上
2 番目のパラメーターを追加することで、トリガーされるエラー レベルを指定できます。
考えられるエラーの種類:
· E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復(fù)できません。スクリプトの実行が中斷されました。
· E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中斷されません。
· E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。
例
この例では、「test」変數(shù)が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:
<?php // 錯誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "腳本結(jié)束"; die(); } // 設(shè)置錯誤處理函數(shù) set_error_handler("customError",E_USER_WARNING); // 觸發(fā)錯誤 $test=2; if ($test>1) { trigger_error("變量值必須小于等于 1",E_USER_WARNING); } ?>
上記のコードの出力は次のようになります:
エラー: [512] 変數(shù)値は 1 以下である必要があります
Endスクリプトの説明
さて、獨自のエラーを作成する方法と、それらをトリガーする方法を?qū)W習(xí)しました。次に、エラー レコードを?qū)W習(xí)しましょう。
エラーログ
デフォルトでは、php.ini の error_log 設(shè)定に従って、PHP はエラーレコードをサーバーのログシステムまたはファイルに送信します。 error_log() 関數(shù)を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。
エラー メッセージを自分に電子メールで送信することは、特定のエラーの通知を受け取るための優(yōu)れた方法です。
電子メールでエラー メッセージを送信する
以下の例では、特定のエラーが発生した場合、エラー メッセージを含む電子メールを送信し、スクリプトを終了します:
<?php // 錯誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知網(wǎng)站管理員"; error_log("Error: [$errno] $errstr",1, "123123@qq.com","From: 123123@qq.com"); } // 設(shè)置錯誤處理函數(shù) set_error_handler("customError",E_USER_WARNING); // 觸發(fā)錯誤 $test=2; if ($test>1) { trigger_error("變量值必須小于等于 1",E_USER_WARNING); } ?>
上記のコードの出力は次のようになります:
エラー: [512] 変數(shù)値は 1 以下である必要があります
Web サイト管理者に通知されました
上記のコードから受信した電子メールは次のとおりです:
エラー: [512] 変數(shù)値は 1 以下である必要があります1 以下であること
この方法は適していません。すべて間違いです。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。