回答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 相关文章推荐
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
PHP中Http协议post请求参数
Nov 02 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
PHP getName()函数讲解
Feb 03 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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 UTF8中文字符截断函数代码
2012/09/11 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
JavaScript的Cookies
2008/01/16 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python 多进程和数据传递的理解
2017/10/09 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python中extend和append的区别讲解
2019/01/24 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
应聘自荐书
2013/10/08 职场文书
养殖项目策划书范文
2014/01/13 职场文书
国培教师自我鉴定
2014/02/12 职场文书
小露珠教学反思
2014/04/30 职场文书
雨花台导游词
2015/02/06 职场文书
旅游项目合作意向书
2015/05/08 职场文书
《假如》教学反思
2016/02/17 职场文书
导游词之无锡梅园
2019/11/28 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python