php - 在会话中存储自定义错误处理消息
问题描述
如果模式是生产模式,我不想向用户显示任何致命错误或警告等。我想要实现的是检查是否发生任何类型的错误,将数据存储在会话数组中,而不是重定向到某个自定义页面。
问题
重定向到其他页面后,存储所有错误的会话数组显示为空?
模式生产
比执行 error_handler 函数
if($GLOBAL['MODE'] == 'PROD'){
ini_set('log_errors',FALSE);
set_error_handler("errorHandler");
}
代码
ini_get(0);
//Declare session array
$_SESSION['CUSTOM_ERROR'] = array();
register_shutdown_function("shutdownHandler");
function errorHandler($error_level, $error_message, $error_file,
$error_line, $error_context)
{
$error = " Msg:" . $error_message . " file:" . $error_file . " ln:" .
$error_line;
switch ($error_level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_PARSE:
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "fatal");
break;
case E_USER_ERROR:
case E_RECOVERABLE_ERROR:
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "error");
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
//Store all errors in session array <<<<---------
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "warn");
break;
case E_NOTICE:
case E_USER_NOTICE:
$_SESSION['CUSTOM_ERROR'] = $error;
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "info");
break;
case E_STRICT:
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "debug");
break;
default:
$_SESSION['CUSTOM_ERROR'] = $error;
mylog($error, "warn");
}
}
function shutdownHandler() //will be called when php script ends.
{
$lasterror = error_get_last();
switch ($lasterror['type'])
{
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
case E_RECOVERABLE_ERROR:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_PARSE:
$_SESSION['CUSTOM_ERROR'] = $error;
$error = "[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" .
$lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" .
$lasterror['line'];
mylog($error, "fatal");
}
}
function mylog($error, $errlvl)
{
if($error){
//redirect to custom-page
}
}
自定义页面
print_r($_SESSION['CUSTOM_ERROR']); //Problem its show empty
die;
为了更好地理解问题,我想简单地实现这一点
$_SESSION['CUSTOM_ERROR'] = set_error_handler("errorHandler");
if(!empty($_SESSION['CUSTOM_ERROR'])){
//redirect
}
解决方案
推荐阅读
- c# - 如果数据库中已存在特定条目,如何测试 [TDD]
- kotlin - Kotlin(可变)列表
- spring-boot - 使用 feign 客户端调用其他服务 URL 会导致邮递员出错
- c# - 通过 API 将 .Net Core Identity 与多个 .Net Core Web 应用程序一起使用?
- python - 从字典值中命名以前未定义的变量名称?
- amazon-web-services - Elastic Beanstalk 将 nginx 配置文件存储在哪里?以及如何修改它?
- sql - 有条件地关联新表
- r - 尝试编织某些内联代码时发生错误(平均值计算)
- python - 使用数据框中多行的信息创建新变量
- javascript - 使用键盘上的键操作元素的位置