set_error_handler,如何在 php 中抑制E_NOTICE



如何在此php函数中抑制E_NOTICE,我不想从生产站点收到有关非声明变量的电子邮件?

我试图在脚本末尾附近列出注释情况E_NOTICE:但随后程序会跳转到默认值:exit("$errfile:$errline 处的未知错误");

我希望有机会注释掉我不想要的错误反馈??

<?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");
?>

把它放在页面的顶部:

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.rn";  
error_log($forlogfile, 3, 'errors.php'); 
 }  
}
set_error_handler('serious_log_errors'); 

set_error_handler告诉它在出现错误时使用什么函数。 该函数只会将严重错误(不通知)记录到名为 errors 的文件中.php

case E_NOTICE后添加break语句

case E_NOTICE:
    break;
case E_USER_NOTICE:
case E_DEPRECATED:
case E_USER_DEPRECATED:
case E_STRICT:
    ...
switch ($errno) {
    case E_NOTICE:
        break; // Do nothing
    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");
    }
}

相关内容

最新更新