thinkphp url調度器解析原理

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.代碼示例: 

        http://www.oschina.net/code/snippet_1178986_33425

相關文章
相關標籤/搜索