ошибки получить по почте

Тема в разделе "PHP", создана пользователем sultan347, 12 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Хочу запретить вывод ошибок скрипта пользователям, а их самих получить по е-маил, причем все возможные ошибки (MySQL запросы, ощибки пхп, неверные сылки, и даже, если возможно, неправильная кодировка отображения в браузере пользователя). На последнюю не верю, а остальные как реализовать?

    1), для начала, надо запретить вывод ошибок на экран, то есть добавить в хтаккесс
    2) в самое начало скрипта
    3)Допустим создали функцию отправки по е-маил, который вызывается по fmail($body);
    4) Далее??

     
  2. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
  3. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Я не понимаю англ, но там нашел Перейти по ссылке
    только не понял, как пользоваться с ним
    в конец скрипта дописал
    PHP:
    if (isset($php_errormsg)) {echo $php_errormsg;}
    Искуственно создаю ошибку, переменная $php_errormsg все равно пустой что ли.. Версия пхп 5.2.6
     
  4. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    вначало скрипта добавь следующую строку
    PHP:
    ini_set("track_errors"true);
     
    sultan347 нравится это.
  5. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    что то не интересно в каждый php файл совать функцию обработки ошибок, если учесть еще что не один сайт, можно ли этот обработчик засунуть прямо в php.ini ?
     
  6. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    можно в php.ini указать файл для логов, но этот файл необходимо обрабатывать отдельным скриптом.
     
  7. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    PHP:
    set_error_handler("my_error_handler");

    function 
    my_error_handler$errno$errstr$errfile$errline )
    {
        
    mail(Ну и тут вобщем отправляешь errno$errstr$errfile$errline на нужный мал);
    }
    Вставляешь в config/ini/и так далее скрипт который подключаеться другие.
    Вобщем както-так
     
  8. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Я остановился на таком обработчике пока:
    PHP:
    $MSG '';

    function 
    my_error_handler($code,$msg,$file,$line)
    {
        global 
    $MSG;
        if (
    $code == E_USER_NOTICE) {$MSG $msg; Return;}
        if (
    $code == E_USER_WARNING) {$MSG $msg;error_mail("E_USER_WARNING",$msg,$file,$line);Return;}
        if (
    $code == E_USER_ERROR) {$MSG 'Критическая Ошибка!';error_mail("E_USER_ERROR",$msg,$file,$line);die("E_USER_ERROR");}
        
        if ((
    $code == E_NOTICE) or (error_reporting()==0)) {return;}
        if (
    $code == E_ERROR) {error_mail("E_ERROR",$msg,$file,$line);die("E_ERROR");}
        if (
    $code == E_WARNING) {error_mail("E_WARNING",$msg,$file,$line);Return;}
        
    }

    function 
    error_mail($code,$msg,$file,$line)
    {
        
    $text'Время: '.date("Y-m-d H:i")."\nRemote IP:".$_SERVER['REMOTE_ADDR']."\n";
        
    $text.= "\n".$code.": ".$msg."\n\nIn ".$file." (line ".$line.")\n\n\nВеб-адрес: ".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."\nРеферер: ".$_SERVER['HTTP_REFERER']."\nЮзер:".$_SESSION['log']."\n\n\n---";
        
    send_mail("mail@mail.ru",$code,$text);
        unset(
    $text);
    }

    error_reporting (E_ALL & ~E_NOTICE);
    set_error_handler('my_error_handler');
    Да, знаю, можно в php.ini написать
    PHP:
    error_log filename
    а как этот лог обрабатывать, примерно?
     
  9. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Ошибка скрипта? Или сервера?

    не стого не всего, обрушился ошибки такие:

    PHP:
    E_WARNINGsession_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie headers already sent by (output started at /home/user/site.ru/public_html/index.php:1)

    In /home/user/head.php (line 4)
    и
    PHP:
    E_WARNINGsession_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter headers already sent (output started at /home/user/site.ru/public_html/index.php:1)

    In /home/user/head.php (line 4)
    в четвертой строке head.php стоит session_start(); :nezn:
     
  10. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Посмотрите файл index.php первую строку. Там может быть случайно вставлен вывод на экран (echo, print), или просто если файл формата utf то в нем вначале может быть BOM (советую сохранить файл в другом редакторе).
     
    sultan347 нравится это.
Статус темы:
Закрыта.