ホームページ バックエンド開発 PHPチュートリアル PHPの例外処理とエラー処理方法のまとめ

PHPの例外処理とエラー処理方法のまとめ

Jul 25, 2016 am 08:58 AM

  1. $a = fopen('test.txt','r');
  2. //ファイルが存在しない場合はエラーが報告されます
  3. ?> ;
コードをコピー

正しい書き方:

  1. if(file_exists('test.txt')){
  2. $f=fopen('test.txt','r');
  3. //使用後に閉じる
  4. fclose( $ f);
  5. }
  6. ?>
コードをコピー

1. PHP エラーを処理する 3 つの方法 方法 1、単純な die() ステートメント。 exit(); と同等。 例:

  1. if(!file_exists('aa.txt')){
  2. die('ファイルが存在しません');
  3. } else {
  4. //操作
  5. を実行する
  6. //If上記の die() がトリガーされると、ここでのエコー接続は実行されません
  7. echo 'ok';
コードをコピーします

簡潔に書くと:

  1. file_exits('aaa.txt') または die('ファイルが存在しません');
  2. echo 'ok';
コードをコピー

方法 2、カスタムエラーとエラートリガー

1. エラー ハンドラー (カスタム エラー、通常は構文エラーの処理に使用されます) カスタム エラー関数 (ハンドラー) を作成します。この関数は、少なくとも 2 つのパラメーター (error_level および errormessage) を処理できる必要がありますが、最大 5 つのパラメーター (error_file、error_line、 エラーコンテキスト) 文法: 関数 error_function($error_level,$error_message,$error_file,$error_line,$error_context) //作成後、set_error_handler() 関数を書き直す必要があります。 set_error_handler(‘error_function’,E_WARNING); //ここで、error_function は上で作成したカスタム ハンドラー名に対応し、2 番目のパラメーターはカスタム エラー ハンドラーを使用したエラー レベルです。 エラー報告レベル (理解するだけ)

これらのエラー報告レベルは、エラー ハンドラーが処理するように設計されているさまざまな種類のエラーです。 値 定数 説明 2 E_WARNING 致命的ではない実行時エラー。スクリプトの実行を一時停止しないでください。 8 E_通知 実行時の通知。

スクリプト検出エラーが発生する可能性がありますが、スクリプトが正常に実行されているときに発生することもあります。 256 E_USER_ERROR ユーザーが生成した致命的なエラー。これは、プログラマが PHP 関数trigger_error()を使用して設定する E_ERROR に似ています。 512 E_USER_WARNING 致命的ではないユーザー生成の警告。これは、プログラマが PHP 関数 trigger_error() を使用して設定する E_WARNING に似ています。 1024 E_USER_NOTICE ユーザーが生成した通知。これは、プログラマが PHP 関数trigger_error()を使用して設定する E_NOTICE に似ています。 4096 E_RECOVERABLE_ERROR トラップ可能な致命的なエラー。 E_ERROR と似ていますが、ユーザー定義のハンドラーによってキャッチされる可能性があります。 (set_error_handler() を参照) 8191 E_ALL レベル E_STRICT を除くすべてのエラーと警告。 (PHP 6.0 では、E_STRICT は E_ALL の一部です)

2. エラー トリガー (通常、論理エラーを処理するために使用されます) 要件: たとえば、年齢を受け取りたい場合、その数値が 120 より大きい場合、エラーとみなされます。 伝統的な方法:

  1. if($age>120){
  2. echo 'Age Error';exit();
  3. }
  4. トリガーを使用します:
  5. if($age>120){
  6. //trigger_error ( 'エラー メッセージ'[,'エラー レベル']);ここでのエラー レベルはオプションであり、エラーのレベルを定義するために使用されます
  7. //ユーザー定義のレベルには、次の 3 つのタイプが含まれます: E_USER_WARNING、E_USER_ERROR、E_USER_NOTICE
  8. trigger_error( 'Age Error');//これは呼び出し側システムのデフォルトのエラー処理メソッドです
  9. }
  10. // カスタム プロセッサ、上記と同じです
  11. function myerror($error_level,$error_message){
  12. echo 'error text';
  13. }
  14. //同時に、システムのデフォルトの処理関数を変更する必要があります
コードをコピー

set_error_handler('myerror',E_USER_WARNING);//上記と同様、最初のパラメータはカスタム関数の名前、2 番目はエラーレベルです [ここでのエラーレベルは通常次の 3 つです :E_USER_WARNING、E_USER_ERROR、E_USER_NOTICE] //trigger_error を使用してカスタム エラー処理関数を使用できるようになりました 練習問題:

  1. date_default_timezone_set('PRC');
  2. function myerror($error_level,$error_message){
  3. $info= "エラー番号: $error_leveln";
  4. $info.= "エラー メッセージ: $error_messagen";
  5. $info.= '発生時刻:'.date('Y-m-d H:i:s');
  6. $filename='aa.txt';
  7. if(!$fp=fopen($filename,' a')){
  8. 'ファイル'.$filenameの作成に失敗しました。';
  9. }
  10. if(is_writeable($filename)){
  11. if(!fwrite($fp,$info)){
  12. echo 'ファイルの書き込みに失敗しました';
  13. } else {
  14. echo 'エラーメッセージは正常に記録されました';
  15. }
  16. fclose($fp);
  17. } else {
  18. echo 'ファイル'.$filename.'書き込み不可';
  19. }
  20. exit() ;
  21. }
  22. set_error_handler('myerror',E_WARNING);
  23. $fp=fopen('aaa.txt','r');
  24. ?>
コードをコピー

方法 3、エラー ログ デフォルトでは、php.ini の error_log 設定に従って、php はエラーレコードをサーバーのエラー記録システムまたはファイルに送信します。 error_log() 関数を使用すると、エラー レコードをファイルまたはリモートの宛先に送信できます。 文法: error_log(error[,type,destination,headers])

タイプ部分には通常 3 が使用されます。これは、元のコンテンツを上書きせずにファイルの末尾にエラー情報を追加することを意味します。 destination は宛先、つまり保存されたファイルまたはリモート宛先を表します。 例: error_log(“$error_info”,3,“errors.txt”);

2.PHP例外処理

1. 基本的な文法

  1. try{
  2. //エラーまたは例外を引き起こす可能性のあるコード
  3. //catch 例外のキャッチは、PHP で定義された例外クラスです
  4. } catch(Exception $e){
  5. //例外処理、メソッド:
  6. / /1. 自分で処理します
  7. //2. 処理しないで、もう一度スローします
  8. }
コードをコピーします

2. 処理ハンドラーには次のものが含まれている必要があります。 Try – 例外を使用する関数は、「try」ブロック内に置く必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。 Throw – 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります。 Catch – 「catch」ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します

例外をトリガーします:

  1. //例外をスローできる関数を作成します
  2. function checkNum($number){
  3. if($number>1){
  4. throw new Exception("値は 1 以下でなければなりません");
  5. }
  6. return true;
  7. }
  8. //「try」コード ブロックで例外をトリガーします
  9. try{
  10. checkNum(2);
  11. // 例外がスローされた場合、次のコード行は実行されませんOutput
  12. echo 'これが表示された場合、番号は 1 以下です';
  13. }catch(Exception $e){
  14. //例外をキャッチ
  15. echo 'Message: ' .$e->getMessage();
  16. }
  17. ?>
コードをコピーします

上記のコードは次のようなエラーを報告します。 メッセージ: 値は 1 以下である必要があります

説明:

上記のコードは例外をスローし、それをキャッチします。

checkNum()関数を作成します。数値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。 「try」ブロックで checkNum() 関数を呼び出します。 checkNum() 関数で例外がスローされる 「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。 この例外オブジェクトから $e->getMessage() を呼び出して、この例外からのエラー メッセージを出力します。 ただし、「すべてのスローはキャッチに対応する必要がある」という原則に従うために、見逃したエラーを処理する最上位の例外ハンドラーをセットアップできます。

set_Exception_handler() 関数は、キャッチされなかった例外をすべて処理するユーザー定義関数を設定できます

  1. //最上位の例外ハンドラを設定します
  2. function myException($e){
  3. echo 'this is TopException';
  4. } //デフォルトの例外処理を変更します
  5. set_Exception_handler("myException");
  6. try{
  7. $i=5;
  8. if($i新しい例外をスロー('$i は 10 より大きくなければなりません');
  9. }
  10. }catch(Exception $e){

  11. //例外を処理します
  12. echo $e->getMessage().'
    ';
  13. //例外を処理せず、スローを続行します
  14. throw newException('errorinfo'); // throw $e を使用して元のエラー メッセージを保持することもできます;
  15. }
コードをコピーします

カスタム例外クラスを作成する

  1. classcustomException extends Exception{
  2. public function errorMessage(){
  3. //エラーメッセージ $errorMsg = '.$this->getLine().' の行でエラーが発生しました。 $this->getFile().': '.$this->getMessage().' は有効な電子メール
  4. アドレスではありません'; return $errorMsg;
  5. }
  6. }
  7. //Use
  8. try{
  9. throw newcustomException('error message');
  10. }catch(customException $e){
  11. echo $e->errorMsg();
  12. }
コードをコピー

複数のキャッチを使用して、さまざまな状況でエラー情報を返すことができます

  1. try{
  2. $i=5;
  3. if($i>0){
  4. throw newcustomException('error message');// カスタム例外クラスを使用して
  5. を処理します } if($i< - 10){
  6. throw newException('error2');//システムデフォルトの例外処理を使用する
  7. }
  8. }catch(customException $e){
  9. echo $e->getMessage();
  10. }catch(Exception $ e1) {
  11. echo $e1->getMessage();
  12. }
コードをコピー

例外を使用するためのルール: 1. 例外処理が必要なコードを try コード ブロックに配置して、潜在的な例外をキャッチします。 2. 各 try または throw コード ブロックには、対応する catch コード ブロックが少なくとも 1 つ必要です。 3. 複数の catch コード ブロックを使用して、さまざまなタイプの例外をキャッチします。 4. 例外は、try コード内の catch コード ブロックで再スローできます。

一文を覚えておいてください: 例外がスローされた場合は、それをキャッチする必要があります。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

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

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

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

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

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

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

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

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

See all articles