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);
?>