目次
キーテイクアウト
カスタムエラーハンドラーの作成
処理エラー
カスタム例外ハンドラーの作成
例外の再投与
excaught例外ハンドラー
要約
PHPはデフォルトでエラーをどのように処理しますか?
PHPのさまざまなタイプのエラーは何ですか?
PHPの例外は何ですか?

phpmaster | PHPでのエラー処理

Mar 02, 2025 am 08:31 AM

phpmaster | PHPでのエラー処理

エラーは、プログラミング時に開発者が直面する最も一般的なイベントです。エラーは、構文、実行時間、または論理に分類できます。ステートメントの最後にセミコロンを欠いていることは、構文エラーの例です。サーバーがダウンしているときにデータベースに接続しようとすることは、実行時エラーの例です。変数に誤ったデータを提供することは、ロジックエラーの例です。コードのエラーの数を減らし、効果を軽減するために、Webアプリケーションでは適切なエラー処理が不可欠です。 この記事は、PHPエラー処理のクラッシュコースです。 PHPの組み込みエラーレポートレベル、およびカスタムエラーハンドラーと例外処理を備えたエラーを処理する方法について学びます。

キーテイクアウト

  • PHPエラー処理は、Webアプリケーションの整合性と機能を維持するために重要です。スクリプトの実行中に発生する可能性のある問題を特定して修正し、エラーが発生したときに表示されるものを制御することでユーザーエクスペリエンスを改善するのに役立ちます。
  • PHPは、ログや表示など、エラー処理用のいくつかの組み込み関数を提供します。また、エラーハンドラーを登録して例外を使用して、エラー処理戦略をカスタマイズする柔軟性を提供します。 PHPでのカスタムエラー処理は、set_error_handler()およびset_exception_handler()関数を使用して達成できます。これにより、開発者はカスタムエラー処理ルールと例外を定義できます。これは、ログのログエラーやエラー通知の送信に役立ちます。 PHPの例外は、スクリプトの実行中に発生するイベントであり、命令の通常の流れを妨害します。 Try、Catch、および最後にブロックすることを使用して処理できます。例外がスローされたときにキャッチブロックが見つからない場合、PHPは致命的なエラーを表示し、スクリプトの実行を停止します。
  • PHPエラー報告レベル
  • すべてのエラーと警告を記録する必要があります。エラーの重大度に基づいて、通知は他のシステム/チームに送信する必要があります。その重大度をより良く測定できるように、PHPはエラーの性質を記述するためにいくつかの組み込みのエラーレベルを提供します。各レベルは、整数値で表され、プログラマが使用できる名前の名前が付いています。以下の表は、公式のPHPドキュメントから撮影されており、さまざまなレベルの一部を示しています。
  • レベルは、ビットオペレーターと一緒にマスクして、PHPの構成からそれらを含めるか、減算することができます。たとえば、E_ALL | E_STRICTを有効にして、E_STRICT(5.4より前のPHPのバージョンで必要)を追加して、すべてのエラーと警告を有効にします。 PHPは、ログと表示エラーの表示に関連するいくつかの構成ディレクティブを提供します。それらの価値は、一般に、システムが開発環境にあるのか、生産環境にあるのかによって異なります。この表は、エラー関連の指示の一部を示しています。

構成ディレクティブは、php.iniで、Webサーバー構成ファイル(httpd.confまたは.htaccessファイル)で、またはini_set()関数を使用してスクリプトで実行時に設定できます。ディレクティブの詳細とそれらを設定する方法/場所については、ドキュメントをお読みください。

カスタムエラーハンドラーの作成

また、エンドユーザーに生のエラーを表示しないことも良い習慣です。表示されるエラーは、フレンドリーなカスタムエラーメッセージで抽象化する必要があります。 PHPは、エラーの表示と表示のための組み込み関数を提供するだけでなく、それらを上げるためにも提供します。 trigger_error()を使用して、特定のレベルのエラーを実用的にトリガーできます。たとえば、このコードは、$テストの値が1を超える場合、e_user_notice警告をトリガーします。
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span>    <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Trigger_Error()を使用したエラーのトリガーは、エラー処理インフラストラクチャを配置している場合に役立ち、PHPによって提起されたエラーと警告の両方の処理を統合できます。 重大度に基づいてデータベースに電子メールを送信したり、ロギングエラーをデータベースにロギングしたりするなどのカスタマイズされたエラー処理戦略を実装する場合は、set_error_handler()を使用してカスタムエラーハンドラーを定義する必要があります。この関数は、エラーが発生したときに呼び出されるコールバック関数または静的メソッド、およびオプションでエラーレベルは関数/メソッドを処理する2つの引数を受け入れます。コールバックの署名は次のとおりです。
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

