ホームページ  >  記事  >  バックエンド開発  >  PHP エラー処理の問題

PHP エラー処理の問題

迷茫
迷茫オリジナル
2017-03-26 09:18:141429ブラウズ

PHP のエラー処理メカニズム

php のエラー処理は比較的複雑です。この記事では、PHP のエラー メカニズムを理解しやすくするために、PHP のエラーに関連する重要な知識ポイントをすべて説明します。

基礎知識

その前に、まず次のことを理解してください。 PHP エラーの基本

  • 事前定義された定数

  • 実行時設定

  • 例外

  • エラー処理関数

すべての PHP エラータイプの定数を定義します各定数は整数値です、その機能は、上記の値 (数値または記号) を使用してバイナリ ビット マスクを作成し、報告されるエラー メッセージを定式化することです。ビット単位の演算子を使用して、これらの値を組み合わせたり、特定の種類のエラーをマスクしたりできます。 php.ini では、「|」、「~」、「!」、「^」、「&」のみが正しく解析されることに注意してください。

使用法の観点から、これは 3 つのカテゴリに分類できます:

ユーザーによって手動でスローされた

E_USER_NOTICEE_USER_WARNINGE_USER_ERROR、<code>E_USER_DEPRECATED

  1. 原因はユーザーです
    E_NOTICEE_PARSEE_WARNINGE_ERROR、<code>E_COMPILE_ERRORE_COMPILE_WARNINGE_STRICTE_RECOVERABLE_ERRORE_USER_NOTICE, E_USER_WARNING, E_USER_ERROR, E_USER_DEPRECATED

  2. 用户造成的
    E_NOTICE, E_PARSE, E_WARNING, E_ERROR, E_COMPILE_ERROR, E_COMPILE_WARNING, E_STRICT, E_RECOVERABLE_ERROR

  3. php内核造成的
    E_CORE_ERROR, E_CORE_WARNING

从是否终止程序执行的角度看, 可分为两类

  1. 终止程序执行
    程序终止, 进入处理错误流程

  2. 不终止程序执行
    产生错误, 但程序仍可以继续执行, 同样进入错误处理流程

对于PHP中的错误类型, 可以参考这篇更详细的文章--PHP的错误机制总结

运行时配置

手册--运行时配置讲解的很详细, 但有几个配置仍需特别注意

  1. error_reporting
    报告错误的类型, 建议在开发/测试环境配置成E_ALL, 解决所有的类型的错误后, 在生产环境配置E_ALL & E_DEPRECATED, 则表明:报告除废弃错误外的所有错误

  2. display_errors
    是否显示错误, 在生产环境中配置成false, 配合上面error_reporting的设置, 则表明: 报告除废弃错误外的所有错误, 但不显示错误信息.

  3. log_errors
    错误记录是否开启, 生产环境需开启. 配合上面的两项配置, 则表明: 报告除废弃错误外的所有错误, 不显示错误信息, 但记录(只有php自己可以操作错误信息)到日志中.

  4. error_log
    指定错误的文件(syslog是特殊值).默认未被设置, 手册中:

如果该配置没有设置,则错误信息会被发送到 SAPI 错误记录器

一般情况下, 未设置会被记录到apache/nginx的错误日志中. 配合上面三项配置, 则表明: 报告除废弃错误外的所有错误, 不显示错误信息, 但记录到apache/nginx日志中.若配置了文件路径, 则表明: 报告除废弃错误外的所有错误, 不显示错误信息, 但记录到file_dir日志中.

上面这几项配置影响着php错误最基本的表现.当然,这些配置可以通过 ini_set() 在代码中更改 或 php-fpm配置更改

错误处理函数

错误函数并不多, 最应该关注的就是set_error_handlerset_exception_handler, 因为通过它们可以介入错误/异常的处理流程.

上面提到过, 错误发生后, 都会进行错误处理流程, 那错误流程是如何定义的?

先看看php手册中的讲解: Errors

简单来说就是, 默认的处理流程就是通过配置完成, 但我们可以设置自定义的错误处理流程

终止脚本执行的错误如何处理

上文提到过, 错误有两种, 那对于这种会终止脚本执行的错误如何处理?
set_error_handler

PHP が原因kernel

E_CORE_ERRORE_CORE_WARNING

プログラムの実行を終了するかどうかの観点から2つに分類できます


