首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Yii分析六:CHttpRequest

2012-11-03 
Yii分析6:CHttpRequest官方说明:CHttpRequest封装了$_SERVER变量,同时解决了不同web服务器之间一致性的问

Yii分析6:CHttpRequest

官方说明:CHttpRequest封装了$_SERVER变量,同时解决了不同web服务器之间一致性的问题。

/**     * 返回当前请求的路径.     * 头尾的斜线会被去除掉     * 注意从1.1.4开始pathinfo被编码     * 在1.1.4之前, 是否被编码取决于服务器     * (大部分情况未编码).     */    public function getPathInfo()    {          if($this->_pathInfo===null)        {              $pathInfo=$this->getRequestUri();            if(($pos=strpos($pathInfo,'?'))!==false)               $pathInfo=substr($pathInfo,0,$pos);            $pathInfo=urldecode($pathInfo);            $scriptUrl=$this->getScriptUrl();            $baseUrl=$this->getBaseUrl();            if(strpos($pathInfo,$scriptUrl)===0)                $pathInfo=substr($pathInfo,strlen($scriptUrl));            else if($baseUrl==='' || strpos($pathInfo,$baseUrl)===0)                $pathInfo=substr($pathInfo,strlen($baseUrl));            else if(strpos($_SERVER['PHP_SELF'],$scriptUrl)===0)                $pathInfo=substr($_SERVER['PHP_SELF'],strlen($scriptUrl));            else                throw new CException(Yii::t('yii','CHttpRequest is unable to determine the path info of the request.'));            $this->_pathInfo=trim($pathInfo,'/');        }          return $this->_pathInfo;}/**     * 返回请求URI     * 指的是跟在host info后面的部分     * 包含了 query string     * 这个方法的实现参考了Zend框架中的Zend_Controller_Request_Http.     * @return string the request URI portion for the currently requested URL.     * @throws CException if the request URI cannot be determined due to improper server configuration     * @since 1.0.1     */    public function getRequestUri()    {        if($this->_requestUri===null)        {            if(isset($_SERVER['HTTP_X_REWRITE_URL'])) // IIS                $this->_requestUri=$_SERVER['HTTP_X_REWRITE_URL'];            else if(isset($_SERVER['REQUEST_URI']))            {                $this->_requestUri=$_SERVER['REQUEST_URI'];                if(isset($_SERVER['HTTP_HOST']))//来自header                {                    if(strpos($this->_requestUri,$_SERVER['HTTP_HOST'])!==false)                        $this->_requestUri=preg_replace('/^\w+:\/\/[^\/]+/','',$this->_requestUri);                }                else                    $this->_requestUri=preg_replace('/^(http|https):\/\/[^\/]+/i','',$this->_requestUri);            }            else if(isset($_SERVER['ORIG_PATH_INFO']))  // IIS 5.0 CGI            {                $this->_requestUri=$_SERVER['ORIG_PATH_INFO'];                if(!empty($_SERVER['QUERY_STRING']))                    $this->_requestUri.='?'.$_SERVER['QUERY_STRING'];            }            else                throw new CException(Yii::t('yii','CHttpRequest is unable to determine the request URI.'));        }        return $this->_requestUri;    }
?

热点排行