最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于php捕捉错误的详解

来源:动视网 责编:小采 时间:2020-11-02 18:45:46
文档

关于php捕捉错误的详解

关于php捕捉错误的详解:php捕捉错误的方法:1、使用try{}catch()方法捕捉错误;2、通过set_error_handler函数捕捉E_NOTICE等;3、利用set_exception_handler设置默认的异常处理程序。php错误及异常捕捉在实际开发中,错误及异常捕捉仅仅靠try{}catch()
推荐度:
导读关于php捕捉错误的详解:php捕捉错误的方法:1、使用try{}catch()方法捕捉错误;2、通过set_error_handler函数捕捉E_NOTICE等;3、利用set_exception_handler设置默认的异常处理程序。php错误及异常捕捉在实际开发中,错误及异常捕捉仅仅靠try{}catch()


php错误及异常捕捉

在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的。

所以引用以下几中函数。

a) set_error_handler

一般用于捕捉 E_NOTICE 、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE

不能捕捉:

E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING。

一般与trigger_error("...", E_USER_ERROR),配合使用。

<?php
// we will do our own error handling
error_reporting(0);
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
 // timestamp for the error entry 
$dt = date("Y-m-d H:i:s (T)"); 
// define an assoc array of error string 
// in reality the only entries we should 
// consider are E_WARNING, E_NOTICE, E_USER_ERROR, 
// E_USER_WARNING and E_USER_NOTICE 
$errortype = array ( 
E_ERROR => 'Error', 
E_WARNING => 'Warning', 
E_PARSE => 'Parsing Error', 
E_NOTICE => 'Notice', 
E_CORE_ERROR => 'Core Error', 
E_CORE_WARNING => 'Core Warning', 
E_COMPILE_ERROR => 'Compile Error', 
E_COMPILE_WARNING => 'Compile Warning', 
E_USER_ERROR => 'User Error', 
E_USER_WARNING => 'User Warning', 
E_USER_NOTICE => 'User Notice', 
E_STRICT => 'Runtime Notice', 
E_RECOVERABLE_ERROR => 'Catchable Fatal Error' 
); 
// set of errors for which a var trace will be saved 
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); 
$err = "<errorentry>
"; 
$err .= "	<datetime>" . $dt . "</datetime>
"; 
$err .= "	<errornum>" . $errno . "</errornum>
"; 
$err .= "	<errortype>" . $errortype[$errno] . "</errortype>
"; 
$err .= "	<errormsg>" . $errmsg . "</errormsg>
"; 
$err .= "	<scriptname>" . $filename . "</scriptname>
"; 
$err .= "	<scriptlinenum>" . $linenum . "</scriptlinenum>
"; 
if (in_array($errno, $user_errors)) { 
$err .= "	<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>
"; 
} 
$err .= "</errorentry>

";
echo $err;
}
function distance($vect1, $vect2) { 
if (!is_array($vect1) || !is_array($vect2)) { 
trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); 
return NULL; 
} 
if (count($vect1) != count($vect2)) { 
trigger_error("Vectors need to be of the same size", E_USER_ERROR); 
return NULL; 
} 
for ($i=0; $i<count($vect1); $i++) { 
$c1 = $vect1[$i]; $c2 = $vect2[$i]; 
$d = 0.0; 
if (!is_numeric($c1)) { 
trigger_error("Coordinate $i in vector 1 is not a number, using zero",E_USER_WARNING); 
$c1 = 0.0; 
} 
if (!is_numeric($c2)) { 
trigger_error("Coordinate $i in vector 2 is not a number, using zero",E_USER_WARNING); 
$c2 = 0.0; 
}
$d += $c2*$c2 - $c1*$c1; 
} 
return sqrt($d);
}
 
$old_error_handle = set_error_handler("userErrorHandler");
$t = I_AM_NOT_DEFINED;//generates a warning
 
// define some "vectors"
$a = array(2, 3, "foo");
$b = array(5.5, 4.3, -1.6);
$c = array(1, -3);
 
