ホームページ > バックエンド開発 > PHPチュートリアル > PHP エラー処理エクスペリエンスの共有_PHP チュートリアル

PHP エラー処理エクスペリエンスの共有_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:24:11
オリジナル
1346 人が閲覧しました

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

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

単純な「die()」ステートメント
カスタムエラーとエラートリガー
エラーレポート
基本的なエラー処理: die() 関数の使用
最初の例テキスト ファイル:

コードをコピーします コードは次のとおりです:

$file=fopen("welcome.txt","r");

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

警告: fopen(welcome.txt) [function.fopen]: ストリームを開けませんでした:
No such file or directory in C:webfoldertest.php on line 2ユーザーに上記のようなエラー メッセージが表示されないように、ファイルにアクセスする前にファイルが存在するかどうかを確認します。

コードをコピーします。 コードは次のとおりです。 if(!file_exists( "welcome.txt "))
{
die("ファイルが見つかりません");
}
else
{
$file=fopen("welcome.txt","r")
?>
现在,假如文件不存在,您会得到类似这样的错误消息:

File not found比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。

不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。
创建自定义错误处理器
创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。

该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):

语法
error_function(error_level,error_message,
error_file,error_line,error_context)
参数 描述
error_level

必需。为用户定义的错误规定错误报告级别。必须是一个值数。

参见下面的表格:错误报告级别。

error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

错误报告级别

这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:

常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE

Run-time 通知。

脚本发现可能有错误发生,但也可能在脚本正常运行时发生。

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 的一部分)

次に、エラーを処理する関数を作成しましょう:
コードをコピー コードは次のとおりです:

function CustomError($errno, $errstr)
{
echo "Error: [$errno] $errstr
";
echo "スクリプトの終了";
die();
}

上記のコードは単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。

エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。
エラー ハンドラーを設定する
PHP のデフォルトのエラー ハンドラーは、組み込みのエラー ハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。

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

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


存在しない変数を出力してこのエラー ハンドラーをテストします:
コードをコピー コードは次のとおりです:

//エラー ハンドラー関数
function customError( $errno, $errstr)
{
echo "Error: [$errno] $errstr";
} // エラーハンドラーを設定します
set_error_handler("customError"); /trigger error
echo($test);
?>


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

Error: [8] 未定義の変数: テストはエラーをトリガーします
ユーザーの入力が無効な場合にデータを入力します。エラーをトリガーする場合に役立ちます。 PHP では、このタスクはtrigger_error() によって実行されます。


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



コードをコピーします
コードは次のとおりです: $ test=2;
if ($test>1)
{
trigger_error("値は 1 以下である必要があります")
?>

上記のコードの出力は次のようになります。注意: C:webfoldertest.php の 6 行目の値は 1 以下である必要があります。 スクリプト内の任意の場所でエラーをトリガーできます。2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。

考えられるエラーの種類:
E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。
E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。
E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトは、スクリプトが正常に実行されているときに発生した可能性のあるエラーを検出しました。

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



コードをコピー

コードは次のとおりです:


//エラー ハンドラー関数
function customError($errno, $errstr) { echo "エラー: [$errno] $errstr
";
echo "スクリプトの終了"
//エラーハンドラーを設定します
set_error_handler("customError",E_USER_WARNING);

//トリガーエラー
if ($test>1)
{
trigger_error("値は 1 以下である必要があります",E_USER_WARNING);
}
?>


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

Error: [512] 値は 1 以下でなければなりません
スクリプトの終了 これで、独自のエラーを作成する方法とその方法を学びました。彼らを罰するために、エラー ログを調べてみましょう。
エラーログ
デフォルトでは、PHP は php.ini の error_log 設定に従って、エラーレコードをサーバーのエラーログシステムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。

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

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



コードをコピーします

コードは次のとおりです。

//エラーハンドラー関数
functioncustomError($errno, $errstr)
{
echo "Error: [$errno] $errstr
" ;
echo "ウェブマスターに通知されました";
error_log("エラー: [$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 以下である必要があります
ウェブマスターに通知されました 上記のコードから受信した電子メールは次のようになります:

エラー: [512] ] 値は 1 以下である必要があります。1 つの方法がすべてのバグに適合するわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。

エラーバックトレース


定義と使用法
PHP debug_backtrace() 関数はバックトレースを生成します。

この関数は連想配列を返します。返される可能性のある要素は次のとおりです:
名前 タイプ 説明
機能 文字列 現在の関数名。
ライン 整数 現在の行番号。
ファイル 文字列 現在のファイル名。
class 字符串 当前的类名
object 对象 当前对象。
type 字符串 当前的调用类型,可能的调用:
  • 返回: "->"  - 方法调用
  • 返回: "::"  - 静态方法调用
  • 返回 nothing - 函数调用
args 数组 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。
语法
debug_backtrace() の例
复制代码代码如下:

function one($str1, $str2)
{
two("Glenn", "Quagmire");
}
function two($str1, $str2)
{
three("クリーブランド", "ブラウン");
}
関数 3($str1, $str2)
{
print_r(debug_backtrace());
}

one("ピーター"、"グリフィン");
?>

出力:

Array
(
[0] => Array
(
[file] => C:webfoldertest.php
[line] => 7
[function] => 3
[ args] => 配列
(
[0] => クリーブランド
[1] => ブラウン
)
)
[1] => 配列
(
[file] => C:webfoldertest.php
[行] => 3
[関数] => 2
[引数] => 配列
(
[0] => グレン
[1] => 泥沼
)
[2] => 配列
(
[ファイル] => C:webfoldertest.php
[行] => 14
[関数] => 1 つ
[引数] => 配列
(
[0] => ; ピーター
[1] =>
)
)
)

http://www.bkjia.com/PHPjc/324359.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324359.html技術記事この教義では、PHP の中で最も重要なセキュリティ プロトコルのいくつかを紹介します。 私たちは、さまざまなセキュリティ プロトコルの処理方法を検討しています。 単純な "die()" 文で、セキュリティ セキュリティとセキュリティ リファレンスを独自に定義します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート