Пример #1
0
 /**
  * Handler to catch uncaught exception.
  * @param  Exception
  * @return void
  * @internal
  */
 public static function _exceptionHandler(Exception $exception)
 {
     if (!headers_sent()) {
         // for PHP < 5.2.4
         $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
         header($protocol . ' 500', TRUE, 500);
     }
     try {
         if (self::$productionMode) {
             try {
                 self::log($exception, self::ERROR);
             } catch (Exception $e) {
                 echo 'FATAL ERROR: unable to log error';
             }
             if (self::$consoleMode) {
                 echo "ERROR: the server encountered an internal error and was unable to complete your request.\n";
             } elseif (self::isHtmlMode()) {
                 require dirname(__FILE__) . '/templates/error.phtml';
             }
         } else {
             if (self::$consoleMode) {
                 // dump to console
                 echo "{$exception}\n";
                 if ($file = self::log($exception)) {
                     echo "(stored in {$file})\n";
                     if (self::$browser) {
                         exec(self::$browser . ' ' . escapeshellarg($file));
                     }
                 }
             } elseif (self::isHtmlMode()) {
                 // dump to browser
                 self::$blueScreen->render($exception);
                 if (self::$bar) {
                     self::$bar->render();
                 }
             } elseif (!self::fireLog($exception, self::ERROR)) {
                 // AJAX or non-HTML mode
                 $file = self::log($exception);
                 if (!headers_sent()) {
                     header("X-Nette-Error-Log: {$file}");
                 }
             }
         }
         foreach (self::$onFatalError as $handler) {
             call_user_func($handler, $exception);
         }
     } catch (Exception $e) {
         if (self::$productionMode) {
             echo self::isHtmlMode() ? '<meta name=robots content=noindex>FATAL ERROR' : 'FATAL ERROR';
         } else {
             echo "FATAL ERROR: thrown ", get_class($e), ': ', $e->getMessage(), "\nwhile processing ", get_class($exception), ': ', $exception->getMessage(), "\n";
         }
     }
     self::$enabled = FALSE;
     // un-register shutdown function
     exit(255);
 }