プログラムの終了実行
    プログラムの終了、処理エラーに入る プロセス
  • はプログラムの実行
  • を終了せず、エラーを生成しますが、プログラムは引き続き実行でき、エラー処理プロセスに入ることができます

    🎜エラーの場合PHP の型については、この詳細な記事を参照してください。PHP エラー メカニズムの概要🎜🎜ランタイム設定🎜🎜マニュアル -- ランタイム設定について詳しく説明されていますが、特別な注意が必要な設定がいくつかあります🎜🎜🎜🎜 error_reporting🎜報告されたエラーの種類、提案 開発/テスト環境で E_ALL を構成し、すべての種類のエラーを解決します。運用環境では古いエラーを除くすべてのエラーが報告されます。🎜🎜🎜🎜display_errors🎜 エラーを表示するかどうかは、運用環境で false に設定し、error_reporting の設定と一致させます。上記は、古いエラーを除くすべてのエラーを報告することを意味します。ただし、エラー メッセージは表示されません 🎜🎜🎜🎜log_errors🎜 エラー ログがオンになっているかどうかに関係なく、有効にする必要があります。運用環境 上記の 2 つの構成では、次のことを意味します: 廃止されたエラーを報告する ) 以外のすべてのエラーについては、マニュアルではデフォルトでは設定されていません: 🎜🎜🎜🎜。 この設定が設定されていない場合、エラー メッセージは SAPI エラー ロガーに送信されます🎜🎜🎜 一般 設定されていない場合、上記の 3 つの設定では、Apache/nginx エラー ログに記録されます。 、それは意味します: 廃止されたエラーを除くすべてのエラーを報告します。エラー メッセージは表示しませんが、apache/nginx ログに記録します。 ファイル パスが設定されている場合、それは次のことを意味します: 破棄されたエラーを除くすべてのエラーを報告します。エラー メッセージは表示されませんが、file_dir ログに記録されます。🎜🎜上記の設定は、php エラーの最も基本的なパフォーマンスに影響します。もちろん、これらの設定はコード内で変更できます。 ini_set() または php-fpm 設定の変更🎜🎜エラー処理関数🎜🎜 エラー関数はそれほど多くはありませんが、ほとんどがすべきです。焦点は set_error_handlerset_Exception_handler は、エラー/例外処理プロセスに介入できるためです 🎜🎜🎜 上で述べたように、エラーが発生した後、エラー処理プロセスが実行されますが、では、エラー処理はどのように定義されているのでしょうか?🎜🎜まず PHP マニュアルの説明を見てください: エラー🎜🎜 簡単に言うと<strong>デフォルトの処理プロセスは設定によって完了しますが、 カスタムのエラー処理プロセスを設定することができます</strong>🎜🎜🎜 対処方法スクリプトの実行を終了するエラーが発生しました🎜🎜上記のように、エラーには 2 種類あります。では、スクリプトの実行を終了するエラーにどのように対処すればよいでしょうか?🎜<code>set_error_handler では、この種のエラーを処理できません。この点は簡単です。 🎜🎜この問題は基本的に次のように行われます (他の解決策はまだ見ていません): 🎜rreee🎜Exception🎜🎜 w3cPHP 例外処理によると 説明: 🎜🎜🎜例外処理は通常の処理を変更するために使用されます。指定されたエラー (例外) 状況が発生した場合のスクリプトのフロー。この状況を例外と呼びます。 🎜例外がトリガーされると、通常は次のことが起こります: 🎜🎜🎜🎜現在のコードの状態が保存されます🎜🎜🎜🎜コードの実行が事前定義された例外ハンドラー関数に切り替わります🎜
  • 状況に応じて、プロセッサは保存されたコード状態からコード実行を再開するか、スクリプト実行を終了するか、コードの外の場所からスクリプト実行を継続することがあります

キャッチされない例外によりスクリプト実行が終了し、E- ERROR エラーの場合は、定義された例外処理を実行します。そうでない場合は、PHP のデフォルトのエラー処理プロセスを続行します。つまり、ログに記録します。ただし、プログラミングの概念の観点から、例外とエラーはユーザーが予見できるものである必要があります。

上記のset_exception_handler就是处理异常的, 用法与set_error_handler一致. 在各框架中的异常处理很成熟, 大致都是在set_exception_handler中将Exceptionは、例外処理のユーザー制御の目的を達成するために、ユーザーが使用できる優れたインターフェイスを開きます。

概要

PHP のエラー処理メカニズムは常に無視されますが、エラーのデバッグと監視に大きな役割を果たします。この記事は主に主要な知識ポイントを紹介し、まとめたものです。詳細を確認してください。詳細についてはマニュアルを参照してください。

学習教材

定義済み定数
ランタイム設定
エラー処理関数
PHPエラーメカニズムの概要
例外
エラー
PHP例外処理
Symfonyデバッグ: これは完全なアプリケーションであり、できると言われていますエラー関連の知識ポイントをすべて網羅した包括的なチュートリアルとなるため、ソース コードを読むことをお勧めします。

以上がPHP エラー処理の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。