function __construct(Exception $exception) { $this->exception = $exception; $trace = $this->exception->getTrace(); foreach ($trace as $t) { if (!isset($t["file"])) { continue; } $this->backtrace[] = "{$t['file']}:{$t['line']}:in `{$t['function']}\\'"; } // environment data $data = ExceptionalEnvironment::to_array(); // exception data $message = $this->exception->getMessage(); $now = gmdate("c"); // spoof 404 error $error_class = get_class($this->exception); if ($error_class == "Http404Error") { $error_class = "ActionController::UnknownAction"; } $data["exception"] = array("exception_class" => $error_class, "message" => $message, "backtrace" => $this->backtrace, "occurred_at" => $now); // context $context = Exceptional::$context; if (!empty($context)) { $data["context"] = $context; } if (isset($_SERVER["HTTP_HOST"])) { // request data $session = isset($_SESSION) ? $_SESSION : array(); // sanitize headers $headers = getallheaders(); if (isset($headers["Cookie"])) { $sessionKey = preg_quote(ini_get("session.name"), "/"); $headers["Cookie"] = preg_replace("/{$sessionKey}=\\S+/", "{$sessionKey}=[FILTERED]", $headers["Cookie"]); } $server = $_SERVER; $keys = array("HTTPS", "HTTP_HOST", "REQUEST_URI", "REQUEST_METHOD", "REMOTE_ADDR"); $this->fill_keys($server, $keys); $protocol = $server["HTTPS"] && $server["HTTPS"] != "off" ? "https://" : "http://"; $url = $server["HTTP_HOST"] ? "{$protocol}{$server['HTTP_HOST']}{$server['REQUEST_URI']}" : ""; $data["request"] = array("url" => $url, "request_method" => strtolower($server["REQUEST_METHOD"]), "remote_ip" => $server["REMOTE_ADDR"], "headers" => $headers, "session" => $session); $params = array_merge($_GET, $_POST); foreach (Exceptional::$blacklist as $filter) { $params = $this->filter_params($params, $filter); } if (!empty($params)) { $data["request"]["parameters"] = $params; } } else { $data["request"] = array(); } $data["request"]["controller"] = Exceptional::$controller; $data["request"]["action"] = Exceptional::$action; $this->data = $data; }
static function to_array() { if (!self::$environment) { $env = $_SERVER; // remove the following $_SERVER variables $vars = array("PHPSELF", "SCRIPT_NAME", "SCRIPT_FILENAME", "PATH_TRANSLATED", "DOCUMENT_ROOT", "PHP_SELF", "argv", "argc", "REQUEST_TIME", "PHP_AUTH_PW"); foreach ($vars as $var) { if (isset($env[$var])) { unset($env[$var]); } } // remove variables that begin with HTTP_ foreach ($env as $k => $v) { if (substr($k, 0, 5) == "HTTP_") { unset($env[$k]); } } self::$environment = array("client" => array("name" => Exceptional::$client_name, "version" => Exceptional::$version, "protocol_version" => Exceptional::$protocol_version), "application_environment" => array("environment" => "production", "env" => $env, "host" => php_uname("n"), "run_as_user" => self::get_username(), "application_root_directory" => self::get_root_dir(), "language" => "php", "language_version" => phpversion(), "framework" => null, "libraries_loaded" => array())); } return self::$environment; }