Функция обработки ошибок в т.ч. фатальных

Astral Man

We Will Rock You
Функция обработки ошибок в т.ч. фатальных

Написал функцию обработки ошибок.

вот она:
PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 'On');
ini_set('error_prepend_string', "<error_msg>");
ini_set('error_append_string', "</error_msg>\n");
ini_set('html_errors', 0);

function ims_error($buffer) {

    preg_match_all("~<error_msg>(((.)|(\x0A))*)</error_msg>~U", $buffer, $result, PREG_PATTERN_ORDER);
    
    if(!isset($result[1][0])) {
        return  $buffer;
    } else {
        foreach ($result[1] as $key => $val) {

            $val = trim($val);
            
            // FATAL ERROR
            if(eregi("^(Fatal error): (.*) in (.*) on line (.*)", $val, $reg)) {
                $_error_fatal[] = array(
                                      'msg'  => $reg[2],
                                      'file' => $reg[3],
                                      'line' => $reg[4]
                                  );
            }
            // WARNING
            if(eregi("^(Warning): (.*) in (.*) on line (.*)", $val, $reg)) {
                $_error_warning[] = array(
                                      'msg'  => $reg[2],
                                      'file' => $reg[3],
                                      'line' => $reg[4]
                                  );
            }
            // NOTICE
            if(eregi("^(Notice): (.*) in (.*) on line (.*)", $val, $reg)) {
                $_error_notice[] = array(
                                     'msg'  => $reg[2],
                                     'file' => $reg[3],
                                     'line' => $reg[4]
                                 );
            }
            
        }

        if(isset($_error_fatal))   $_error['FATAL ERROR'] = $_error_fatal;
        if(isset($_error_warning)) $_error['WARNING']     = $_error_warning;
        if(isset($_error_notice))  $_error['NOTICE']      = $_error_notice;
        
        $errors = "<div style=\"font-family: Courier New; font-size:12px\">";
        
        foreach($_error as $key => $_err) {
            $errors .= "<b>".$key."&nbsp;[".count($_err)."]</b><br>\n";
            foreach($_err as $key => $val) {
                   $errors .= "&nbsp;&nbsp;&nbsp;MSG&nbsp;&nbsp;-&nbsp;".$val['msg']."<br>\n";
                   $errors .= "&nbsp;&nbsp;&nbsp;FILE&nbsp;-&nbsp;".$val['file']."<br>\n";
                   $errors .= "&nbsp;&nbsp;&nbsp;LINE&nbsp;-&nbsp;".$val['line']."<br><br>\n";
            }
        }
        
        $errors .= "</div>";
        
        return $errors;
    }
    
}

ob_start("ims_error");
Ваше мнение? Стоит ли ее улучшать?
 

Фанат

oncle terrible
Команда форума
а у Котерова разве не было готовой?

-~{}~ 27.06.05 13:51:

и непонятен смысл функции.
я понимаю, что вывод ошибок сделан для примера.
Но ты же не для этого их перехватывал, чтобы вывести?
 

Astral Man

We Will Rock You
Фанат
У Котерова была функция для перехвата ошибок с помощью set_error_handler();
и фатальные ошибки соответственно мимо...

Сейчас сделан сам факт перехвата ошбок, дальше можно и в лог файл писать или вообще ничего не делать :)
 

Фанат

oncle terrible
Команда форума
для того, чтобы писать ошибки в лог, функция НЕ НУЖНА.

функция перехвата фатальных ошибок нужна только в том случае, если ты хочешь писать красивую заглушку на её месте.
И ВСЁ.

-~{}~ 27.06.05 14:12:

У Котерова была функция для перехвата ошибок с помощью set_error_handler();
и фатальные ошибки соответственно мимо...
это заблуждение.
 

Astral Man

We Will Rock You
Автор оригинала: Фанат
для того, чтобы писать ошибки в лог, функция НЕ НУЖНА.
А если я хочу в лог писать в определенном формате?

-~{}~ 27.06.05 14:13:

Автор оригинала: Фанат
для того, чтобы писать ошибки в лог, функция НЕ НУЖНА.

функция перехвата фатальных ошибок нужна только в том случае, если ты хочешь писать красивую заглушку на её месте.
И ВСЁ.

-~{}~ 27.06.05 14:12:


это заблуждение.
Ткни носом на страницу в книге...
я не нашел...
 

Фанат

oncle terrible
Команда форума
так и надо было писать - что тебе не для тела, а дурью помаяться.
я бы и время на тебя тратить не стал. тьфу.

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

-~{}~ 27.06.05 14:14:

Ткни носом на страницу в книге...
при чём здесь книга?
 

DiTHER

bang bang
довольно грязное (с позволения dklab) решение проблемы.

я делал схему set_error_handler + set_exception_handler + gz_handler. Фатальные ошибки находил проще - если скрипт остановился криво, то значит фатал. Делал лишь для одного - прислать себе на почту, дабы решить задачу более оперативно.

Когда начинал делал не знал насколько геморно и некрасиво ловить фатальные ошибки. Посему вариант оперативной работы с логами все же КУДА лучше.

Но грязно искать все ошибки в хвосте обрезанного вывода - это, имхо, уж слишком.
 

F0x

Новичок
Гораздо проще установить общий обработчик на запись всех сообщений в файл, в котором все будет в 100 раз наглядней
 

DiTHER

bang bang
кто тебе мешает сказать $executed = true когда выполнится последняя строчка? Fatal Error тем и плох что на нём скрипт останавливается, а если скрипт дойдёт до конца - то выполняться и error handlers для ошибок
 
Сверху