Рекомендации по обработке глобальных ошибок в PHP?

Я использовал класс, который преобразует ошибки в исключения из PHP 5, и регистрирует ошибки в файле и / или отправляет их по электронной почте в указанную учетную запись. Есть лучший способ сделать это? Есть что-то в этом, я знаю, может быть лучше. Я использую set_error_handler.

set_error_handler("exception_error_handler"); 

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

Ваш код для устранения ошибок должен быть абсолютно пуленепробиваемым.

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

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

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

Средства обработки файлов PHP не поддаются параллельному доступу, поэтому, хотя я бы рекомендовал локально регистрировать любые события, не записывать файлы из вашего кода – используйте интерфейс syslog. Обязательно отправьте электронное письмо с соответствующими данными после того, как вы отправили его в syslog.

НТН

C.

Я бы не сбросил эту логику в обработчик ошибок.

Взгляните на этот метод из Коханы .

 /** * PHP error handler, converts all errors into ErrorExceptions. This handler * respects error_reporting settings. * * @throws ErrorException * @return TRUE */ public static function error_handler($code, $error, $file = NULL, $line = NULL) { if (error_reporting() & $code) { // This error is not suppressed by current error reporting settings // Convert the error into an ErrorException throw new ErrorException($error, $code, 0, $file, $line); } // Do not execute the PHP error handler return TRUE; } 

Очистите и сделайте то, что описывает метод. Теперь вы можете переместить обработку в обработчик исключений или внутри блока catch.