Exemple #1
0
    // 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';
}
Exemple #2
0
/**
 * 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;
}