PHP实现了一个简单的url路由函数示例
php的路由机制是什么
1.路由机制是从特定的URL结构中提取与系统相对应的参数。例如,如http://main.test.com/article/1,其中:/article/1-?_m=articleid=1 .
2.将带有相应参数的URL转换成特定的URL结构,是上述过程的逆过程。
如果一个页面的内容被呈现,它需要根据url上传递的参数来呈现。很多时候可能是这样写的:xxx.com/xx? C=XM=XT=.而我们看到的url往往是这样的(以新浪微游戏中的咖啡爱好者为例)game.weibo.com/ilovecoffee.这个网址设计看起来比上一个好一点(:)
如果我们访问一个不存在的游戏应用程序,如game.weibo.com/ilovecoffee222,将输出以下错误消息:
game.weibo.com后面的匹配项指向一个php页面,然后根据参数获取要访问的游戏应用标识符,然后查询数据库或缓存中的应用标识符,如果不存在则输出错误提示,如果存在则加载游戏应用链接地址。
现在写一个php例子,假设我的ip是192.168.0.33,我添加了一层名为router的路径,后面跟“/module name/method name/key/of parameter 1/value/…of parameter 1/…”
地址如下:
192.168.0.33/router/Hello/router/a/b/c/d/abc/index.html?id=3url=http:……
也就是说,需要在模块ha中调用router方法,并传入参数/a/b/c/d/index.................
第一步是截取服务器配置中的/路由器/路径
在一个文件夹目录中调用index.php页面,假设所有模块都存储在类目录中,并且有单独的文件,这与路由器的级别相同,如下图所示:
第二步是实施路线经销商(index.php)
!Doctype html html head title路由测试~ ~/title meta http-equiv=' content-type ' content=' text/html;charset=utf-8 '/head body?phpdate_default_timezone_set('亚洲/上海');定义(' MODULE_DIR ','./class/');$ _ DOCUMENTPATH=$ _ SERVER[' DOCUMENT _ ROOT '];$ _ FilePath=_ _ FILE _ _$ _ Requesturi=$ _ SERVER[' REQUEST _ URI '];$ _ AppPath=str _ replace($ _ document path ' ',$ _ file path);//==\ router \ index . PHP $ _ URl path=$ _ RequestURi;//==/router/hello/router/a/b/c/d/ABC/index . html?id=3 URL=http : $ _ AppPath arr=explot(DIrectory _ SEPARATOR,$ _ AppPath);/* * * http://192 . 168 . 0 . 33/router/hello/router/a/b/c/d/ABC/index . html?id=3 URL=http : * */hello/router/a/b/c/d/ABC/index . html?id=3 URL=http : */for($ I=0;$ I count($ _ apppathar);$ I){ $ p=$ _ AppPathArr[$ I];if($ p){ $ _ URL path=preg_replace('/^\/'.$p.'\//','/',$_UrlPath,1);} } $_UrlPath=preg_replace('/^\//' ' ',$ _ URL path,1);$ _ apppathar=explode('/',$ _ UrlPath);$ _ apppathar _ Count=Count($ _ apppathar);$ arr _ URL=array(' controller '=' index ',' method'='index ',' parms '=array());$ arr _ URL[' controller ']=$ _ AppPathArr[0];$ arr _ URL[' method ']=$ _ AppPathArr[1];if ($_AppPathArr_Count 2和$_AppPathArr_Count % 2!=0) {die('错误的参数');} else { for($ I=2;$ i $ _ AppPathArr _ Count$ I=2){ $ arr _ temp _ hash=array(strtolow($ _ apppathar[$ I])=$ _ apppathar[$ I ^ 1]);$ arr _ URL[' parms ']=array _ merge($ arr _ URL[' parms '],$ arr _ temp _ hash);} } $ module _ name=$ arr _ URL[' controller '];$module_file=MODULE_DIR。$module_name。 class . PHP ';$ method _ name=$ arr _ URL[' method '];if(file _ exists($ module _ file)){ include $ module _ file;$ obj _ module=new $ module _ name();if(!Method _ exists ($ obj _ module,$ method _ name)) {die('要调用的方法不存在');} else { if(is _ callable(array($ obj _ module,$ method _ name)){ $ obj _ module-$ method _ name($ module _ name,$ arr _ URL[' parms ']);$ obj _ module-print result();}}} else {die('定义的模块不存在');} ?/body /html获取请求的uri,然后获取要加载的模块名和调用方法名,并对uri参数进行简单的判断.
第三步是编译模块
根据上面的uri,我们想要调用Hello模块下的router方法,因此我们可以在类目录中定义一个名为Hello.class.php的文件(注意linux区分大小写)
?phpclass Hello { private $ _ nameprivate $ _ varValuefunction _ _ construct(){ } function router(){ $ this-_ name=func _ get _ arg(0);$ this-_ VarValue=func _ get _ arg(1);}函数print result(){ echo $ this-_ name;回声“p”;echo var _ dump($ this-_ VarValue);回声'/p ';} } ?同样,我们可以编写高模块.
这是一个非常简单的url路由分发功能…
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:PHP实现了一个简单的url路由函数示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。