From 4b838af40d77684539dd40461bd92e6e453fe675 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Tue, 28 Oct 2014 23:46:45 +0200 Subject: Add a real exception handler Close #1590 Close #3200 --- system/core/Common.php | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 8bc9d015e..4277ef5b1 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -570,17 +570,17 @@ if ( ! function_exists('set_status_header')) // -------------------------------------------------------------------- -if ( ! function_exists('_exception_handler')) +if ( ! function_exists('_error_handler')) { /** - * Exception Handler + * Error Handler * - * This is the custom exception handler that is declared at the top - * of CodeIgniter.php. The main reason we use this is to permit + * This is the custom error handler that is declared at the (relative) + * top of CodeIgniter.php. The main reason we use this is to permit * PHP errors to be logged in our own log files since the user may - * not have access to server logs. Since this function - * effectively intercepts PHP errors, however, we also need - * to display errors based on the current error_reporting level. + * not have access to server logs. Since this function effectively + * intercepts PHP errors, however, we also need to display errors + * based on the current error_reporting level. * We do that with the use of a PHP error template. * * @param int $severity @@ -589,7 +589,7 @@ if ( ! function_exists('_exception_handler')) * @param int $line * @return void */ - function _exception_handler($severity, $message, $filepath, $line) + function _error_handler($severity, $message, $filepath, $line) { $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity); @@ -632,6 +632,35 @@ if ( ! function_exists('_exception_handler')) // ------------------------------------------------------------------------ +if ( ! function_exists('_exception_handler')) +{ + /** + * Exception Handler + * + * Sends uncaught exceptions to the logger and displays them + * only if display_errors is On so that they don't show up in + * production environments. + * + * @param Exception $exception + * @return void + */ + function _exception_handler($exception) + { + $_error =& load_class('Exceptions', 'core'); + $_error->log_exception('error', 'Exception: '.$exception->getMessage(), $exception->getFile(), $exception->getLine()); + + // Should we display the error? + if (ini_get('display_errors')) + { + $_error->show_exception($exception); + } + + exit(1); // EXIT_ERROR + } +} + +// ------------------------------------------------------------------------ + if ( ! function_exists('_shutdown_handler')) { /** -- cgit v1.2.3-24-g4f1b