ホームページ >バックエンド開発 >PHPチュートリアル >PHP エラーと例外処理の概要_PHP チュートリアル

PHP エラーと例外処理の概要_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:37:12862ブラウズ

通过日志记录功能,你可以将信息直接发送到其他日志服务器,或者发送到指定的电子邮箱(或者通过邮件网关发送),或者发送到操作系统日志等,从而可以有选择的记录和监视你的应用程序和网站的最重要的部分。
错误报告功能允许你自定义错误反馈的级别和类型,可以是简单的提示信息或者使用自定义的函数进行处理并返回信息.

为什么要使用错误处理?
1.是网站出错时对用户友好
2.更好的避免错误、调试、修复错误
3.避免一些安全风险
4.更好保证程序的健壮性
5.……
一、最简单的错误处理――die()
当我们预计有错误发生时,停止脚步的运行。比如连接数据库时:

复制代码 代码如下:

mysql_connect('localhost', 'root', '123456') or die ('连接数据库错误:'. mysql_error());

不过,简单地终止脚本并不总是恰当的方式。
二、自定义错误和错误触发器
我们创建一个错误处理专用函数,使用set_error_handler函数设置后,可以在 PHP 中发生错误时调用该函数。

1.定义错误处理函数的参数:

参数 描述
error_level 必需。为用户定义的错误规定错误报告级别。必须是一个值数。

     参见下面的表格:错误报告级别。

error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

2. 基本的な定義済み定数のエラー:
価値 定数 手順 備考
1 E_ERROR (整数) 致命的なランタイムエラー。このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトが終了し、実行が続行されなくなります。
2 E_WARNING (整数) 実行時警告 (致命的ではないエラー)。プロンプト メッセージのみが表示されますが、スクリプトは終了しません。
4 E_PARSE (整数) コンパイル時の構文解析エラー。解析エラーはパーサーによってのみ生成されます。
8 E_NOTICE (整数) 実行時通知。スクリプトでエラーとして表示される可能性のある状況が発生したことを示しますが、正常に実行できるスクリプトにも同様の通知が表示される可能性があります。
16 E_CORE_ERROR (整数) PHPの初期化起動中に致命的なエラーが発生しました。このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 PHP 4以降
32 E_CORE_WARNING(整数) PHP の初期化起動中に警告 (致命的ではないエラー) が発生しました。 E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 PHP 4以降
64 E_COMPILE_ERROR(整数) 致命的なコンパイル時エラー。 E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4以降
128 E_COMPILE_WARNING(整数) コンパイル時間の警告 (致命的ではないエラー)。 E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4以降
256 E_USER_ERROR (整数) ユーザーが生成したエラーメッセージ。 E_ERROR に似ていますが、コード内で PHP 関数trigger_error() を使用するユーザーによって生成されます。 PHP 4以降
512 E_USER_WARNING(整数) ユーザーが生成した警告メッセージ。 E_WARNINGと似ていますが、コード内でPHP関数trigger_error()を使用するユーザーによって生成されます。 PHP 4以降
1024 E_USER_NOTICE(整数) ユーザーによって生成された通知メッセージ。 E_NOTICEと似ていますが、コード内でPHP関数trigger_error()を使用してユーザーによって生成されます。 PHP 4以降
2048 E_STRICT (整数) コードの最高の相互運用性と上位互換性を確保するために、PHP のコード変更の提案を有効にします。 since PHP 5
4096 E_RECOVERABLE_ERROR(integer) 可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。 since PHP 5.2.0
8192 E_DEPRECATED (integer) 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 since PHP 5.3.0
16384 E_USER_DEPRECATED(integer) 用户产少的警告信息。 类似E_DEPRECATED, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 5.3.0
30719 E_ALL (integer) E_STRICT出外的所有错误和警告信息。 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously

(レベル E_ERROR および E_USER_ERROR はカスタム エラー処理関数では捕捉できません) 致命的なランタイム エラーが発生するとスクリプトはただちに実行を停止するため、致命的なエラー メッセージはカスタム エラー関数では捕捉できません。

3. エラーのトリガー
ユーザーがデータを入力するスクリプトで、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクはtrigger_error() によって実行されます。
スクリプト内のどこでもエラーをトリガーできます。2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。

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

1).E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。
2) .E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。
3).E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトは、スクリプトが正常に実行されているときに発生した可能性のあるエラーを検出しました。
例:

コードをコピーします コードは次のとおりです:

trigger_error("何か問題が発生しました", E_USER_WARNING);
//出力警告:xxxx エラー メッセージで問題が発生しました

3. エラー報告
デフォルトでは、php.ini の error_log 設定に従って、PHP はエラー記録をサーバーのエラー記録システムまたはファイルに送信します。
error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。たとえば、エラー メッセージを電子メールに送信することは良い方法です。
エラー処理に関するドキュメントの詳細については、http://www.php.net/manual/zh/book.errorfunc.php を参照してください。

4. 例外処理 例外がスローされると、後続のコードは実行を続行せず、PHP は一致する「キャッチ」コード ブロックを見つけようとします。
例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場合は、重大なエラー (致命的なエラー) が発生し、「Uncaught Exception」(キャッチされない例外) のエラー メッセージが出力されます。
1. 処理手順には次のものが含まれます。
1.) try - 例外を使用する関数は、「try」ブロック内に置く必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。

2.) throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります

3.) catch - 「キャッチ」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します

2。例外を再スローします
2。
例外がスローされたときに、標準の方法とは異なる方法で例外を処理したい場合があります。例外は「catch」ブロックで再度スローできます。

スクリプトはシステムエラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーにとって使いやすいように、わかりやすいメッセージを付けて例外を再度スローできます。


3. 異常なルール

1). 例外処理を必要とするコードは、潜在的な例外をキャッチするために try コード ブロック内に配置する必要があります。

2). 各 try または throw コード ブロックには、対応する catch コード ブロックが少なくとも 1 つ必要です。

3). 複数の catch コード ブロックを使用して、さまざまな種類の例外をキャッチします。
4).try コード ブロック内の catch コード ブロックで例外を再スローできます。

つまり、例外がスローされた場合は、それをキャッチする必要があります。

http://www.bkjia.com/PHPjc/736790.html

tru​​ehttp://www.bkjia.com/PHPjc/736790.html技術記事ログ機能を使用すると、他のログ サーバー、指定した電子メール アドレス (またはメール ゲートウェイ経由)、またはオペレーティング システムに情報を直接送信できます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。