我自定义了错误和异常处理函数(在核心文件中),并通过以下方式设置它们:
set_error_handler('custom_error_handler');
set_exception_handler('custom_exception_handler');
在代码的其他地方,我验证了来自$_GET superglobal的请求的GET参数。即使有些GET变量可能没有被传递/设置,我也会验证并存储它们。为了避免用户错误,我将errorcontrol PHP操作符即“@”,它成功地向用户隐藏了不必要的错误。
另外,我很熟悉'@'运算符的工作原理,基本上它会在表达式中包含该运算符的行上将错误报告设置为0,然后将其重新打开。
我的目标是仍然有自定义错误处理函数(主要是为了更容易调试和错误输出,我厌倦了PHP在错误时输出的不必要的HTML标记),但保留不记录用户错误的选项,这些自定义错误处理函数捕获,即使运算符'@'用于某些表达式。
下面是更详细的问题示例:
function custom_error_handler($errno, $errstr, $errfile, $errline) {
$res = [
'error_number' => $errno,
'error_severity' => ERROR_LEVELS[$errno], // custom constant to get textual severity of the error (not important)
'error_message' => $errstr,
'error_file' => $errfile,
'error_line' => $errline
];
// logging to file with UID...
if(DEBUG) { // if debugging is on (false for production)
http_response_code(500);
print_r(json_encode($res));
}
else {
http_response_code(500);
print_r(json_encode(['error_uid' => $log_uid]));
exit;
}
}
set_error_handler('custom_error_handler');
echo $x;
// unset/unknown variable - should print out error and continue with execution since it is a notice (or warning I'm not sure)
$guid = @$_GET['guid']
// should not print error if '$_GET['guid']' is not set/is empty
在此设置中,两个错误都会被记录下来!
提前感谢!
1条答案
按热度按时间13z8s7eq1#
这么做
所以整个函数看起来就像
任何人都可以更好地学习和理解,如果他们读自己,所以:
检查this问题和最新的答案(对于PHP > 8.0.0)
以及文档中的用户通知