Exemple #1
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;
}