2010-08-17 2 views
0

ранее в PHP 4 я создал собственный обработчик ошибок (ниже) для обработки собственных ошибок при запуске и общих ошибок PHP. Но теперь PHP 5 вводит Исключения, т. Е. Я использую PDO для манипуляции с базами данных, и я не уверен, как обрабатывать как общие ошибки PHP, так и эти Исключения?Как обрабатывать php-ошибки и исключения централизованно

function errorHandler($errno, $errstr, $errfile, $errline){ 
    switch ($errno) { 
    case E_USER_ERROR: 
    // Send an e-mail to the administrator 
    error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); 

    // Write the error to our log file 
    error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    case E_USER_WARNING: 
    // Write the error to our log file 
    error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    case E_USER_NOTICE: 
    // Write the error to our log file 
    error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    default: 
    // Write the error to our log file 
    error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 
} 

    // Don't execute PHP's internal error handler 
    return TRUE; 

}

+0

Не относится к PHP5, пожалуйста, отметьте правильно. http://php.net/manual/en/function.set-error-handler.php – TheLQ

ответ

1

Вы можете использовать set_exception_handler() иметь дело с неперехваченными исключениями в пользовательской функции.

«Правильный» способ, однако, будет для вас try ... catch исключением, когда, например, выполнение запроса и использование вашей пользовательской функции для его регистрации.

+0

Привет, Пекка, я уже использую try/catch вокруг моих запросов, но как бы я использовал одну и ту же пользовательскую функцию im, использующую для обработки ошибки? try { $ dbh = new PDO ("mysql: host = $ hostname; dbname = mysql", $ username, $ password); /*** эхо сообщение о том, что мы подключили ***/ echo 'Connected to database'; } catch (PDOException $ e) { echo $ e-> getMessage(); } – htmlr

+0

@mindfriction вы можете вызвать ошибку, чтобы получить свою пользовательскую функцию - исключение будет пуристом, но я не вижу ничего структурного в этом отношении - вы регистрируете сообщение в любом случае. –

+0

У JUst была мысль тогда, couldnt я бросаю и ErrorException в моем пользовательском обработчике ошибок? И затем настройте собственный обработчик исключений, чтобы снова управлять всем централизованно (?) ... Задержка будет проверяться завтра, когда я подписываю – htmlr