set_error_handler,如何在php中抑制E_通知
在这个php函数中,我不想从生产站点收到关于非declaret变量的电子邮件,如何抑制E_通知 我已经尝试过注释case E_NOTICE:但是程序只是跳转到默认值:exit(“未知错误在$errfile:$errline”);接近脚本的结尾 我希望有机会评论掉我不想要的错误反馈set_error_handler,如何在php中抑制E_通知,php,suppress,e-notices,Php,Suppress,E Notices,在这个php函数中,我不想从生产站点收到关于非declaret变量的电子邮件,如何抑制E_通知 我已经尝试过注释case E_NOTICE:但是程序只是跳转到默认值:exit(“未知错误在$errfile:$errline”);接近脚本的结尾 我希望有机会评论掉我不想要的错误反馈 <?php function errorHandler($errno, $errstr, $errfile, $errline) { function errorMail($errno, $errst
<?php
function errorHandler($errno, $errstr, $errfile, $errline) {
function errorMail($errno, $errstr, $errfile, $errline) {
$recvmail = "yourmail";
$fejlkode = array(
1 => "E_ERROR",
2 => "E_WARNING",
4 => "E_PARSE",
8 => "E_NOTICE",
16 => "E_CORE_ERROR",
32 => "E_CORE_WARNING",
64 => "E_COMPILE_ERROR",
128 => "E_COMPILE_WARNING",
256 => "E_USER_ERROR",
512 => "E_USER_WARNING",
1024 => "E_USER_NOTICE",
2048 => "E_STRICT",
4096 => "E_RECOVERABLE_ERROR",
8192 => "E_DEPRECATED",
16384 => "E_USER_DEPRECATED",
);
$mail = new PHPMailer;
$mail->From = 'mailSender';
$mail->FromName = 'your firm name';
$mail->AddAddress($recvmail, "your name"); // Add a recipient
$mail->SetLanguage('dk', './');
$mail->Subject = utf8_decode("Fejl type:" . $errno .' -> '. $fejlkode[$errno]);
$mail->Body = utf8_decode($errstr.' <br>'.$errfile.': '.$errline);
$mail->AltBody = $errstr.$errfile.$errline.$errno;
if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
}
switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
errorMail($errno, $errstr, $errfile, $errline);
break;
case E_WARNING:
case E_USER_WARNING:
errorMail($errno, $errstr, $errfile, $errline);
break;
case E_ERROR:
case E_USER_ERROR:
errorMail($errno, $errstr, $errfile, $errline);
exit("FATAL error $errstr at $errfile:$errline");
default:
exit("Unknown error at $errfile:$errline");
}
}
set_error_handler("errorHandler");
?>
在
案例通知后添加中断
声明
case E_NOTICE:
break;
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
...
将以下内容放在页面顶部:
function serious_log_errors($number, $message, $file, $line, $vars)
{
if ( ($number !== E_NOTICE) && ($number < 2048) )
{
$forlogfile = "A serious error ($number) occurred on line $line and in the file: $file. $message.\r\n";
error_log($forlogfile, 3, 'errors.php');
}
}
set_error_handler('serious_log_errors');
函数严重日志错误($number、$message、$file、$line、$vars)
{
如果($number!==E_通知)和($number<2048))
{
$forlogfile=“第$line行和文件$file.$message中发生严重错误($number)。\r\n”;
error_log($forlogfile,3,'errors.php');
}
}
设置错误处理程序(“严重日志错误”);
set_error_处理程序告诉它在出现错误时使用什么函数。该函数只会将严重错误(而不是通知)记录到名为errors的文件中。php不要抑制警告。首先解决导致它们的问题。我不想收到关于未声明变量的电子邮件-是的,你会收到。PHP假设未声明的变量可能与您期望的不匹配。生产站点在正常运行时不应生成任何消息。显示所有错误,E_通知和E_用户通知除外。设置错误处理程序(“错误处理程序”,E_ALL&~E_通知&~E_用户通知);
function serious_log_errors($number, $message, $file, $line, $vars)
{
if ( ($number !== E_NOTICE) && ($number < 2048) )
{
$forlogfile = "A serious error ($number) occurred on line $line and in the file: $file. $message.\r\n";
error_log($forlogfile, 3, 'errors.php');
}
}
set_error_handler('serious_log_errors');