2010-02-16 5 views
4

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

set_error_handler("exception_error_handler"); 

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

+2

refactormycode.com –

+0

Вам нужно установить обработчик ошибок с 'set_error_handler'. В противном случае, каков ваш вопрос? Что делает ваш код не так, как вы хотите? Более конкретно. – meagar

ответ

6

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

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

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

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

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

НТН

C.

2

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

Посмотрите на этот метод от Kohana.

/** 
* 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.

+0

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