/** * Custom error handler */ function errorHandler($errno, $errstr, $errfile, $errline) { if (error_reporting() === 0) { $GLOBALS['ignore_shutdown_error'] = true; return false; } $GLOBALS['ignore_shutdown_error'] = false; // Resetting the error handler to PHP's was added in PHP 5.5 if (version_compare(phpversion(), '5.5.0', '>=')) { set_error_handler(null); } else { // This is for older PHP versions, it SHOULD restore the built-in one, // but it's not for sure. restore_error_handler(); } // Remove any previous output data if (ob_get_length()) { ob_end_clean(); } // Sometimes we might be inside a "deeper" buffer when the // error occures, so we make sure all buffers are cleared while (ob_get_level() > 1) { ob_end_clean(); } $message = $errstr . ' in file ' . $errfile . ' on line ' . $errline; if (!DEV) { $backtrace = array(); logMsg('error', $message); } else { $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 5); if (isset($backtrace[0]) && $backtrace[0]['function'] == 'errorHandler') { unset($backtrace[0]); } } http_response_code(500); global $app; if (is_object($app)) { $response_class = $app->config('response_class'); $response = new $response_class(); $controller = new \Booya\ErrorController($app, 'error', '500', $response); $controller->setError($errno, $errstr, $errfile, $errline, $backtrace); $response->render(); } else { echo $errstr . ' on line ' . $errline . ' in file ' . $errfile; } die; }