目次
PHP のエラー処理メカニズム
基礎知識
すべての PHP エラータイプの定数を定義します各定数は整数値です、その機能は、上記の値 (数値または記号) を使用してバイナリ ビット マスクを作成し、報告されるエラー メッセージを定式化することです。ビット単位の演算子を使用して、これらの値を組み合わせたり、特定の種類のエラーをマスクしたりできます。 php.ini では、「|」、「~」、「!」、「^」、「&」のみが正しく解析されることに注意してください。
运行时配置
错误处理函数
终止脚本执行的错误如何处理
概要
学習教材

PHP エラー処理の問題

Mar 26, 2017 am 09:18 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles