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里做请求字符串的判断即可打到路由解析功能。