CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析


Posted in PHP onMay 18, 2016

本文实例讲述了CI框架URI.php中_fetch_uri_string()函数用法。分享给大家供大家参考,具体如下:

APPPATH/config/config.php中对于url 格式的拟定。

$config['uri_protocol'] = 'AUTO';

这个配置项目定义了你使用哪个服务器全局变量来拟定URL。
默认的设置是auto,会把下列四个方式轮询一遍。当你的链接不能工作的时候,试着用用auto外的选项。

'AUTO'            Default - auto detects
'PATH_INFO'        Uses the PATH_INFO
'QUERY_STRING'            Uses the QUERY_STRING
'REQUEST_URI'        Uses the REQUEST_URI
'ORIG_PATH_INFO'    Uses the ORIG_PATH_INFO 

CI_URI中的几个成员变量

$keyval = array(); //List  of cached uri segments
$uri_string; //Current  uri string
$segments //List  of uri segments
$rsegments = array() //Re-indexed  list of uri segments

获取到的current uri string 赋值到 $uri_string ,通过function _set_uri_string($str)。

获取到$str有几个选项,也就是_fetch_uri_string()的业务流程部分了

一、默认

$config['uri_protocol'] = 'AUTO'

时,程序会一次轮询下列方式来获取URI

(1)当程序在CLI下运行时,也就是在命令行下php文件时候。ci会这么获取URI

private function _parse_cli_args()
{
  $args = array_slice($_SERVER['argv'], 1);
  return $args ? '/' .implode('/',$args) : '';
}

$_SERVER['argv'] 包含了传递给脚本的参数 当脚本运行在CLI时候,会给出c格式的命令行参数

截取到$_SERVER['argv']中除了第一个之外的所有参数 

如果你在命令行中这么操作

php d:\wamp\www\CodeIgniter\index.php\start\index

_parse_cli_args() 返回一个 /index.php/start/index的字符串

(2)默认使用REQUEST_URI来探测url时候会调用 私有函数  _detect_uri()

(3)如果上面的两种方式都不能获取到uri那么会采用$_SERVER['PATH_INFO']来获取

$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO']  : @getenv('PATH_INFO');
if (trim($path, '/')  != '' && $path != "/".SELF)
{
  $this->_set_uri_string($path);
  return;
}

(4)如果上面三种方式都不能获取到,那么就使用

$_SERVER['QUERY_STRING']或者getenv['QUERY_STRING']

$path = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
if (trim($path, '/') != '')
{
  $this->_set_uri_string($path);
  return;
}

(5)上面四种方法都不能获取到URI,那么就要使用$_GET数组了,没招了

if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
  $this->_set_uri_string(key($_GET));
  return;
}

二、在config.php中设定了:

$config['uri_protocol']

那么 程序会自动执行相应的操作来获取uri

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 PHP
深入分析php之面向对象
May 15 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
php防止用户重复提交表单
Nov 02 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
php session_decode函数用法讲解
May 26 PHP
PHP正则表达式入门教程(推荐)
May 18 #PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 #PHP
CI框架文件上传类及图像处理类用法分析
May 18 #PHP
CI框架实现cookie登陆的方法详解
May 18 #PHP
浅析php静态方法与非静态方法的用法区别
May 17 #PHP
php关闭warning问题的解决方法
May 17 #PHP
XHProf报告字段含义的解析
May 17 #PHP
You might like
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
JQuery 操作select标签实现代码
2010/05/14 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
Vue Components 数字键盘的实现
2019/09/18 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
用Python进行websocket接口测试
2020/10/16 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
HTML5之语义标签介绍
2016/07/07 HTML / CSS
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
数据库专业英语
2012/11/30 面试题
什么是抽象
2015/12/13 面试题
个人思想理论学习的自我鉴定
2013/11/30 职场文书
中英文求职信范文
2014/01/27 职场文书
小学二年级学生评语
2014/04/21 职场文书
电子信息工程自荐信
2014/05/26 职场文书
发布会邀请函
2015/01/31 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
怎样写家长意见
2015/06/04 职场文书
公司处罚决定书
2015/06/24 职场文书
2016党校培训心得体会
2016/01/07 职场文书
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL