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
PHP4和PHP5共存于一系统
Nov 17 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP学习之正则表达式
2011/04/17 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
DBA的职责都有哪些
2012/05/16 面试题
销售部主管岗位职责
2013/12/18 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
小学一年级数学教学计划
2015/01/20 职场文书