2014-02-14 10 views
-1

Как подавить E_NOTICE в этой функции php, я не хочу получать электронную почту, о переменных без декларации, с сайта-производителя?set_error_handler, Как подавить E_NOTICE в php

Я попытался исключить случай комментария 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"); 
?> 
+2

Не подавлять предупреждения. Устраните проблему, которая вызывает их в первую очередь. –

+0

_I не хочу получать электронную почту, о не объявленных переменных_ - да. PHP делает предположения о необъявленных переменных, которые могут не соответствовать ожидаемому. Производственный сайт не должен генерировать никаких сообщений вообще при нормальной работе. –

+0

показать все ошибки, за исключением E_NOTICE и E_USER_NOTICE. set_error_handler ("errorHandler", E_ALL & ~ E_NOTICE & ~ E_USER_NOTICE); – Anders

ответ

1

поставить это в верхней части страницы:

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'); 

set_error_handler рассказывает, какие функции использовать, когда есть errro , эта функция будет регистрировать серьезные ошибки (not notices) только в файле с ошибками. php

1

добавить break заявление после того, как case E_NOTICE

case E_NOTICE: 
    break; 
case E_USER_NOTICE: 
case E_DEPRECATED: 
case E_USER_DEPRECATED: 
case E_STRICT: 
    ... 
1
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"); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^