1、set_error_handler函數:指定出錯時指向我們自定義的錯誤句柄處理函數。
2、error_log函數:專門用于日記記錄。0:通過PHP标準的錯誤處理機制來記錄;1:郵件發生到指定的地方;3指定的檔案中
3、trigger_error函數:指定引發的錯誤類型。
<?php
// 錯誤處理函數
function ErrorHandler($ErrNo, $ErrMsg, $File, $Line, $Vars)
{
$Time = date("Y-m-d H:i:s"); // 錯誤發生時間
// 将錯誤種類定義為關聯數組
$ErrorType = array(1=>"Error", 2=>"Warning", 4=>"Parsing Error",
8=>"Notice", 16=>"Core Error", 32=>"Core Warning",
64=>"Complice Error", 128=>"Compile Warning", 256=>"User Error",
512=>"User Warning", 1024=>"User Notice", 2048=>"Strict Notice");
$Err = <<<ERROR_MESSAGE
<errorentry>
<time>$Time</time>
<number>$ErrNo</number>
<type>$ErrorType[$ErrNo]</type>
<errmsg>$ErrMsg</errmsg>
<filename>$File</filename>
<linenum>$Line</linenum>
ERROR_MESSAGE;
// 使用者定義的錯誤,通知的情況下記錄變量的值
if($ErrNo & (E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE))
{
$Err .= "\n<vars>".serialize($vars)."</vars>";
}
$Err .= "\n</errorentry>\n";
// 儲存到記錄
error_log($Err, 3, "error.log");
// 重大錯誤以Mail通知
if($ErrNo == E_ERROR || $ErrNo = E_USER_ERROR)
{
//mail("[email protected]", "錯誤發生通知中", $Err);
echo "對不起。因為系統發生問題,停止服務中。";
die();
}
}
set_error_handler("ErrorHandler");
function divide($Num, $Den)
{
if($Den == 0)
{
trigger_error("Cannot divide by zero", Warning);
}
else
{
return ($Num/$Den);
}
}
$val = SOME_STRING;
echo divide(5, 0);
?>