`

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;
    }
 
1
1
分享到:
评论

相关推荐

    yii-passport:使Laravel Passport与Yii一起工作

    Yii护照 安装 :light_bulb: 这是展示如何安装软件包的好地方,请参见下文: 跑步 $ composer require inquid/yii-passport 用法 :light_bulb: 这是显示一些用法示例的好地方! 变更日志 请看看 。 贡献 请看看 。...

    yii2elfinder:yii2elfinder

    yii2elfinder 感谢: : 感谢:zybodya 提供当前 yii 版本 yii2elfinder 介绍:旧版本无法使用,因为它完全不适用于最新的jquery版本! 所以除了行动,我不得不改变一切;) 这个扩展允许你将 ElFinder 文件管理...

    yii-simplepie:Yii1.* 的 RSS 解析扩展

    yii-simplepie yii-simplepie 是用于解析 rss 提要的 yii 扩展: 简单派: simplepie 文档: 用法 在 yii 中安装扩展 下载所有文件并放入 yii 扩展文件夹,然后在 config/main.php 中添加以下代码 'simplepie' ...

    yii2sly:jquery 狡猾

    yii2sly 这个扩展是惊人的 jquery 滑块“sly”的包装器,可以在这里找到: 请。 仔细查看所有插件选项,可以通过将它们添加到“clientOptions”参数来传递这些选项,如下所示。 可以在此处找到扩展的演示: 安装 ...

    yii-robokassa:用于与 Robokassa 支付服务的 api 配合使用的 Yii 组件

    用于与支付的 api 配合使用的 Yii 组件 安装 从这个 github 存储库下载 yii-robokassa: cd protected/components git clone https://github.com/ladamalina/yii-robokassa.git 在 protected/config/main.php 中...

    yii-qa:基于Yii2实现的问答系统

    Yii-QA简介(此项目目前已不再维护)感谢选择Yii-QA,基于框架基础实现的问答程序。 #意识到目前的急性时间有限,无法管理太多的额外项目,我准备合并现有手上的项目,集成在一个项目中,感谢支持!!!!!!!请关注:...

    yii-fullcalendar:Arshaw 的 FullCalendar jQuery 插件的 Yii 扩展

    Arshaw 的 FullCalendar jQuery 插件的 Yii 扩展 作者:Alexey Samoylov ( )。 要求 PHP 5.4 Yii 1.x 例子 全局组件配置示例: 'components' => [ 'fullcalendar' => [ 'class' => 'ext.yii-fullcalendar....

    yii-streamlog:将 Yii 1 日志发送到 stdoutstderr - 创建用于与 http 上提供的 php-fpmnginx Docker 堆栈一起使用

    Yii 1 流日志 将 Yii 1 日志发送到 stdout/stderr - 创建用于与提供的 php-fpm/nginx Docker 堆栈一起使用 感谢 Haensel 为! 安装 通过作曲家安装: composer require neam/yii-streamlog:* 或者下载扩展,将src...

    yii-seo:Yii PHP 框架的搜索引擎优化

    yii-seo Yii PHP 框架的搜索引擎优化。 用法 布局中 <?php Yii::app()->controller->widget( 'vendor.crisu83.yii-seo.widgets.SeoHead', array( 'httpEquivs' => array( 'Content-Type' => 'text/html; ...

    yii-ckeditor:简单的 Yii 框架 CKEditor 小部件

    Yii 框架的 CKEditor 小部件 简单的 Yii CKEditor 小部件。 CKEditor - 每个人的 WYSIWYG 编辑器。 小部件生成具有相同属性的 CHtml::activeTextArea。 使用 CKEditor 4+ 版本测试。 安装 将此小部件复制到扩展...

    yii2fullcalendar:jQuery Fullcalendar Yii2扩展

    yii2fullcalendar JQuery Fullcalendar Yii2扩展JQuery来自: ://arshaw.com/fullcalendar/版本4.0.2许可证MIT jQuery文档: //arshaw.com/fullcalendar/docs/ Yii2扩展,通过 可以在这里找到一个小样本:http: ...

    yii2-swoole:完整的解决方案,使yii2-framework与协程在swoole上运行

    yii2-swoole 为赋予 Yii2 框架协程异步能力而生。 后期开发会依赖 去实现功能,相信 Swoft 会是下一代优秀的框架。 此插件基于 swoole (v2.0) 底层实现的协程,改造 Yii2 的核心代码,使开发者无感知,以及在不改动...

    yii-demo:Yii 框架扩展的演示

    6. **权限与访问控制**:Yii 提供 RBAC(Role-Based Access Control)功能,用于实现复杂的权限管理。在 "yii-demo" 中,可能有角色和权限的设置,确保不同用户只能访问其被授权的页面和功能。 7. **缓存机制**:...

    yii-processlock:防止同时执行脚本

    yii-进程锁 防止脚本的多个副本同时运行。 使用 composer.json依赖项: " happyproff/yii-processlock " : " * " 注册应用程序组件: 'components' => [ . . . , 'processLock' => [ 'class' => '...

    yii-commentator:Yii评论模块

    文件结构分析 在解压后的"yii-commentator-master"目录中,主要包含以下文件和文件夹: - `config/`:存放模块的配置文件。 - `controllers/`:控制器文件,处理HTTP请求并调用相应的业务逻辑。 - `models/`:...

    yii-demo:Yii 3演示应用程序

    Yii框架演示项目 [Yii Framework]是一个现代框架,旨在为您PHP应用程序奠定坚实的基础。 它旨在显示和测试所有Yii功能。 安装 您至少需要PHP 7.4。 克隆此存储库。 在项目根目录中运行composer update 。 运行./...

    yii2cms:yii2cms

    Yii 2 高级应用模板 Yii 2 Advanced Application Template 是一个骨架 Yii 2 应用程序,最适合开发具有多层的复杂 Web 应用程序。 模板包括三层:前端、后端和控制台,每一层都是一个独立的 Yii 应用程序。 该模板...

    yii-search:用于Yii2的elasticsearch

    6. **过滤和排序**:允许开发者添加各种过滤条件和排序规则,实现更精细化的搜索控制。 7. **聚合分析**:支持Elasticsearch的聚合分析功能,可以进行数据统计和分析。 8. **插件系统**:扩展性良好,可以通过插件...

    yii-basic:《 yii框架实战》教程

    yii-basic 《 yii框架实战》教程源码 《 yii框架实战》教程地址: ://www.voidking.com/2017/05/18/deve-yii-in-action/ 安装 原始码 git clone https://github.com/voidking/yii-basic.git basic 数据库 利用...

Global site tag (gtag.js) - Google Analytics