static function _exceptionHandler(Exception $exception) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } $htmlMode = !self::$ajaxDetected && !preg_match('#^Content-Type: (?!text/html)#im', implode("\n", headers_list())); try { if (self::$productionMode) { self::log($exception, self::ERROR); if (self::$consoleMode) { echo "ERROR: the server encountered an internal error and was unable to complete your request.\n"; } elseif ($htmlMode) { echo "<!DOCTYPE html><meta name=robots content=noindex><meta name=generator content='Nette Framework'>\n\n"; echo "<style>body{color:#333;background:white;width:500px;margin:100px auto}h1{font:bold 47px/1.5 sans-serif;margin:.6em 0}p{font:21px/1.5 Georgia,serif;margin:1.5em 0}small{font-size:70%;color:gray}</style>\n\n"; echo "<title>Server Error</title>\n\n<h1>Server Error</h1>\n\n<p>We're sorry! The server encountered an internal error and was unable to complete your request. Please try again later.</p>\n\n<p><small>error 500</small></p>"; } } else { if (self::$consoleMode) { echo "{$exception}\n"; } elseif ($htmlMode) { NDebugHelpers::renderBlueScreen($exception); } elseif (!self::fireLog($exception, self::ERROR)) { self::log($exception); } } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } } catch (Exception $e) { echo "\nNette\\Debug FATAL ERROR: thrown ", get_class($e), ': ', $e->getMessage(), "\nwhile processing ", get_class($exception), ': ', $exception->getMessage(), "\n"; exit; } }