Статьи

Ловля ошибок кода на сайте.

Создана 17.02.2012  

В своих пректах я использую один маленький премчик для отслеживания программных ошибок - уведомление об ошибках на почту.
Смысл в том, чтобы перехватывать все сообещения интерпритатора  об ошибках и посылать их на заданный емыл.

Зачем это нужно? Да затем что при возникновении любой ошибки вы получите уведомление о ней на свой адрес с указанием что за ошибка была, при каких входнх параметрах и в какой строке какого файла - очень удобно.

Код очень простой, но тем ни менее очень полезный:

$old_error_handler = set_error_handler("tnvErrorHandler");


function tnvErrorHandler($errno, $errstr, $errfile, $errline)
{
$emailReporting=false;
$screenReporting=false;
$email='Тут ваш емыл.';
global $HTTP_SERVER_VARS;
$ext='';
reset($_GET);
while (list($key, $val) = each($_GET)) {
    $ext.="$key => $val\n<br>";
    }

    switch ($errno) {
    case E_USER_ERROR:
     $errMsg="<b>My ERROR</b> [$errno] $errstr<br />\n";
     $errMsg.="  Fatal error on line $errline in file $errfile";
     $errMsg.=", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
     $errMsg.="Aborting...<br />\n";
     $errMsg.="<br />\n$ext<br />\n";
        if ($emailREporting) {
         mail($email,'Error on site '.$HTTP_SERVER_VARS['SERVER_NAME'],$errMsg);
         }
     if ($screenReporting) {
         echo '<table background="#FF3333"><tr><td>'.$errStr.'</td></tr></table>';
      }
      exit(1);
      break;


    case E_USER_WARNING:
        $errMsg="<b>My WARNING</b> [$errno] $errstr<br />\n";
        $errMsg.="Error on line $errline in file $errfile";
        $errMsg.="<br />\n$ext<br />\n";
        if ($emailReporting) {
         mail($email,'Error on site '.$HTTP_SERVER_VARS['SERVER_NAME'],$errMsg);
         }
     if ($screenReporting) {
         echo '<table background="#FF3333"><tr><td>'.$errMsg.'</td></tr></table>';
      }
        break;

    case E_USER_NOTICE:
        $errMsg="<b>My NOTICE</b> [$errno] $errstr<br />\n";
        $errMsg.="Error on line $errline in file $errfile";
        $errMsg.="<br />\n$ext<br />\n";
        if ($emailReporting) {
         mail($email,'Error on site '.$HTTP_SERVER_VARS['SERVER_NAME'],$errMsg);
         }
     if ($screenReporting) {
         echo '<table background="#FF3333"><tr><td>'.$errMsg.'</td></tr></table>';
      }
        break;

    default:
        $errMsg="Unknown error type: [$errno] $errstr<br />\n";
        $errMsg.="Error on line $errline in file $errfile";
        $errMsg.="<br />\n$ext<br />\n";
         if ($emailReporting) {
         mail($email,'Error on site '.$HTTP_SERVER_VARS['SERVER_NAME'],$errMsg);
         }
     if ($screenReporting) {
         echo '<table background="#FF3333"><tr><td>'.$errMsg.'</td></tr></table>';
      }
        break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}