PHPエラー処理

PHP では、デフォルトのエラー処理は簡単です。ファイル名、行番号、およびエラーを説明するメッセージを含むエラー メッセージがブラウザに送信されます。

PHP エラー処理

エラー処理は、スクリプトや Web アプリケーションを作成する際の重要な部分です。 コードにエラー検出コーディングが欠けていると、プログラムは専門的ではないように見え、セキュリティ リスクへの扉が開かれてしまいます。

このチュートリアルでは、PHP の最も重要なエラー検出方法のいくつかについて説明します。

さまざまなエラー処理方法について説明します。

1. 単純な「die()」ステートメント

2. カスタムエラーとエラートリガー

3. 基本的なエラー処理 : die( ) function

最初の例は、テキスト ファイルを開くための簡単なスクリプトを示しています:

<?php
   $file=fopen("welcome.txt","r");
?>
ファイルが存在しない場合、次のようなエラーが表示されます:

警告: fopen(welcome.txt ) [function .fopen]: ストリームを開けませんでした:

No such file or directory in /www/php/test/test.php on line 2



ユーザーが上記のようなエラー メッセージを受け取るのを避けるために、ファイルにアクセスしますファイルが存在するかどうかを検出する前に:

<?php
  if(!file_exists("welcome.txt"))
  {
   die("文件不存在");
  }
   else
  {
   $file=fopen("welcome.txt","r");
  } 
?>

ファイルが存在しない場合は、次のようなエラー メッセージが表示されます:

ファイルが存在しません

上記のコードは前のコードより効率的であり、これはそのためです。エラー後にスクリプトを終了するには、単純なエラー処理メカニズムが使用されます。

ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関数を調べてみましょう。

カスタム エラー ハンドラーを作成する

カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関数を作成しただけです。 関数は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できる必要がありますが、最大 5 つのパラメータ (オプション: ファイル、行番号、エラー コンテキスト) を受け入れることができます:

Syntax

error_function( error_level 、error_message、error_file、error_line、error_context)

パラメータerror_levelユーザー定義エラーのエラー報告レベルを指定します。数値である必要があります。以下の表を参照してください: エラー報告レベル。

error_message 必須。ユーザー定義エラーのエラー メッセージを指定します。 error_file オプション。エラーが発生したファイル名を指定します。

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

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

エラー レポート レベル

これらのエラー レポート レベルは、ユーザー定義のエラー ハンドラーによって処理されるさまざまなタイプのエラーです。

説明2 -タイムエラー。スクリプトの実行を一時停止しないでください。 8 E_NOTICE 実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。

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 すべてのエラーと警告。 (PHP 5.4 では、E_STRICT は E_ALL の一部になります)

上記のタイプの中で:

1. エラーは最も深刻であり、解決する必要があります。そうしないと、プログラムは実行を続行できません

2 という警告も非常に重要です。トングも解決しなければなりません。明らかに意図的な場合は、対処する必要はありません

3. 注意: 対処する必要はありません。しかし、一部の企業では、プロジェクトの基準が特に高くなります。 これは、高水準の要件を伴うプロジェクトでも解決する必要があります。 通知はPHPの実行効率に影響を与えるためです。通常、関数が未定義である場合などに発生します。

4. 解析エラーは、解決する必要がある構文エラーを指します

5. all は、すべてのタイプのすべてのエラーを表します

次に、エラーを処理する関数を作成しましょう:

T c関数CustomError($ errno、$ errstr){

echo "&lt; b&gt; error:&lt;/b&gt; [$ errno] $ errstr&gt;(die(); code は単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。
エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。



エラーハンドラーを設定する

PHPのデフォルトのエラーハンドラーは、組み込みエラーハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。

エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。 ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:

set_error_handler("customError");カスタム関数ですべてのエラーを処理したいため、set_error_handler( ) に必要な引数は 1 つだけです。 、2 番目の引数を追加してエラー レベルを指定できます。

存在しない変数を出力してこのエラー ハンドラーをテストします:

<?php
 // 错误处理函数
 function customError($errno, $errstr)
 {
   echo "<b>Error:</b> [$errno] $errstr";
 }
 // 设置错误处理函数
 set_error_handler("customError");
 // 触发错误
 echo($test);
?>

上記のコードの出力は次のようになります:

エラー: [8] 未定義変数: test

エラーのトリガー

スクリプト内のユーザーがデータを入力する時点で、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクはtrigger_error() 関数によって実行されます。


この例では、「test」変数が「1」より大きい場合、エラーが発生します:

<?php
 $test=2;
 if ($test>1)
 {
  trigger_error("变量值必须小于等于 1");
 }
?>
上記のコードの出力は次のとおりです:

注意: 変数値は次のようにする必要があります。 /www/test/php.php の 5 行目以下 1

スクリプト内の任意の場所でエラーをトリガーできます。2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。

考えられるエラーの種類:

1. E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。

2. E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。

3. E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。

この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:

<?php
 // 错误处理函数
  function customError($errno, $errstr)
  {
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "脚本结束";
    die();
  }
  // 设置错误处理函数
  set_error_handler("customError",E_USER_WARNING);
  // 触发错误
  $test=2;
  if ($test>1)
  {
    trigger_error("变量值必须小于等于 1",E_USER_WARNING);
   }
?>

上記のコードの出力は次のようになります:

エラー: [512] 変数値は 1 以下である必要があります

スクリプト終了

独自のエラーを作成する方法とそれをトリガーする方法を学習したので、エラー ログについて学習しましょう。

エラー記録

php.iniで使用する必要がある関連する設定項目は次のとおりです。これら 2 つの設定項目は次のとおりです。 パラメータ

設定項目 log_errors on/off ログレコードを開くかどうか

log_errors_max_len 整数、デフォルト 1024 単一行エラーの最大値 error_log syslog または指定道エラーログが記録される場所

説明:

テーブル内の log_errors と log_errors_max_len は非常に理解しやすいです。

そして、error_log は、エラーが保存されるパスを指定します。設定項目のsyslogは少しわかりにくいかもしれません。 syslog はシステム記録を指します。 Windows システムはコンピュータのログ コレクター内にあります。 Linux のデフォルトは次のとおりです: /etc/syslog.conf

デフォルトでは、php.ini の error_log 設定に従って、PHP はエラー レコードをサーバーの記録システムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。

電子メールでエラー メッセージを自分に送信することは、特定のエラーの通知を受け取るための優れた方法です。

電子メールでエラーメッセージを送信

以下の例では、特定のエラーが発生した場合、エラーメッセージを含む電子メールを送信し、スクリプトを終了します:

<?php
  // 错误处理函数
 function customError($errno, $errstr)
 {
   echo "<b>Error:</b> [$errno] $errstr<br>";
   echo "已通知网站管理员";
   error_log("Error: [$errno] $errstr",1,
   "someone@example.com","From: webmaster@example.com");
 }
  // 设置错误处理函数
 set_error_handler("customError",E_USER_WARNING);
  // 触发错误
 $test=2;
 if ($test>1)
 {
  trigger_error("变量值必须小于等于 1",E_USER_WARNING);
 }
?>
上記のコードの出力は次のとおりです。以下に示すように:

エラー: [512] 変数値は 1 以下である必要があります

Web サイト管理者に通知されました


上記のコードから受信した電子メールは次のとおりです:

エラー: [512] 変数値は 1 未満である必要があります

このメソッドはすべてのエラーに適しているわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。

学び続ける
||
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