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 相关文章推荐
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php商品对比功能代码分享
Sep 24 PHP
功能强大的php分页函数
Jul 20 PHP
功能强大的php文件上传类
Aug 29 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 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
使用GD库生成带阴影文字的图片
2015/03/27 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
Python中的迭代器漫谈
2015/02/03 Python
Python 多线程的实例详解
2017/09/07 Python
python 产生token及token验证的方法
2018/12/26 Python
Python之循环结构
2019/01/15 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
法学专业应届生求职信
2013/10/16 职场文书
教师党员思想汇报
2014/01/06 职场文书
企业授权委托书范本
2014/04/02 职场文书
请假条标准格式规范
2014/04/10 职场文书
伦敦奥运会口号
2014/06/13 职场文书
办理房产过户的委托书
2014/09/14 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL