さて、エラーを処理する関数を作成しましょう: <?php
header("Content-type:text/html;charset=utf-8");
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "脚本结束";
die();
}
?>
上記のコードは、単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。 エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。
エラーハンドラーを設定する
PHPのデフォルトのエラーハンドラーは、組み込みエラーハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。 エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します: set_error_handler("customError"); カスタム関数ですべてのエラーを処理したいため、set_error_handler() に必要なのは1 つのパラメーターに、2 番目のパラメーターを追加してエラー レベルを指定できます
例
上記で学んだ知識を組み合わせて、存在しない変数を出力してこのエラー ハンドラーをテストしてみます: <?php
header("Content-type:text/html;charset=utf-8");
// 错误处理函数
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
// 设置错误处理函数
set_error_handler("customError");
// 触发错误
echo($test);
//关闭了所有的错误显示
error_reporting(0);
//显示所有错误
//error_reporting(E_ALL);
//显示所有错误,但不显示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?> プログラムの実行結果: エラー: [8] 未定義の変数: test
実行結果は、エラーレベルが 8 であることを示し、エラーメッセージは次のとおりです: 存在しない変数
エラーのトリガー ユーザーがデータを入力するスクリプトの時点で、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクは trigger_error() 関数によって実行されます。 例 この例では、「test」変数が「1」より大きい場合、エラーが発生します: <?php
header("Content-type:text/html;charset=utf-8");
$test=2;
if ($test>1)
{
trigger_error("变量值必须小于等于 1");
}
?>プログラムの実行結果: 注意: 変数の値はそれより小さくなければなりませんD :WWWAdvancedtutorialerrorerror_1.php の 6 行目以上 1
2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。 考えられるエラーの種類: · E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。 · E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。 · E_USER_NOTICE - デフォルト。ユーザーが生成した実行時通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。
例 この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します: <?php
header("Content-type:text/html;charset=utf-8");
// 错误处理函数
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 以下である必要があります スクリプト終了
実行中結果 エラーレベルの値が512であることを教えてください。エラーメッセージは、trigger_error関数で設定したプロンプトメッセージになります
エラーログ
一部の企業では、特別なログ収集がありますシステム。ログ収集システムは、エラー、警告、プロンプトをバックグラウンドで収集するのに役立ちます。 専用のログ収集システムを持たず、サーバーから実行ログをファイル経由で収集している企業もあります。 その中には、PHP エラー、警告を受信する必要があります。 次に、ユーザーに表示が許可されておらず、エラー報告レベルが設定されている場合、ログ システムにエラーを収集するにはどうすればよいでしょうか?という疑問が生じます。 php.ini で使用する必要がある関連する設定項目は次のとおりです。これら 2 つの設定項目は次のとおりです:
| エラーメッセージの種類 | 説明 | | 0 | デフォルトの error_log の指定場所 | | 1 | 指定したメールの場所に送信します | | 3 | 指定したファイルの場所に送信します |
例 <?php
//无法连接到数据库服务器,直接记录到php.ini 中的error_log指定位置
error_log("无法连接到数据库服务器服务器");
//可以发送邮件,但是php.ini必须配置过邮件系统
error_log('可以用邮件报告错误,让运维人员半夜起床干活',1 ,'liwenkai@phpxy.com');
//记录在指定的位置
error_log("我是一个错误哟", 3, "d:/test/my-errors.log");
?>
インスタンス
以下の例では、特定のエラーが発生した場合、エラーメッセージを含む電子メールを送信し、スクリプトを終了します。 プログラムの実行結果: エラー: [512] 値は 1 以下である必要がありますウェブマスターに通知されました
上記のコードから受信したメールは次のようなものです: エラー: [512] 値は 1 以下である必要があります このメソッドはすべてのエラーに適しているわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。
注: error_log でのメールの送信は初心者にとって馴染みのないものであるため、ある程度の知識を習得する必要はありません。 error_reporting レポートエラータイプ
error_reporting は、エラーレポートを指します。 php.iniにもそのようなパラメータがあります。このパラメータ。 PHP エンジンが記録、レポート、表示するエラーのタイプを決定します。 1. php.ini の error_reporting パラメーター。 error_reporting パラメータが 0 に設定されている場合。 PHP エンジン全体のエラーは表示、出力、または記録されません。次の章で説明するログには記録されません。 すべてのエラーを表示したい場合は、次のように記述できます: error_reporting = E_ALL プロンプトを除外してすべてのエラーを表示したい場合は、このパラメータを次のように記述できます: error_reporting = E_ALL & ~ E_NOTICE すべてのエラーを表示しますが、ヒント、互換性、将来の互換性は除きます。次のように記述できます: error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
2. 場合によっては、php.ini ファイルを操作する権限がない場合があります。 error_reporting を制御したいのですが、どうすればよいでしょうか?
xxxx.php ファイルの実行の開始時に、error_reporting() 関数を使用して目標を達成できます。
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"someone@example.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>上記のコードを試してみたり、意図的に間違ったコードを書いて試してみたりすることもできます。指定されたエラーが現在のファイルに表示されるかどうか。 [知識ポイントを拡張して理解する]: @ 記号は以前に学習した、エラーが表示されない単一行です。@ 記号は使用しないか、控えめに使用してください。
インスタンスこの PHP コードを使用して存在しないファイルを読み取り、実装プロセスを示してみましょう: <?php
//关闭了所有的错误显示
error_reporting(0);
//显示所有错误
//error_reporting(E_ALL);
//显示所有错误,但不显示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>
<?php
header("Content-type:text/html;charset=utf-8");
// 错误处理函数
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
// 设置错误处理函数
set_error_handler("customError");
// 触发错误
echo($test);
//关闭了所有的错误显示
error_reporting(0);
//显示所有错误
//error_reporting(E_ALL);
//显示所有错误,但不显示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜
|