www.baike369.com
百科369 > PHP教程 > PHP使用set_error_handler()函数覆盖默认的错误信息

PHP使用set_error_handler()函数覆盖默认的错误信息


PHP使用set_error_handler()函数覆盖默认的错误信息

我们知道,PHP提供的错误处理可以让我们输出一个消息到终端,然后根据需要结束执行或转移到其它逻辑中去。

但有时我们希望将错误信息记录起来,用于跟踪日志,或者向使用者提供更详细的信息,如发送邮件、短消息等操作,从而把问题通知给用户。

PHP提供了一个名为set_error_handler()的函数,用于程序出错时指向我们自定义的错误句柄处理函数。该函数的格式如下:

set_error_handler(callback_function[,int error_types]);

其中,callback_function是我们自定义错误的函数名称,该函数为回调函数,除了E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR等这些PHP警告信息外,所有产生的错误都会发送到该函数来处理。

我们来看下面的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>PHP使用set_error_handler()函数覆盖默认的错误信息实例-www.baike369.com</title>
</head>
<body>
<?php
function SearchError($errno,$errstr,$errfile,$errline){
  $time=date("Y-m-d H:i:s");
  switch($errno){
    case E_USER_ERROR:
      echo "{$time}:用户错误:{$errstr}";
      break;
    default:  // 默认错误
      echo "{$time}:文件名:{$errfile},错误:{$errstr}发生在行{$errline},";
      break;
  }
}
function SearchName($Name){
  if(mb_strlen($Name)<4){
    // 错误处理指向我们自定义的句柄函数处理
    trigger_error('有错误发生:',E_USER_ERROR);
  }
  $Names=array('樱桃','香蕉','橘子','西瓜');
  if(in_array($Name,$Names)){
    return true;
  }else{
    return false;
  }
}
// 自定义错误句柄
set_error_handler('SearchError');
$name='苹果';
//if(SearchName($name)){
if(SearchName($named)){
  echo '已找到';
}else{
  echo '未找到';
}
?>
</body>
</html>

显示效果如下:

PHP使用set_error_handler()函数覆盖默认的错误信息实例

Copyright© 2011-2016 www.baike369.com All Rights Reserved