エラーを処理するために、次のスニペットを書きました。
(Page.php は : array( falseNamePage=> page.php, ....ect) を介してインデックス ページに含まれます)
それがどのように反応するかを確認するためにいくつかのテストを実行して、public_html から page.php を削除します。
結果 :
-エラーログOK
・アラートメール送信OK
-DBへの記録: エラー:
注意: 未定義の変数: $database in /home/.../public_html/index.php 行 40
警告: mysql_query() は、パラメーター 2 がリソースであると想定しています。null は /home/.../public_html/index.php の 40 行目に「DB2 に接続できません」で指定されています
この場合、DB への接続に失敗し、エラーを返す理由がわかりません。
DB 接続は、他のすべてのケース (削除、選択、更新、挿入 ...) で正常に動作します。
function errorHandler($errno, $errstr, $errfile, $errline)
{
require_once('connection.php');
$now = time();
$date = date("Y-m-d H:i:s",$now);
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
............ 5 first cases code...............
case E_WARNING:
case E_USER_WARNING:
$message_warning = "Warning : ".$errno." : ".$errstr." : ".$errfile." : ".$errline;
error_log ( $message_warning ,0);
$mail = 'my_mail@yahoo.com'; $sujet = $message_warning; $body_warning = $date." : ".$message_warning;
mail($mail,'=?UTF-8?B?'.base64_encode($sujet).'?=',stripslashes($body_warning));
$query_warning =" INSERT INTO errorlog (severity,errno,errstr,errfile,errline,time)
VALUES ('WARNING','".$errno."','".$errstr."','".$errfile."','".$errline."','".$date."')";
$result_warning = mysql_query($query_warning,$database) or die("impossible to connect with DB2");
break;
case E_ERROR:
case E_USER_ERROR:
............... 2 last cases code ..........
}
}
set_error_handler("errorHandler");
最後の質問は次のとおりです。
INCLUDE エラーが 4 回エコーされるのはなぜですか?
システムは「ストリームを開く」ことを 4 回試行しますか?
やった :
function errorHandler($errno, $errstr, $errfile, $errline)
{
if ($errno == E_NOTICE )
{ echo "<br/>".$errno."== E_NOTICE<br/>";}
if ($errno == E_USER_NOTICE)
{ echo "<br/>".$errno."== E_USER_NOTICE<br/>";}
if ($errno == E_DEPRECATED)
{ echo "<br/>".$errno."== E_DEPRECATED<br/>";}
if ($errno == E_USER_DEPRECATED)
{ echo "<br/>".$errno."== E_USER_DEPRECATED<br/>";}
if ($errno == E_STRICT)
{ echo "<br/>".$errno."== E_STRICT<br/>";}
if ($errno == E_WARNING)
{ echo "<br/>".$errno."== E_WARNING<br/>";}
if ($errno == E_USER_WARNING)
{ echo "<br/>".$errno."== E_USER_WARNING<br/>";}
if ($errno == E_ERROR)
{ echo "<br/>".$errno."== E_ERROR<br/>";}
if ($errno == E_USER_ERROR)
{ echo "<br/>".$errno."== E_USER_ERROR<br/>";}
}
set_error_handler("errorHandler");
結果 :
2== E_WARNING
2== E_WARNING
2== E_WARNING
2== E_WARNING