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在线代理转向代码
May 05 PHP
smarty获得当前url的方法分享
Feb 14 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
php实现商城购物车的思路和源码分析
Jul 23 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Python文件处理
2016/02/29 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
中学生个人自我评价
2014/02/06 职场文书
个人对照检查材料
2014/02/12 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
导游词格式
2015/02/13 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书