phpmaster | PHPでのエラー処理

カスタムエラーハンドラー関数を見てみましょう。以下の例は、データベーステーブルデータベースに遭遇するたびにエラーを記録します。
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span>    <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
上記のスニペットは、次のことを行うエラーハンドラーを登録します。脂肪性のないエラーが発生すると、エラーを表示してファイルにログする代わりに、レコードがデータベースに挿入されます。致命的なエラーが発生すると、データベースに記録され、スクリプトを終了します。 ただし、カスタムエラーハンドラーには注意が必要です。エラーハンドラーは、PHPの標準エラー処理動作をバイパスするため、ハンドラー自体内で発生する可能性のあるエラーを処理できません。たとえば、データベースサーバーがダウンしている場合、上記の関数はログの記録に失敗します。また、エラーハンドラーは、e_core_errorやe_compile_errorなどの特定の内部エラーをキャッチできません。同じファイルのe_strictエラーは、ハンドラーが登録される前にそれらのエラーが発生するため、ハンドラーが定義されています。 例外を使用した

処理エラー

どんなにエラー処理フレームワークがありますが、実行時には常に問題が発生します。もちろん、これらのエラーがユーザーのブラウザに表示されたくありません。これは、例外処理が画像に入る場所です。例外を使用すると、エラーや例外的な状況を優雅に処理できます。 例外は、クラスのExcpetion(またはそのサブクラスのいずれか)によってPHPで表されます。それらはスローを使用して育てることができ、トライ/キャッチブロックを使用してキャッチすることができます。例外を拡張して、特定のエラーをトラップするためのカスタム例外タイプを作成できます。 例外をトリガーする可能性のあるコードはTryブロック内に配置され、例外を処理するコードはCatchブロック内に配置されます。次のスニペットを検討してください。
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
架空のgetDataFromservice()メソッドによって例外がスローされると、キャッチブロックに巻き込まれ、メッセージが表示されます。 getDataFromservice()が正常に実行されると、フローはキャッチブロックを通過し、スクリプトの残りの部分を継続します。スローされて捕獲されていない例外は、「無作法な例外」というメッセージとともにe_fatalエラーを生成します。 例外クラスは、下の表に示すように、問題の原因に関する情報にアクセスするための6つの異なる方法を提供します。

phpmaster | PHPでのエラー処理

カスタム例外ハンドラーの作成

PHPでは、それが例外であるかのようにすべてのオブジェクトを投げることができますが、経験則として、例外はPHPの組み込み例外クラスを拡張する必要があります。オブジェクトのタイプに基づいて、例外を異なる方法で処理できます。カスタム例外処理は、ファイルでエラーメッセージを記録するなどの適切なアクションを実行し、呼び出しスタックなどを調べてエラーが発生した行の正確な詳細を提供します。この例をご覧ください。
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span>    <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
上のコードは、2つの新しいカスタム例外タイプ、nameExceptionを定義しています また、電子メールエクセプト。これは、異なるエラーを示すために使用できます。次に、Tryブロック内で、CODEは変数$ nameと$ emailに値が提供されているかどうかを確認します。どちらかが空の場合、適切な例外がスローを使用してスローされます。対応するキャッチブロックが実行され、エラーが処理されます。

例外の再投与

トライ/キャッチブロックをネストできます。例外をキャッチし、そのプロパティの一部を見て、それを再度投げて、親がそれを処理するようにしたい場合があります。これは、多くの場合、エラーの状態を確認し、致命的かどうかを判断するのに役立ちます。この例コードは、例外の再投与を示しています。
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

excaught例外ハンドラー

set_error_handler()を使用すると、実行時間エラーを処理する関数を指定できる方法と同様に、set_exception_handler()関数は、キャッチブロックにキャッチされずにコールスタックを完全に上げる例外を処理できます。たとえば、例外がスタックをすべて上に上げた場合、ログファイルにログインすることをお勧めします。以下の例に示すように、コールバック関数を作成し、set_exception_handler()に登録できます。
<span><span><?php
</span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) {
</span></span><span>    <span>static $db;
</span></span><span>    <span>if (empty($db)) {
</span></span><span>        <span>$db = new PDO(DSN, DBUSER, DBPASS);
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())";
</span></span><span>    <span>$stmt = $db->prepare($query);
</span></span><span>
</span><span>    <span>switch ($errno) {
</span></span><span>        <span>case E_NOTICE:
</span></span><span>        <span>case E_USER_NOTICE:
</span></span><span>        <span>case E_DEPRECATED:
</span></span><span>        <span>case E_USER_DEPRECATED:
</span></span><span>        <span>case E_STRICT:
</span></span><span>            <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline));
</span></span><span>            <span>break;
</span></span><span>
</span><span>        <span>case E_WARNING:
</span></span><span>        <span>case E_USER_WARNING:
</span></span><span>            <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline));
</span></span><span>            <span>break;
</span></span><span>
</span><span>        <span>case E_ERROR:
</span></span><span>        <span>case E_USER_ERROR:
</span></span><span>            <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline));
</span></span><span>            <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span>
</span><span>        <span>default:
</span></span><span>            <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span>    <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>set_error_handler("errorHandler");
</span></span><span>
</span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span>   <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE);
</span></span><span><span>}</span></span>
ログイン後にコピー

