1. PHP / Говнокод #7613

    +150

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    // don't show any errors to end user
    error_reporting(0);
    	
    // error handler function
    function my_error_handler($errno, $errstr, $errfile, $errline) {
    		
        $date = date('d/M/Y:H:i:s O');
    		
        // \r\n for cozy look on win machines
        $error_str = "{$date} | [error] #{$errno}: {$errfile}:{$errline} {$errstr} \r\n";
    		
        // *.txt for win machines
        error_log($error_str, 3, 'C:\AppServ\www\error_log.txt');
    		
        // don't execute php internal error handler
        return true;
    }
    
    set_error_handler('my_error_handler');
    	
    // throws error
    echo date();

    Рубрика: Советы от Говнокода.
    В связи с #7594. Fatal errors не ловит (пхп, хуле), но их и не нужно показывать пользователю, все остальные ошибки пишем в лог на сервер.
    Ошибка в логе выглядит так:
    21/Aug/2011:16:50:52 +0000 | [error] #2: C:\AppServ\www\4.php:22 date() expects at least 1 parameter, 0 given

    Запостил: Yurik, 21 Августа 2011

    Комментарии (14) RSS

    • и зачем это вот здесь ?
      Ответить
    • что плохо, кроме вообще концепции и абсолютного пути?
      Ответить
      • Я только что набросал, страйко то показывает ошибки, пусть что-нибудь типа этого сделает. Абсолютный путь исключительно в качестве примера. Нужно было запостить как коммент к тому посту, ну да ладно. А чем плоха концепция?
        Ответить
        • а то, что на это дело надо сервак науськивать через php.ini, а не программно ловить. Точнее, ловить надо, но только что бы юзеру показать страничку "упс, не получилось"
          Ответить
          • Упс, не получилось надо ловить, обработка ошибок как в этом посте это вроде как "накрайняк". Т. е. показывать ошибки парсера пользователю -- гиблое дело, а если отключить их показ -- не узнаешь, вдруг какие-то ошибки на продакшене выползут, если все таки какие-то ошибки есть -- увидишь их в логе. Fatal errors отлавливаются при дебаге. "Упс, не получилось" это для пользователя, т. е. в кондишинах if/else, ну или исключения, кому как нравится.
            Ответить
            • log_errors = 1
              error_log = /path/to/php-error.log
              это для отлавливаемых ошибок. ошибки парсера можно словить либо через register_shutdown_function, либо через жопу как предлагает Котеров - с помощью ob_start/ob_end/ob_get_contents функций (но для этого нужно включить выдачу ошибок в броузер и парсить эту выдачу)
              Ответить
    • есть способы ловить некоторые фаталы через шатдаун функции
      Ответить
    • >А чем плоха концепция?
      Какая ещё на фиг «концепция»?
      Идея средней руки.
      Вы программист или маркетолог?
      Ответить
    • Про register_shutdown_function не знал, пошёл знакомиться.
      Ответить
      • полезная вещь, передает в хэндлер тип ошибки, если он равен 1 то это как раз таки фатал. но не все фаталы ловит.
        Ответить
    • Инноватор, блеать.
      Ответить
    • .
      Ответить
    • Сгодится как костыль для тяжкого наследия исторического PHP, то есть, для встроенных функций, которые не бросают исключения, а давить собаками - ересь.
      Ответить

    Добавить комментарий