phpのエラー処理
作成したプログラムは実行中にエラーや警告などが発生する可能性があります.php解釈器がphpファイルの実行を説明すると、phpエラーが発生すると、問題が外部に投げ出されます.
具体的にはphp.iniプロファイルで構成します.phpエラーは多くのレベルに分けられ、詳細は以下の通りです. E_ERROR:致命的な実行エラー、スクリプト実行を停止します E_WARNING:実行時の警告メッセージ、スクリプト実行を停止しない E_PARSE:構文解析エラー E_NOTICE:実行Yesのメッセージ情報 E_CORE_ERROR:類似E_ERROR、ただしphpコアエラー は含まれない E_CORE_WARNING:類似E_WARNING、ただしphpコア警告 は含まれていません E_COMPILE_ERROR:致命的なコンパイルエラー E_COMPILE_WARNING:致命的なコンパイル警告 E_USER_ERROR:ユーザによるエラー E_USER_WARNING:ユーザーによる警告 E_USER_NOTICE:ユーザによるメッセージ E_ALL:すべてのエラー、メッセージ、メッセージ. E_SCRIPT:phpバージョンマイグレーションの互換性と操作性に関する推奨 プログラムが開発中にphpエラーメッセージを見たい場合はphp.iniファイルでdisplay_errors構成項目はonに設定されています(プログラムがオンラインで実行される場合は、必ずdisplay_errorsをオフにしてください.そうしないと、サーバに関する情報が漏れやすく、さらなる攻撃のために敷き詰められます).また、error_ではphpレポートエラーのレベルを定義することもできます.Reporting構成項目.
上のコードにgetName()という行のコードから放出されたエラーメッセージが入力されます.
11
( ! ) Fatal error: Call to undefined function getName() in/home/youthflies/work/workspace/php/test/test3.php on line 15Call Stack#TimeMemoryFunctionLocation10.0268126916{main}( )../test3.php:0
また、エラー処理関数をカスタマイズすることで、エラー情報をいつでも記録したり、エラー出力を遮断したり(ハッカー攻撃を防止したり)、フレンドリーなエラーページを指定したりすることができます.一般的にset_を使うerror_handler()関数は、エラー処理関数を手動で指定します.
phpを変更します.Iniプロファイル.エラー情報を指定したファイルに出力できます.
error_reporting = E_ALL ;各エラー、警告を投げ出す
display_errors = Off ; エラー表示を閉じる
log_errors = On ;ログ文の記録場所の決定
log_errors_max_len = 1024 ;各ログ・アイテムの最大長
error_log =/home/yourname/work/error.log ; エラー・ログ・ファイルの指定
変更が完了したら、Webサーバを再起動すると有効になります.その後、エラーを含むphpコードを実行すると、エラー情報がerrorに書き込まれる.ロゴにあります.
エラー情報をカスタマイズすることもできますerror_log()関数では、エラーをカスタマイズできます.
1番目のパラメータはエラー内容であり、2番目のパラメータはエラー情報の出力位置を指定し、空にするとphpがデフォルトとなる.iniが指定した場所、0はオペレーティングシステムログ、1はphp mail()関数を使用して送信すること、2はエラーメッセージをtcpに送信すること(このとき3番目のパラメータはターゲットIPおよびポートを表す)、3はネイティブファイルに保存することを示す.
具体的にはphp.iniプロファイルで構成します.phpエラーは多くのレベルに分けられ、詳細は以下の通りです.
<html>
<head>
<title>php </title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
<?php
echo ini_get("log_errors") . "<br />";
echo ini_get("display_errors") . "<br />";
ini_set("display_errors", 1); // php ( )
error_reporting(E_ALL&~(E_WARNING | E_NOTICE));// php , E_WARNING E_NOTICE
gettype($name);//
gettype();// ,
getName();//
?>
</body>
</html>
上のコードにgetName()という行のコードから放出されたエラーメッセージが入力されます.
11
( ! ) Fatal error: Call to undefined function getName() in/home/youthflies/work/workspace/php/test/test3.php on line 15Call Stack#TimeMemoryFunctionLocation10.0268126916{main}( )../test3.php:0
また、エラー処理関数をカスタマイズすることで、エラー情報をいつでも記録したり、エラー出力を遮断したり(ハッカー攻撃を防止したり)、フレンドリーなエラーページを指定したりすることができます.一般的にset_を使うerror_handler()関数は、エラー処理関数を手動で指定します.
<?php
// ,
error_reporting(0);
/**
* Error_Handler , set_error_handler() ,
* @param int $error_level
* @param string $error_message
* @param string $file
* @param int $line
*/
function error_handler($error_level, $error_message, $file, $line)
{
$EXIT = FALSE;
switch ($error_level)
{
//
case E_ERROR:
case E_USER_ERROR:
$error_type = "Fatal Error";
$EXIT = true;
break;
//
case E_NOTICE:
case E_USER_NOTICE:
$error_type = "Notice";
break;
//
case E_WARNING:
case E_USER_WARNING:
$error_type = " Warning";
break;
//
default:
$error_type = "Unknown";
$EXIT = true;
break;
}
// , , ,
printf("<font clolr='#FF0000'><b>%s</b></font>:%s in <b>%s</b> on line <b> %d </b><br>n", $error_type, $error_message, $file, $line);
if($EXIT == true)
echo '<script>location="error.html"</script>';
}
//
set_error_handler('error_handler');
// notice
echo $name;
// 0
echo 10/0;
//
trigger_error(' ', E_USER_ERROR);
?>
phpを変更します.Iniプロファイル.エラー情報を指定したファイルに出力できます.
error_reporting = E_ALL ;各エラー、警告を投げ出す
display_errors = Off ; エラー表示を閉じる
log_errors = On ;ログ文の記録場所の決定
log_errors_max_len = 1024 ;各ログ・アイテムの最大長
error_log =/home/yourname/work/error.log ; エラー・ログ・ファイルの指定
変更が完了したら、Webサーバを再起動すると有効になります.その後、エラーを含むphpコードを実行すると、エラー情報がerrorに書き込まれる.ロゴにあります.
エラー情報をカスタマイズすることもできますerror_log()関数では、エラーをカスタマイズできます.
error_log("This is an error", 3, "/home/yourname/work/error.log");
1番目のパラメータはエラー内容であり、2番目のパラメータはエラー情報の出力位置を指定し、空にするとphpがデフォルトとなる.iniが指定した場所、0はオペレーティングシステムログ、1はphp mail()関数を使用して送信すること、2はエラーメッセージをtcpに送信すること(このとき3番目のパラメータはターゲットIPおよびポートを表す)、3はネイティブファイルに保存することを示す.