我寫了下面的代碼片段來處理錯誤。數據庫查詢錯誤,同時錯誤處理
(page.php文件被通過包括在索引頁:陣列(falseNamePage => page.php文件,.... ECT))
Perfoming一些測試,看看它是如何反應,予刪除一個頁面來自public_html的.php。
結果:
- 錯誤日誌確定
-alert電子郵件發送OK
- 記錄在DB:ERROR:
注意:未定義的變量:在/ home $數據庫/.../public_html/index.php on line 40
Warning:mysql_query()期望參數2是資源,null在第40行中的/home/.../public_html/index.php中給出「不可能與DB2連接」
我不明白爲什麼它連接失敗在這種情況下的數據庫併發回一個錯誤。
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 = '[email protected]'; $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");
最後一個問題是:
爲什麼是一個包含錯誤ECHOED 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
$ database是在connection.php中定義的? – powtac
是$ database代表PhpMyAdmin中的「database」(常數名稱) – SunnyOne
PHP的'mysql_ *'函數[已棄用](http://www.php.net/manual/en/faq.databases.php#faq.databases .mysql.deprecated)。 [建議的替代品](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)也恰好是[更安全地使用](http://stackoverflow.com/a/60496/132382)。 – pilcrow