Example #1
0
 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;
 }
Example #2
0
 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;
 }