_SERVER = $serverData; else $this->_SERVER =& $_SERVER; if ($postData) $this->_POST = $postData; else $this->_POST =& $_POST; } /** * Returns the value for a specific http header. * * This method returns null if the header did not exist. * * @param string $name * @return string */ public function getHeader($name) { $name = strtoupper(str_replace(array('-'),array('_'),$name)); if (isset($this->_SERVER['HTTP_' . $name])) { return $this->_SERVER['HTTP_' . $name]; } // There's a few headers that seem to end up in the top-level // server array. switch($name) { case 'CONTENT_TYPE' : case 'CONTENT_LENGTH' : if (isset($this->_SERVER[$name])) { return $this->_SERVER[$name]; } break; } return; } /** * Returns all (known) HTTP headers. * * All headers are converted to lower-case, and additionally all underscores * are automatically converted to dashes * * @return array */ public function getHeaders() { $hdrs = array(); foreach($this->_SERVER as $key=>$value) { switch($key) { case 'CONTENT_LENGTH' : case 'CONTENT_TYPE' : $hdrs[strtolower(str_replace('_','-',$key))] = $value; break; default : if (strpos($key,'HTTP_')===0) { $hdrs[substr(strtolower(str_replace('_','-',$key)),5)] = $value; } break; } } return $hdrs; } /** * Returns the HTTP request method * * This is for example POST or GET * * @return string */ public function getMethod() { return $this->_SERVER['REQUEST_METHOD']; } /** * Returns the requested uri * * @return string */ public function getUri() { return $this->_SERVER['REQUEST_URI']; } /** * Will return protocol + the hostname + the uri * * @return string */ public function getAbsoluteUri() { // Checking if the request was made through HTTPS. The last in line is for IIS $protocol = isset($this->_SERVER['HTTPS']) && ($this->_SERVER['HTTPS']) && ($this->_SERVER['HTTPS']!='off'); return ($protocol?'https':'http') . '://' . $this->getHeader('Host') . $this->getUri(); } /** * Returns everything after the ? from the current url * * @return string */ public function getQueryString() { return isset($this->_SERVER['QUERY_STRING'])?$this->_SERVER['QUERY_STRING']:''; } /** * Returns the HTTP request body body * * This method returns a readable stream resource. * If the asString parameter is set to true, a string is sent instead. * * @param bool $asString * @return resource */ public function getBody($asString = false) { if (is_null($this->body)) { if (!is_null(self::$defaultInputStream)) { $this->body = self::$defaultInputStream; } else { $this->body = fopen('php://input','r'); self::$defaultInputStream = $this->body; } } if ($asString) { $body = stream_get_contents($this->body); return $body; } else { return $this->body; } } /** * Sets the contents of the HTTP request body * * This method can either accept a string, or a readable stream resource. * * If the setAsDefaultInputStream is set to true, it means for this run of the * script the supplied body will be used instead of php://input. * * @param mixed $body * @param bool $setAsDefaultInputStream * @return void */ public function setBody($body,$setAsDefaultInputStream = false) { if(is_resource($body)) { $this->body = $body; } else { $stream = fopen('php://temp','r+'); fputs($stream,$body); rewind($stream); // String is assumed $this->body = $stream; } if ($setAsDefaultInputStream) { self::$defaultInputStream = $this->body; } } /** * Returns PHP's _POST variable. * * The reason this is in a method is so it can be subclassed and * overridden. * * @return array */ public function getPostVars() { return $this->_POST; } /** * Returns a specific item from the _SERVER array. * * Do not rely on this feature, it is for internal use only. * * @param string $field * @return string */ public function getRawServerValue($field) { return isset($this->_SERVER[$field])?$this->_SERVER[$field]:null; } /** * Returns the HTTP version specified within the request. * * @return string */ public function getHTTPVersion() { $protocol = $this->getRawServerValue('SERVER_PROTOCOL'); if ($protocol==='HTTP/1.0') { return '1.0'; } else { return '1.1'; } } }