Php-error-handling

提供:Dev Guides
移動先:案内検索

PHP-エラーおよび例外処理

エラー処理は、プログラムによって発生したエラーをキャッチし、適切なアクションを実行するプロセスです。 エラーを適切に処理すると、多くの予期しない結果が生じる可能性があります。

PHPでのエラー処理は非常に簡単です。

die()関数を使用する

PHPプログラムを作成する際は、先に進む前に考えられるすべてのエラー状態を確認し、必要なときに適切なアクションを実行する必要があります。

*/tmp/test.xt* ファイルを使用せずに、このファイルを使用して次の例を試してください。
<?php
   if(!file_exists("/tmp/test.txt")) {
      die("File not found");
   }else {
      $file = fopen("/tmp/test.txt","r");
      print "Opend file sucessfully";
   }
  //Test of the code here.
?>

これにより、効率的なコードを作成できます。 上記の手法を使用すると、エラーが発生するたびにプログラムを停止し、より意味のあるユーザーフレンドリーなメッセージを表示できます。

カスタムエラー処理関数の定義

エラーを処理する独自の関数を作成できます。 PHPは、エラー処理関数を定義するフレームワークを提供します。

この関数は、最低2つのパラメーター(エラーレベルとエラーメッセージ)を処理できる必要がありますが、最大5つのパラメーター(オプション:ファイル、行番号、エラーコンテキスト)を受け入れることができます-

構文

error_function(error_level,error_message, error_file,error_line,error_context);
Sr.No Parameter & Description
1

error_level

必須-ユーザー定義エラーのエラーレポートレベルを指定します。 値番号でなければなりません。

2

error_message

必須-ユーザー定義エラーのエラーメッセージを指定します

3

error_file

オプション-エラーが発生したファイル名を指定します

4

error_line

オプション-エラーが発生した行番号を指定します

5

error_context

オプション-エラーが発生したときに使用されたすべての変数とその値を含む配列を指定します

可能なエラーレベル

これらのエラーレポートレベルは、ユーザー定義のエラーハンドラを使用できるさまざまな種類のエラーです。 これらの値は、 | 演算子を使用して組み合わせて使用​​されます。

Sr.No Constant & Description Value
1

.E_ERROR

致命的な実行時エラー。 スクリプトの実行が停止します

1
2

E_WARNING

致命的でない実行時エラー。 スクリプトの実行は停止しません

2
3

E_PARSE

コンパイル時の解析エラー。 解析エラーは、パーサーによってのみ生成される必要があります。

4
4

E_NOTICE

実行時の通知。 スクリプトはエラーの可能性があるものを見つけましたが、通常のスクリプトの実行時にも発生する可能性がありました

8
5

E_CORE_ERROR

PHPの初期起動中に発生する致命的なエラー。

16
6

E_CORE_WARNING

致命的でない実行時エラー。 これは、PHPの最初の起動時に発生します。

32
7

E_USER_ERROR

致命的なユーザー生成エラー。 これは、プログラマーがPHP関数trigger_error()を使用して設定するE_ERRORのようなものです。

256
8

E_USER_WARNING

致命的ではないユーザー生成警告。 これは、PHP関数trigger_error()を使用してプログラマーが設定するE_WARNINGのようなものです。

512
9

E_USER_NOTICE

ユーザー生成の通知。 これは、プログラマーがPHP関数trigger_error()を使用して設定するE_NOTICEのようなものです。

1024
10

E_STRICT

実行時の通知。 あなたのコードの最良の相互運用性と前方互換性を保証するあなたのコードへの変更をPHPに提案させることを可能にしてください。

2048
11

E_RECOVERABLE_ERROR

キャッチ可能な致命的エラー。 これはE_ERRORに似ていますが、ユーザー定義のハンドルでキャッチできます(set_error_handler()も参照)。

4096
12

E_ALL

レベルE_STRICTを除くすべてのエラーと警告(E_STRICTは、PHP 6.0以降、E_ALLの一部になります)

8191

上記のエラーレベルはすべて、以下のPHP組み込みライブラリ関数を使用して設定できます。レベルcabは、上記の表で定義された値のいずれかです。

int error_reporting ( [int $level] )

以下は、1つのエラー処理関数を作成する方法です-

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br/>";
      echo "Terminating PHP Script";

      die();
   }
?>

カスタムエラーハンドラを定義したら、PHP組み込みライブラリ set_error_handler 関数を使用して設定する必要があります。 次に、存在しない関数を呼び出して例を調べてみましょう。

<?php
   error_reporting( E_ERROR );

   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br/>";
      echo "Terminating PHP Script";

      die();
   }

  //set error handler
   set_error_handler("handleError");

  //trigger error
   myFunction();
?>

例外処理

PHP 5には、他のプログラミング言語と同様の例外モデルがあります。 例外は重要であり、エラー処理をより適切に制御できます。

例外に関連する新しいキーワードを説明しましょう。

  • Try -例外を使用する関数は「try」ブロック内にある必要があります。 例外がトリガーされない場合、コードは通常どおり続行されます。 ただし、例外がトリガーされると、例外は「スロー」されます。
  • Throw -これは、例外をトリガーする方法です。 各「スロー」には、少なくとも1つの「キャッチ」が必要です。
  • Catch -「catch」ブロックは例外を取得し、例外情報を含むオブジェクトを作成します。

例外がスローされると、ステートメントに続くコードは実行されず、PHPは最初に一致するcatchブロックを見つけようとします。 例外がキャッチされない場合、PHP致命的エラーが発行され、「Uncaught Exception …​

  • 例外が投げられ、PHP内でキャッチ( "キャッチ")される可能性があります。 コードはtryブロックで囲まれている場合があります。
  • 各試行には少なくとも1つの対応するcatchブロックが必要です。 複数のcatchブロックを使用して、異なるクラスの例外をキャッチできます。 *catchブロック内で例外をスロー(または再スロー)することができます。

以下はコードです。このコードをコピーしてファイルに貼り付け、結果を確認します。

<?php
   try {
      $error = 'Always throw this error';
      throw new Exception($error);

     //Code following an exception is not executed.
      echo 'Never executed';
   }catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
   }

  //Continue execution
   echo 'Hello World';
?>

上記の例では、$ e→ getMessage関数を使用してエラーメッセージを取得しています。* Exception *クラスから使用できる以下の関数があります。

  • * getMessage()*-例外のメッセージ
  • * getCode()*-例外のコード
  • * getFile()*-ソースファイル名
  • * getLine()*-ソース行
  • * getTrace()*-backtrace()のn配列
  • * getTraceAsString()*-トレースのフォーマットされた文字列

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

独自のカスタム例外ハンドラを定義できます。 次の関数を使用して、ユーザー定義の例外ハンドラー関数を設定します。

string set_exception_handler ( callback $exception_handler )

ここで、 exception_handler は、キャッチされない例外が発生したときに呼び出される関数の名前です。 この関数は、set_exception_handler()を呼び出す前に定義する必要があります。

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }

   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');

   echo "Not Executed\n";
?>

リンクでエラー処理関数の完全なセットを確認してください:/php/php_error_handling_functions [PHPエラー処理関数]