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.MVC的模板标签系统(四)
Sep 05 PHP
图形数字验证代码
Oct 09 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
apache mysql php 源码编译使用方法
May 03 PHP
php获取服务器信息的实现代码
Feb 04 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
php获取301跳转URL简单实例
Dec 16 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
推荐个功能齐全的发送PHP邮件类
2007/01/03 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
在Django的模型中添加自定义方法的示例
2015/07/21 Python
Django返回json数据用法示例
2016/09/18 Python
老生常谈python中的重载
2018/11/11 Python
彻底解决Python包下载慢问题
2020/11/15 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
个性发展自我评价
2014/02/11 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
食品安全责任书
2014/04/15 职场文书
大学生社团活动总结
2014/04/26 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
色戒观后感
2015/06/12 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
实习证明模板
2015/06/16 职场文书
心理学培训心得体会
2016/01/22 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书