回答PHPCHINA上的几个问题:URL映射


Posted in PHP onFebruary 14, 2007

PHPCHINA服务器搬迁后,我就基本上上不去了,只能用代理,郁闷。但用代理居然不能发帖,回帖。做为版主,深感遗憾,今天用代理上去看到了几个帖子,顺便在这里回答下。

   1、大家来说说URL映射吧
   一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。

    我这里写了两个简单函数来模拟。
    第一个函数主要是进行地址解析,把类似/index.php/controller/action/var1/value1/var2/value2/的地址解析出来,一般来说要解析成三部分:controller,module,params。 

<?   
/**   
  *对url路由进行简单的解析,支持对/path/to/site/index.php/module/action/parm/value   
  * /path/to/site/index.php?/module/action/parm/value和   
  * /path/to/site/?/module/action/parm/value三种形式的处理   
  *@param:null   
  *@return:router array   
  */   
function url_router(){   
   $path=strip_tags($_SERVER['REQUEST_URI']);   
   $strpos=strpos($path,'.php');   
   if($strpos){   
       $path=substr($path,$strpos+4);     
   }else{   
       if(empty($_SERVER['QUERY_STRING'])){   
           $strpos=strpos($path,'?');   
           if($strpos){   
              $path=substr($path,$strpos+1);   
           }else{   
              $path='';   
           }   
       }else{   
           $path=$_SERVER['QUERY_STRING'];   
       }   
   }   
   //统一化$path的格式,如果$path的第一个字符为/则去掉   
   if($path[0]=='/'){   
       $path=substr($path,1);   
   }   
   //解析,并且路由   
   if(!empty($path)){   
       $path=explode('/',$path);   
       $router['controller']=$path[0];   
       $router['action']=(!empty($path[1]))?$path[1]:'index';   
       //print_r($path);   
       for($i=2;$i<sizeof($path);$i=$i+2){   
           $params[$path[$i]]=(isset($path[$i+1]))?$path[$i+1]:'';   
       }   
       $router['params']=$params;   
   }else{   
       //默认路由信息   
       $router['controller']='index';   
       $router['action']='index';   
       $router['params']=array();   
   }   
   return $router;   
}   
?> 
 

    这里就完成主要的url解析功能,然后是转发映射,下面这个函数实现(注意这个函数的实现是结合了我自己的架构,所以你采用的话需要相应的修改,当然你的MVC如果类似zend Framework,那应该要该的不多。)

<?   
function url_dispatch($router,$app_path='/app/controllers/')   
{   
   require_once(SERVER_PATH.'/libs/controller.class.php');   
   $controller=$router['controller'].'Controller';   
   //echo SERVER_PATH.$app_path.$controller.'.class.php';   
   if(!file_exists(SERVER_PATH.$app_path.$controller.'.class.php'))die('缺少必要的类!');   
   require_once(SERVER_PATH.$app_path.$controller.'.class.php');   
   $controller=new $controller();   
   $controller->_setParam($router['params']);   
   $controller->{$router['action'].'Action'}();   
   return true;   
}   
?>  
PHP 相关文章推荐
图书管理程序(一)
Oct 09 PHP
在PHP中使用模板的方法
May 24 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
PHP计算加权平均数的方法
Jul 16 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
php中__toString()方法用法示例
Dec 07 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 PHP
简单采集了yahoo的一些数据
Feb 14 #PHP
自己前几天写的无限分类类
Feb 14 #PHP
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 #PHP
php中的一个中文字符串截取函数
Feb 14 #PHP
PHP音乐采集(部分代码)
Feb 14 #PHP
一个数据采集类
Feb 14 #PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 #PHP
You might like
php  单例模式详细介绍及实现源码
2016/11/05 PHP
详解php实现页面静态化原理
2017/06/21 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php实现图片压缩处理
2020/09/09 PHP
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
python根据路径导入模块的方法
2014/09/30 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
python的exec、eval使用分析
2017/12/11 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python里 super类的工作原理详解
2019/06/19 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
财务经理岗位职责
2013/11/09 职场文书
公司聘任书模板
2014/03/29 职场文书
党务公开方案
2014/05/06 职场文书
英文推荐信格式范文
2014/05/09 职场文书
小学美术教学反思
2016/02/17 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Python中glob库实现文件名的匹配
2021/06/18 Python