//generate a user error
$t1 = distance($c,$b);
 
// generate another user error
$t2 = distance($b, "i am not an array") . "
";
 
// generate a warning
$t3 = distance($a, $b) . "
";
?>

b) set_exception_handler

设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常。 在 exception_handler 调用后异常会中止。

与throw new Exception('Uncaught Exception occurred'),连用。

<?php
// we will do our own error handling
error_reporting(0);
function exceptHandle($errno, $errmsg, $filename, $linenum, $vars)
{
 // timestamp for the error entry 
$dt = date("Y-m-d H:i:s (T)"); 
// define an assoc array of error string 
// in reality the only entries we should 
// consider are E_WARNING, E_NOTICE, E_USER_ERROR, 
// E_USER_WARNING and E_USER_NOTICE 
$errortype = array ( 
E_ERROR => 'Error', 
E_WARNING => 'Warning', 
E_PARSE => 'Parsing Error', 
E_NOTICE => 'Notice', 
E_CORE_ERROR => 'Core Error', 
E_CORE_WARNING => 'Core Warning', 
E_COMPILE_ERROR => 'Compile Error', 
E_COMPILE_WARNING => 'Compile Warning', 
E_USER_ERROR => 'User Error', 
E_USER_WARNING => 'User Warning', 
E_USER_NOTICE => 'User Notice', 
E_STRICT => 'Runtime Notice', 
E_RECOVERABLE_ERROR => 'Catchable Fatal Error' 
); 
// set of errors for which a var trace will be saved 
$err = "<errorentry>
"; 
$err .= "	<datetime>" . $dt . "</datetime>
"; 
$err .= "	<errornum>" . $errno . "</errornum>
"; 
$err .= "	<errortype>" . $errortype[$errno] . "</errortype>
"; 
$err .= "	<errormsg>" . $errmsg . "</errormsg>
"; 
$err .= "	<scriptname>" . $filename . "</scriptname>
"; 
$err .= "	<scriptlinenum>" . $linenum . "</scriptlinenum>
"; 
if (1) { 
$err .= "	<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>
"; 
} 
$err .= "</errorentry>

";
echo $err;
}
$old_except_handle = set_exception_handler("exceptHandle");
//$t = I_AM_NOT_DEFINED;//generates a warning
$a;
throw new Exception('Uncaught Exception occurred'); 
?>

c) register_shutdown_function

执行机制是:php把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此函数。

一般与trigger_error("...", E_USER_ERROR),配合使用。

<?php
error_reporting(0);
date_default_timezone_set('Asia/Shanghai');
register_shutdown_function('my_exception_handler');
 
$t = I_AM_NOT_DEFINED;//generates a warning
trigger_error("Vectors need to be of the same size", E_USER_ERROR); 
 
function my_exception_handler()
{
 if($e = error_get_last()) {
 //$e['type']对应php_error常量
 $message = '';
 $message .= "出错信息:	".$e['message']."

";
 $message .= "出错文件:	".$e['file']."

";
 $message .= "出错行数:	".$e['line']."

";
 $message .= "	请工程师检查出现程序".$e['file']."出现错误的原因
";
 $message .= "	希望能您早点解决故障出现的原因<br/>";
echo $message;
 //sendemail to
 }
}
?>

c) restore_error_handler()函数

定义和用法 restore_error_handler() 函数恢复之前的错误处理程序,该程序是由 set_error_handler() 函数改变的。

该函数永远返回 true。

是 set_error_handler()的反函数。

更多相关知识,请访问PHP中文网!

文档

关于php捕捉错误的详解

关于php捕捉错误的详解:php捕捉错误的方法:1、使用try{}catch()方法捕捉错误;2、通过set_error_handler函数捕捉E_NOTICE等;3、利用set_exception_handler设置默认的异常处理程序。php错误及异常捕捉在实际开发中,错误及异常捕捉仅仅靠try{}catch()
推荐度:
标签: 错误 php 详解
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top