// Handle errors in the framework set_error_handler('errorHandler'); set_exception_handler('exceptionHandler'); register_shutdown_function('shutdownHandler'); // TODO: Move this into a Session class and use a config setting // to decide if sessions are allowed to auto-start. session_start(); // Init (loads application by route) $app_classname = $app_ns . '\\Application'; $app = new $app_classname(); $router = new AltoRouter(); $router->setBasePath($app->config('basepath')); $app->defineRoutes($router); $router_match = $router->match(); if ($router_match && is_callable($router_match['target'])) { $response = call_user_func_array($router_match['target'], $router_match['params'])->getResponse(); } else { throw new Booya\Exception\HttpException('Path ' . $_SERVER['REQUEST_URI'] . ' not found', 404); } } catch (Booya\Exception\HttpException $ex) { http_response_code($ex->getCode()); $response_class = $app->config('response_class'); $response = new $response_class(); $controller = new Booya\ErrorController($app, 'error', $ex->getCode(), $response); $controller->setHttpException($ex); } if (is_object($response) && $response instanceof Booya\Response) { $response->render(); } else { echo 'No response from application'; }
/** * 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; }