问题描述
将我的 PHP 版本从 7.2 升级到 8.0.3 后,我的自定义错误处理程序坏了。
错误如下:
[date/time] Trying to access array offset on value of type null | err_error_log.PHP | line:36 (warn)
此处发生错误:switch ($lasterror['type']){
完整代码如下:
<?PHP
set_error_handler("errorHandler");
register_shutdown_function("shutdownHandler");
function errorHandler($error_level,$error_message,$error_file,$error_line,$error_context=""){
$error = $error_message." | ".$error_file." | line:".$error_line;
switch ($error_level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_PARSE:
mylog($error,"(fatal)");
break;
case E_USER_ERROR:
case E_RECOVERABLE_ERROR:
mylog($error,"(error)");
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
mylog($error,"(warn)");
break;
case E_NOTICE:
case E_USER_NOTICE:
mylog($error,"(info)");
break;
case E_STRICT:
mylog($error,"(debug)");
break;
default:
mylog($error,"(warn default)");
}
}
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_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
case E_NOTICE:
case E_USER_NOTICE:
case E_STRICT:
case E_PARSE:
$error = $lasterror['message']." | ".$lasterror['file']." | line:".$lasterror['line'];
mylog($error,"fatal");
}
}
function mylog($error,$errlvl){
error_log($error." ".$errlvl."\n"."https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI] ",0);
$filename="tmp/variables.txt";
if (file_exists($filename)){
$bestand=fopen($filename,"r");
$variables=fread($filename,filesize($filename));
error_log("Variabels: ".$variables,0);
}
}
?>
可能这是愚蠢的事情,但我似乎无法解决它...它与 $lasterror['type'] 为空或其他有关,如果我从这个主题正确理解它:{{3 }}
感谢任何帮助! 提前谢谢!
修改如下:
function shutdownHandler(){ //will be called when PHP script ends.
$lasterror = error_get_last();
if ($lasterror!=null){
switch ($lasterror['type']){ ...
谢谢@El_Vanja
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)