php路由實現
1. php路由怎麼實現
你這抄個的襲話 index.php 得這么寫
<?php
header('content-type:text/html;charset=utf-8');
$actio=$_GET['actio'];
$do=$_GET['do'];
include$actio.'/'.$do.'.php';
2. ThinkPHP的路由是如何實現的
首先,要確認你的web伺服器有沒有打開rewrite,然後在conf文件下配置,
'URL_ROUTER_ON'=> TRUE,//打開路由;
'URL_ROUTE_RULES'=>array(
//路由規則,用正則來匹配;
)
3. 如何實現THINKPHP路由,PHP偽靜態
tp 的路由隨便,url,pathinfo,rewirte 都可以。
我這里用apache舉例:
1 開啟rewirte : LoadMole rewrite_mole moles/mod_rewrite.so
2 網站根目錄增加 .htaccess 文件,內容如下:
RewriteEngine on
RewriteBase /
RewriteRule ^local/show_(\d*).html index.php/local/show/id/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.*)$ index.php/$1 [L]
我這里的 local/show_(\d*).html index.php/local/show/id/$1 是根據當前tp的路由來寫的
如果是url模式可寫為 :
RewriteRule ^local/show_(\d*).html index.php?m=local&a=show&id=$1 [L]
測試:
localAction.class.php 內容為:
<?php
class localAction extends Action{
public function show(){
echo 'id is: ' .$_GET['id'];
}
}
?>
4. PHP中路由功能的原理和定義,有沒有一個基本的例子
1 網路互連
把自己的網路同其它的網路互連起來,從網路中獲取更多的信息和向網路發布自己
的消息,是網路互連的最主要的動力。網路的互連有多種方式,其中使用最多的是網橋
互連和路由器互連。
1.1 網橋互連的網路
網橋工作在OSI模型中的第二層,即鏈路層。完成數據幀(frame)的轉發,主要目
的是在連接的網路間提供透明的通信。網橋的轉發是依據數據幀中的源地址和目的地址
來判斷一個幀是否應轉發和轉發到哪個埠。幀中的地址稱為「MAC」地址或「硬體」
地址,一般就是網卡所帶的地址。
5. 如何在PHP中實現URL路由
統一網站的入口,方便程序在應用環境初始變數方面的初始化工作,使網站更安全。
統一的入口會對URL進行解析,初始化環境神馬的,然後分配不同的工作,有點像路由器。
這樣可以美化URL,便於用戶記憶,優化搜索引擎收錄。
6. 我想嘗試著寫個小型PHP框架,現在卡在類自動載入和路由實現上了
類自動載入跟路由是框架最基礎的特性
給你點自動載入的思路,首先現在寫框架必須用上命名空間,框架內部的類文件夾根據命名空間命名方便自動載入
在入口文件引入自己寫的Autoload.php 通過spl_autoload_register獲得要載入的類名
spl_autoload_register(function($class_name){
Autoload::splAutoload($class_name);
});
asseek outeRouter
asseekFunc
asseek
outeRoute
appwwwdocsdocsController
asseekController
asseekView
如果你採用命名空間上面函數的$class_name是類似這樣的字元串,只要你有當前項目的初始路徑再根據這段字元串require相應的php文件應該不難,自動載入就搞定了。
路由就更簡單了就是通過$_SERVER['REDIRECT_URL'] 或$_SERVER['REDIRECT_URI'] 獲得用戶訪問的URL,根據自己的框架制定的規則從URL中取得控制器與控制器方法名稱,判斷controller的類是否存在,存在則實例化,再判斷controller的method是否存在,存在則調用方法,方法裡面載入視圖等就是另外的事情了。
7. php怎樣不使用框架的情況下本地模擬url路由,實現localhost/a/id/1這種的訪問方式
要實現路由的話你依然需要框架中路由器的支持,因為伺服器不能理解你路徑的具體含義.所以你需要一個路由器來幫助伺服器去處理特定的信息.
不想用現成的就自己寫一個簡單的,如下:
首先你需要在htdoc下放一個.htaccess來實現單文件入口:
<IfMolemod_rewrite.c>
RewriteEngineOn
RewriteRule^$index.php?_url=[QSA,PT,L]
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(.*)$index.php?_url=$1[QSA,L]
</IfMole>
然後自己寫路由咯, index.php
<?php
//這里添加你想要的路徑
$route=array(
//(:num)表示匹配任何數字,(:any)表示任意字元
'a/id/(:num)'=>'TestController:idAction',
'a/any/(:any)'=>'TestController:anyAction',
'a/no' =>'TestController:noAction',
//這里是默認控制器,就是當你訪問localhost的時候用
'_DEFAULT_'=>'IndexController:indexAction',
);
//簡單的Router
classRouter
{
private$route;
publicfunction__construct(array$route)
{
$this->route=$route;
}
publicfunctionparse($url)
{
if(empty($url)){
list($controller,$action)=explode(':',$this->route['_DEFAULT_']);
returnarray(
'controller'=>$controller,
'action' =>$action,
'params' =>array(),
);
}
$trans=array(
':any'=>'[^/]+',
':num'=>'[0-9]+'
);
foreach($this->routeas$u=>$d){
$pattern='#^'.strtr($u,$trans).'$#';
if(preg_match($pattern,$url,$params)){
list($controller,$action)=explode(':',$d);
array_shift($params);
returnarray(
'controller'=>$controller,
'action' =>$action,
'params' =>$params,
);
}
}
header("HTTP/1.0404NotFound");
exit('Pagenotfound');
}
}
$r=newRouter($route);
$arr=$r->parse($_GET['_url']);
require($arr['controller'].'.php');
//執行控制器的功能
$dispatcher=new$arr['controller'];
call_user_func_array(array($dispatcher,$arr['action']),$arr['params']);
?>
控制器1. Testcontroller.php
<?php
classTestController
{
publicfunctionidAction($id)
{
echo"Yourint-onlyidis:{$id}";
}
publicfunctionanyAction($any_id)
{
echo"Youanyidis:{$any_id}";
}
publicfunctionnoAction()
{
echo"Thismethodtakenoparameter";
}
}
默認控制器: IndexController.php
<?php
classIndexController
{
publicfunctionindexAction()
{
echo"HelloWorld!";
}
}
把.htaccess, index.php, TestController.php, IndexController.php放在htdoc里就可以了
8. php怎麼學會一個框架的路由機制
如果用過zend和symphony或者yii的可以去研究一下源碼。
主要是通過偽靜態來實現單一入口,mvc框架都是這樣。將所有請求通過apache偽靜態解析轉給某個指定文件,然後通過php的$_SERVER[]這個全局變數來去的請求的路徑字元串,對其進行解析再分配給指定的類去處理,基本就是這樣。
最簡單的方法是建立一個.htaccess文件。文件內容貼給你
<IfMole !mod_rewrite.c>
ErrorDocument 500 'mod_rewrite must be enabled'
</IfMole>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
將這個文件放在根目錄下即可。文件作用很明顯:將所有的請求路徑轉給index.php,然後在index.php里做請求字元串的判斷即可打到路由解析功能。