<?php
ini_set('display_errors','On');
error_reporting(E_ALL);
//未捕获异常的用户定义函数
set_exception_handler('myException');
//设置用户自定义的错误处理函数
//error_get_last获取不到set_error_handler之后的err,但是set_error_handler之前的错误还是可以获取到。
set_error_handler('myError');
//deprecated: 最低级别的错误,表示"不推荐, 不建议"。例如在php 5中使用了ereg系列的正则函数就会出现。这类错误一般由于使用了不推荐的、过时的函数或语法造成。不影响程序正常运行,但建议修正。
//notice: 一般指语法中存在不恰当的地方。如使用变量但是未定义就会报此错误。不影响程序正常流程。
//warning: 较高级别的错误,在语法中出现很不恰当的情况才会出现此错误,比如函数参数不匹配。会导致得不到预期的结果,需要修改代码。
//fetal error: 致命错误,直接导致程序终止运行。这类错误必须修改。
//prase error: 语法解析错误,上面几种都属于运行时错误,此错误在运行前就会抛出。
//@抑制错误输出,不影响set_error_handler的捕获。
//@不能抑制异常的传递
@ff();
$error = error_get_last();
var_dump($error);
//取得程序中最后一个错误信息(包括Error、 Warning、Notice等所有的错误)
//array(4) {
// ["type"]=>
// int(2)
// ["message"]=>
// string(16) "Division by zero"
// ["file"]=>
// string(21) "D:\doc\test\index.php"
// ["line"]=>
// int(17)
//}
function ff(){
try{
$c = 2/0;
$c = 2/0;
$a = [1,2,3,4,5,6,7,8];
foreach ($a as $k=>$v){
if($k == 3) unset($a[$k]);
//var_dump($a[$k]);
}
throw new Exception('dfsfsdf');
var_dump($a);
}catch (Exception $e){
var_dump('wwwwwwwwwww');
var_dump($e->getMessage());
}
}
function myException($exception)
{
echo "my " , $exception->getMessage();exit;
}
//$error_level
//2 E_WARNING 运行时非致命的错误。没有停止执行脚本。
//8 E_NOTICE 运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生。
//256 E_USER_ERROR 用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR。
//512 E_USER_WARNING 用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING。
//1024 E_USER_NOTICE 用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE。
//4096 E_RECOVERABLE_ERROR 可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())。
//8191 E_ALL 所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)。
function myError($error_level, $error_message, $error_file = '', $error_line = 0, $error_context = [])
{
var_dump("err");
var_dump(compact('error_level','error_message','error_file','error_line','error_context'));
//string(3) "err"
//array(5) {
// ["error_level"]=>
// int(2)
// ["error_message"]=>
// string(16) "Division by zero"
// ["error_file"]=>
// string(21) "D:\doc\test\index.php"
// ["error_line"]=>
// int(40)
// ["error_context"]=>
// array(0) {
// }
//}
}
PHP异常捕获
最新推荐文章于 2024-04-14 10:33:27 发布