コード例 #1
0
ファイル: Debugger.php プロジェクト: besir/besir.cz
    public static function _exceptionHandler(Exception $exception)
    {
        if (!headers_sent()) {
            $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()) {
                    ?>
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name=robots content=noindex><meta name=generator content="Nette Framework">
<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>

<title>Server Error</title>

<h1>Server Error</h1>

<p>We're sorry! The server encountered an internal error and was unable to complete your request. Please try again later.</p>

<p><small>error 500</small></p>
<?php 
                }
            } else {
                if (self::$consoleMode) {
                    echo "{$exception}\n";
                    if ($file = self::log($exception)) {
                        echo "(stored in {$file})\n";
                        if (self::$browser) {
                            exec(self::$browser . ' ' . escapeshellarg($file));
                        }
                    }
                } elseif (self::isHtmlMode()) {
                    self::$blueScreen->render($exception);
                    if (self::$bar) {
                        self::$bar->render();
                    }
                } elseif (!self::fireLog($exception, self::ERROR)) {
                    $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;
        exit(255);
    }
コード例 #2
0
ファイル: Debugger.php プロジェクト: krecek/nrsn
	/**
	 * 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';
			$code = isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE ') !== FALSE ? 503 : 500;
			header("$protocol $code", TRUE, $code);
		}

		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)) { // AJAX or non-HTML mode
					$file = self::log($exception, self::ERROR);
					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(254);
	}