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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
一个简单的PHP入门源程序
Oct 09 PHP
PHP聊天室技术
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
Yii框架弹出框功能示例
Jan 07 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
PHP常量define和const的区别详解
May 18 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
JS实现滑动插件
2020/01/15 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
Python实时获取cmd的输出
2015/12/13 Python
详谈python http长连接客户端
2017/06/12 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
python看某个模块的版本方法
2018/10/16 Python
Python实现分段线性插值
2018/12/17 Python
为什么说python更适合树莓派编程
2020/07/20 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
护士思想汇报
2014/01/12 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
周年庆典答谢词
2015/01/20 职场文书
财务部岗位职责
2015/02/03 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
一行代码python实现文件共享服务器
2021/04/22 Python