ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:44.60KB ,
资源ID:11977207      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11977207.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PHP实现一个简单url路由功能.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PHP实现一个简单url路由功能.docx

1、PHP实现一个简单url路由功能PHP实现一个简单url路由功能 如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染。很多时候可能是这样子写: 如果我们访问一下不存在的游戏应用,例如后面匹配到的项,指向了某个php页面,然后根据参数获取要访问的游戏应用标识,后数据库或者缓存里查询该应用标识,如果不存在则输出错误提示,如果应用存在则加载游戏应用链接地址。现在写一个php例子,假设我的ip为192.168.0.33,我加了一层名为router的路径,之后跟随的是 “/模块名/方法名/参数1的key/参数1的value/.”类似这样的地址:192.168.0.33/router/Hello

2、/router/a/b/c/d/abc/index.html?id=3&url=http:也就是要调用Ha这个模块中的router方法,并传入url后面的参数/a/b/c/d/index.第一步,首先要在服务器的配置上对/router/路径进行拦截 调用某个文件夹目录下的index.php页面,假定现在所有模块使用单独的文件存放于class目录下,该目录与router平级,如下图所示:第二步,路由分发器的实现(index.php) 1: 2: 3: 4: 路由测试 5: 6: 7: 8: 9: routerindex.php 21: $_UrlPath = $_RequestUri; /=/r

3、outer/hello/router/a/b/c/d/abc/index.html?id=3&url=http: 22: 23: $_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath); 24: 25: /* 26: * http:/192.168.0.33/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http: 27: * 28: * /hello/router/a/b/c/d/abc/index.html?id=3&url=http: 29: */ 30: 31: for ($

4、i = 0; $i index, 45: method = index, 46: parms = array() 47: ); 48: 49: $arr_urlcontroller = $_AppPathArr0; 50: $arr_urlmethod = $_AppPathArr1; 51: 52: if ($_AppPathArr_Count 2 and $_AppPathArr_Count % 2 != 0) 53: die(参数错误); 54: else 55: for ($i = 2; $i $_AppPathArr$i + 1); 57: $arr_urlparms = array

5、_merge($arr_urlparms, $arr_temp_hash); 58: 59: 60: 61: $module_name = $arr_urlcontroller; 62: $module_file = MODULE_DIR.$module_name.class.php; 63: $method_name = $arr_urlmethod; 64: 65: if (file_exists($module_file) 66: include $module_file; 67: 68: $obj_module = new $module_name(); 69: 70: if (!me

6、thod_exists($obj_module, $method_name) 71: die(要调用的方法不存在); 72: else 73: if (is_callable(array($obj_module, $method_name) 74: $obj_module - $method_name($module_name, $arr_urlparms); 75: 76: $obj_module - printResult(); 77: 78: 79: 80: else 81: die(定义的模块不存在); 82: 83: 84: 85: ? 86: 87: 88: 获取请求的uri,然后

7、拿到要加载的模块名、调用方法名,对uri参数进行简单的判断.第三步,模块的编写根据上述的uri,我们要调用的是Hello模块下的router方法,那么可以在class目录下定义一个名为Hello.class.php的文件(注意linux下是区分大小写的) 1: _name = func_get_arg(0); 14: $this-_varValue = func_get_arg(1); 15: 16: 17: function printResult() 18: echo $this-_name; 19: echo ; 20: echo var_dump($this-_varValue); 2

8、1: echo ; 22: 23: 24: 25: ?同理,我们可以编写Ha模块.这算是实现了很简单的url路由分发功能了|前段时间写了个关于手机应用的api,一直是用的query_string这种地址,而且还是根据一个act参数来区分所有的动作,这种让开发人员看起来比较费眼。本来想改写为“?c=controller&m=method&type=3&id=1” 这种形式,利用m参数来载入文件并进行实例化,后来看了sina weibo api 是对地址进行了路由。也决定跟风对地址路由。本来CI框架自己自带路由效果,但是因为考虑是写api,想写的比较纯粹一点。支持默认控制器(index)和方法(i

9、ndex):view sourceprint?index.php index.php/controller index.php/controller/method index.php/controller/method/prarme1/value1 index.php/controller/method/param1/value1/param2/value2. view sourceprint?php define(MODULE_DIR, ./classes/); $APP_PATH= str_replace($_SERVERDOCUMENT_ROOT, , _FILE_); $SE_STRI

10、NG=str_replace($APP_PATH, , $_SERVERREQUEST_URI); /计算出index.php后面的字段 index.php/controller/methon/id/3 $SE_STRING=trim($SE_STRING,/); /echo $SE_STRING.; /这里需要对$SE_STRING进行过滤处理。 $ary_url=array( controller=index, method=index, pramers=array() ); /var_dump($ary_url); $ary_se=explode(/, $SE_STRING); $se_

11、count=count($ary_se); /路由控制 if($se_count=1 and $ary_se0!= ) $ary_urlcontroller=$ary_se0; else if($se_count1)/计算后面的参数,key-value $ary_urlcontroller=$ary_se0; $ary_urlmethod=$ary_se1; if($se_count2 and $se_count%2!=0) /没有形成key-value形式 die(参数错误); else for($i=2;$i $ary_se$i+1); $ary_urlpramers=array_merg

12、e($ary_urlpramers,$ary_kv_hash); $module_name=$ary_urlcontroller; $module_file=MODULE_DIR.$module_name.class.php; /echo $module_file; $method_name=$ary_urlmethod; if(file_exists($module_file) include($module_file); $obj_module=new $module_name(); /实例化模块m if(!method_exists($obj_module, $method_name) die(方法不存在); else if(is_callable(array($obj_module, $method_name) /该方法是否能被调用 /var_dump($ary_urlpramers); $get_return=$obj_module-$method_name($ary_urlpramers); /执行a方法,并把key-value参数的数组传过去 if(!is_null($get_return) /返回值不为空 var_dump($get_return); else die(该方法不能被调用); else die(模块文件不存在); ?

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1