简介:这是PHP整合你的站点入口的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324024' scrolling='no'> 大家也许经常在网上看到这样的路径(http://www.aaa.com/aaa/bbb/aaa?id=5),让人不解,这样的网站的实现方式有几种可能性:1、隐藏文件的扩展名,对这种做法的好处,众说纷纭,不过个人觉得没有必要;
2、用了网站的重定向规则,实现虚拟路径;
3、强制文件解析的方式,实现虚拟路径。
用第2\3种方法可以实现网站的统一接口,合理的整合网站,更好的体现网站的安全性和架构,用这两种方式的网站大多是使用"MVC"模式构建和实现的。
下面是一个例子
访问路径如下:
....../test/*******/Bad ....../test/*******/Good (其中的"******"可以用任何字符串替换,"......."是你的web路径) |
文件的目录结构如下
|--.htaccess |-- test |-- Application.php |-- Controler/GoodControler.php |-- Controler/BadControler.php |
注意文件".htaccess",在windows下不能直接建立的,可以在命令行模式下建立.
文件0 (.htaccess) (这个文件是更改apache的配置方式用的)
<files test> forcetype application/x-httpd-php </files> |
文件1 (test.php)
<?php /*------------------------------------- * test.php * * 作为你的网站的入口的文件 * 用来初始化和入口 * 调用执行Controler的调用 * -------------------------------------*/ require "Application.php"; $aa = new Application(); $aa->parse(); $aa->go(); ?> |
文件2 (GoodControler.php)
<?php /*------------------------------------- * GoodControler.php * * 用来控制 url=/test/Good 来的访问 * -------------------------------------*/ class GoodControler{ /* * 控制类的调用方法,唯一的报漏给外部的接口 */ function control(){ echo "this is from GoodControler url=*********/test/Good"; } } ?> |
文件3 (BadControler.php)
<?php /*------------------------------------- * BadControler.php * * 用来控制 url=/test/Bad 来的访问 * -------------------------------------*/ class BadControler{ /* * 控制类的调用方法,唯一的报漏给外部的接口 */ function control(){ echo "this is from GoodControler url=*********/test/Bad"; } } ?> |
文件4 (Application.php)
<?php /*------------------------------------- * Application.php * * 用来实现网站的统一入口,调用Controler类 * -------------------------------------*/ class Application{ //用来记录所要进行的操作 var $action; //controler文件的路径名 var $controlerFile; //controler的类名 var $controlerClass; function Application(){ } function parse(){ $this->_parsePath(); $this->_getControlerFile(); $this->_getControlerClassname(); } /* * 解析当前的访问路径,得到要进行动作 */ function _parsePath(){ list($path, $param) = explode("?", $_SERVER["REQUEST_URI"]); $pos = strrpos($path, "/"); $this->action = substr($path, $pos 1); } /* * 通过动作$action,解析得到该$action要用到的controler文件的路径 */ function _getControlerFile(){ $this->controlerFile = "./Controler/".$this->action."Controler.php"; if(!file_exists($this->controlerFile)) die("Controler文件名(".$this->controlerFile.")解析错误"); require_once $this->controlerFile; } /* * 通过动作$action,解析得到该$action要用到的controler类名 */ function _getControlerClassname(){ $this->controlerClass = $this->action."Controler"; if(!class_exists($this->controlerClass)) die("Controler类名(".$this->controlerClass.")解析错误"); } /* * 调用controler,执行controler的动作 */ function go(){ $c = new $this->controlerClass(); $c->control(); } } ?> |