1.什么pathinfo?php
举个例子: http://www.test.com/index.php/type/news/id/4?name=chen&height=33 web
1. index.php 是服务器上真实存在的文件名 (在apache没有开启重写这个文件的状况下)正则表达式
2. type/news/id/4 就是pathinfo 会自动保存在$_SERVER['PATH_INFO'] 中thinkphp
3. ?后面的 name=chen&height=33 就是'query'参数 保存在$_SERVER['QUERY_STRING']中, 同时用$_GET['name']的方式也能够访问 apache
4. thinkphp的url调度器就是把$_SERVER['PATH_INFO']的字符串解析到$_GET,$_POST,$_REQUEST数组中,如上面的解析后:$_GET['type'],$_GET['id'] 数组
举个例子: 服务器
$_SERVER['PATH_INFO'] = 'type/news/id/4' //解析到$_GET中 preg_replace('/(\w+)\/([^,\/]+)/e','$_GET[\'\\1\']=\'\\2\'',trim($_SERVER['PATH_INFO'],'/'));
5. 在实际部署的时候每每会把index.php文件,只要开启apache的重写模块就好了,具体配置看apache手册
函数
2.pathinfo须要注意什么?url
1.pathinfo 须要服务器的支持(apache是支持的,nigix默认不支持pathinfo)
spa
2.主流的web服务器是支持pathinfo,在不知pathinfo的状况下,把tp的url_mode 设置为3,而且把参数写入到
兼容模式的参数中 如: s=Home/Index/index/id/2 tp解析时第一步就会执行: $_SERVER['PATH_INFO']=$_GET[s];
3.url如何解析?
$_SERVER['PATH_INFO'] 按照tp的格式解析到$_GET,$_REQUEST数组,所用到的技术主要有
1. 处理串处理函数 strpos(找位置) substr(截取) strstr(快速截取时用)
2. 正则表达式和及子模式的应用
4.代码示例: