相關(guān)資訊
- 《戰(zhàn)國(guó)無(wú)雙4-2》怎么換服裝?戰(zhàn)國(guó)無(wú)
- 關(guān)于責(zé)任的名言警句大全
- 《戰(zhàn)國(guó)無(wú)雙4-2》PC版如何聯(lián)機(jī)? 戰(zhàn)
- 戰(zhàn)國(guó)無(wú)雙4-2技能覺(jué)醒牛逼嗎 全新
- 《戰(zhàn)國(guó)無(wú)雙4-2》手柄無(wú)效怎么解決
- 戰(zhàn)國(guó)無(wú)雙4-2如何設(shè)置語(yǔ)言 戰(zhàn)國(guó)無(wú)雙
- 戰(zhàn)國(guó)無(wú)雙4-2怎么樣跳過(guò)進(jìn)入開(kāi)場(chǎng)動(dòng)畫(huà)
- 什么是應(yīng)屆生畢業(yè)生
- 應(yīng)屆生簡(jiǎn)歷自我評(píng)價(jià)
- 應(yīng)屆生簡(jiǎn)歷怎么寫(xiě)
本類(lèi)常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:584204
-
Windows優(yōu)化大師下載量:416896
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:365699
-
快播手機(jī)版下載量:325855
這篇文章提供分享給大家,是關(guān)于php url路由的實(shí)現(xiàn),下面的詳細(xì)的解析,希望對(duì)各位有所幫助。
1.符合規(guī)則定義的偽靜態(tài)訪問(wèn)路徑解析
對(duì)于"test.php/user/lists/normal/id/2.html" 可解析為
control = user,action = lists,filter = normal,order = id,curPage = 3
對(duì)于"test.php/users/lists.html" 可解析為
control = user,action = lists,filter = all,order = '',curPage = 1 可取得規(guī)則定義中的默認(rèn)值
2.不符合規(guī)則定義的偽靜態(tài)路徑解析
action,control 不符合規(guī)則
對(duì)于"test.php/users/lists/all/id1/1.html" 報(bào)錯(cuò)
試圖訪問(wèn)不存在的頁(yè)面
不符合匹配模式
對(duì)于"test.php/user/lists/all/id1/1.html" 可解析為
control = user,action = lists,filter = all,order = '',curPage = 1
可取得不符合匹配模式項(xiàng)目的默認(rèn)值,上例 order 不符合匹配模式
定義路由規(guī)則時(shí)可以定義默認(rèn)值,當(dāng)在pathinfo中找不到匹配的值,能取得默認(rèn)值
<?php
// url 路由規(guī)則定義
$urlRule = array(
'user' => array( // control
'lists' => array( // action
//'名稱(chēng)' => '默認(rèn)值,值模式匹配'
'filter' => 'all,^(all|normal|admin)$',
'order' => ',^-?[a-zA-Z_]+$',
'curPage' => '1,^[0-9]+$',
),
),
);
function parseUrl(){
$queryString = array();
$GLOBALS['control'] = 'index';
$GLOBALS['action'] = 'index';
if (isset($_SERVER['PATH_INFO'])){
//獲取 pathinfo
$aPathInfo = explode('/', substr($_SERVER['PATH_INFO'], 1, strrpos($_SERVER['PATH_INFO'], '.')-1));
// 獲取 control
$GLOBALS['control'] = $aPathInfo[0];
array_shift($aPathInfo);
// 獲取 action
$GLOBALS['action'] = (isset($aPathInfo[0]) ? $aPathInfo[0] : 'index');
array_shift($aPathInfo);
// 獲取 入口文件名
$GLOBALS['PHP_SELF'] = str_replace($_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF']);
$queryString = $aPathInfo;
}
parseQueryString($queryString);
}
function parseQueryString(array$aQueryString){
$queryString = array();
// control 與 action 為默認(rèn)值時(shí)
if ($GLOBALS['control'] == 'index' && $GLOBALS['action'] == 'index'){
$GLOBALS['queryString'] = $queryString;
return true;
}
global $urlRule;
if (isset($urlRule[$GLOBALS['control']][$GLOBALS['action']])){
$aActionRule = &$urlRule[$GLOBALS['control']][$GLOBALS['action']];
foreach ($aActionRule as $key=>$val){
// 規(guī)則值為 '' 時(shí)
if ($val == '') {
$queryString[$key] = '';
continue;
}
if (isset($aQueryString[0])){
// 取得正則表達(dá)式
$pattern = '/'.substr($val, strpos($val, ',')+1).'/';
// 模式匹配
if (preg_match($pattern, $aQueryString[0])){
// 取值
$queryString[$key] = $aQueryString[0];
// 彈出值
array_shift($aQueryString);
}else {
// 取默認(rèn)值
$queryString[$key] = substr($val, 0, strpos($val, ','));
}
}else {
// 取默認(rèn)值
$queryString[$key] = substr($val, 0, strpos($val, ','));
}
}
$GLOBALS['queryString'] = $queryString;
}else {
throw new Exception('試圖訪問(wèn)不存在的頁(yè)面');
}
}
parseUrl();
var_dump($GLOBALS['control']);
var_dump($GLOBALS['action']);
var_dump($GLOBALS['queryString']);
?>
**
* Pathinfo函數(shù)
* 功能:將URL中的Pathinfo解析為$_GET全局變量
* 返回值:解析成功返回true否則為fasle
* 例如:http://hostname/page.php/argv/argc/a/1/b/2.html
* 將會(huì)解析為$_GET['argv']='argc';$_GET['a']=1;$_GET['b']=3;
*/
function pathinfo(){
$pathinfo=explode('/',$_SERVER['PATH_INFO']);
$count=count($pathinfo);
for($foo=1;$foo<$count;$foo+=2){
$_GET[$pathinfo[$foo]]=($foo+2)==$count?array_shift(explode('.',$pathinfo[$foo+1])):$pathinfo[$foo+1];
}
}
/**
* rewrite函數(shù)
* 功能:
*/
Function rewrite($url=null){
return REWRITE?$url.'.html':$_SERVER['PHP_SELF'].$url.'.html';
}