要約

PHPは、ロギングや表示など、エラー条件を処理するためのさまざまな組み込み関数を提供します。また、エラーハンドラーを登録して例外を使用して、エラー処理戦略をカスタマイズする柔軟性を提供します。エラーは人生の事実ですが、この記事で私が提示した情報が、より優雅にそれらを処理するのに役立つことを願っています。 Ilya Andriyanov / Shutterstock 経由の画像 php

でのエラー処理に関するよくある質問(FAQ)

PHPでのエラー処理の重要性は何ですか?

PHPでのエラー処理は、Webアプリケーションの整合性と機能を維持するために重要です。開発者は、スクリプトの実行中に発生する可能性のある問題を特定して修正するのに役立ちます。適切なエラー処理がなければ、小さな問題は、アプリケーションのクラッシュやユーザーに機密情報を公開するなど、重大な問題を引き起こす可能性があります。また、ユーザーエクスペリエンスが改善されます。これにより、開発者は、混乱するエラーメッセージを表示するのではなく、ユーザーがエラーが発生したときに見えるものを制御できるようになります。

PHPはデフォルトでエラーをどのように処理しますか?

デフォルトでは、PHPはサーバーのエラーログにエラーレポートを送信し、画面にエラーメッセージを表示します。この動作は、ユーザーに機密情報を明らかにすることができるため、ライブWebサイトには理想的ではありません。したがって、ライブWebサイトのデフォルトのエラー処理設定を変更することをお勧めします。

PHPのさまざまなタイプのエラーは何ですか?

PHPは、致命的なエラー、警告、解析エラー、通知など、エラーをいくつかのタイプに分類します。致命的なエラーは、存在しない関数を呼び出したり、書くことができないファイルに書き込むなど、重大なエラーです。警告は、スクリプトの実行を続けることを可能にする非致命的なエラーです。解析エラーは、スクリプトに構文ミスがある場合に発生します。通知は、PHPがスクリプトの実行中に遭遇するマイナーなエラーまたは可能なエラーです。これらの機能により、カスタムエラー処理ルールと例外を定義できます。エラーを処理するカスタム関数を指定できます。これは、エラーのロギングやエラー通知の送信に役立ちます。

PHPの例外は何ですか?

例外は、スクリプトの指示の通常のフローを破壊するスクリプトの実行中に発生するイベントです。例外がスローされると、PHPはスクリプトの実行を停止し、例外を処理するためのキャッチブロックを探し始めます。キャッチブロックが見つからない場合、PHPは致命的なエラーを表示し、スクリプトの実行を停止します。 Tryブロックには、例外をスローする可能性のあるコードが含まれています。 Catchブロックには、例外を処理するコードが含まれています。最後にブロックには、例外がスローされたかどうかに関係なく実行されるコードが含まれています。エラーはPHPエンジンによって処理され、エラー報告設定とカスタムエラーハンドラーを使用して制御できます。一方、例外はスクリプトによって処理され、try、catch、および最後にブロックを使用して制御できます。ただし、ライブWebサイトにはエラーレポートをオフにすることは、問題を特定して修正することを困難にする可能性があるため、推奨されません。 PHPで式に加えられた場合、その式によって生成される可能性のあるエラーメッセージは無視されます。 PHPにエラーを記録するにはどうすればよいですか?

PHPは、ERROR_LOG()関数を提供して、サーバーのエラーログまたは指定されたファイルにエラーメッセージを送信します。この機能は、エラーを追跡してデバッグを追跡するのに役立ちます。 PHP.iniファイルのLOG_ERRORSディレクティブを変更して、すべてのエラーをログにログするようにPHPを構成することもできます。

以上がphpmaster | 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)

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でそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP 8.1の列挙(列挙)とは何ですか? PHP 8.1の列挙(列挙)とは何ですか? Apr 03, 2025 am 12:05 AM

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

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

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

See all articles