PHP Dispath的实现思路及代码
2008-12-08 17:11
447 查看
url_rewrite函数的实现基本思路是:
获得URL的参数部分($_SERVER['PATH_INFO']) =》对参数进行处理 =》构造原始参数字符串 =》赋值给$_SERVER['QUERY_STRING']及$_SERVER['REQUEST_URI']。
以下是程序代码,都有注释,很容易看懂。
/**
+------------------------------------------------------------------------------
* url重写实现函数 function.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
function url_rewrite(){
if (isset( $_SERVER['PATH_INFO'])){
$url = substr($_SERVER['PATH_INFO'] , 1); //url提交的参数部分,去掉'/'
$url = explode(':', $url ); //以':'分割存放在数组中$url中
foreach ($url as $key => $value){
if ($key == 0){ //判断参数名
if ($value != '') {
$_GET ['module'] = $url[$key]; //将值存入$_GET数组中
}
$querystring[] = 'module='.$url[$key]; //组合参数名及值
} else {
if ($value != '') {
$_GET['action'] = $url[$key];
}
$querystring[] = 'action='.$url[$key];
}
}
$_SERVER['QUERY_STRING'] = implode("&", $querystring); //将组合后的字符串存入预定义变量$_SERVER['QUERY_STRING']中
$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; //将完整的url地址存入预定义变量$_SERVER['REQUEST_URI']中
}
}
/**
+------------------------------------------------------------------------------
* 类文件module.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
class module{
function index() {
echo "This is index page";
}
function action() {
echo "This is action page";
}
}
/**
+------------------------------------------------------------------------------
* 入口文件index.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
set_include_path(get_include_path().PATH_SEPARATOR.'common'.PATH_SEPARATOR.'lib'); //设定php.ini中的include_path路径
include_once('function.php');
include_once('module.php');
url_rewrite(); //启动url rewrite
$module = $_GET['module'];
$action = $_GET['action'];
if (class_exists($module) && method_exists($module, $action)) { //检查类及方法是否存在
call_user_func(array($module, $action)); //调用相应的类及方法进行处理
} else {
call_user_func(array('module', 'index')); //当传入参数不正确的时候自动调用默认方法
}
实现了基本的dispath,根据不同需求可在此基础上扩充。
获得URL的参数部分($_SERVER['PATH_INFO']) =》对参数进行处理 =》构造原始参数字符串 =》赋值给$_SERVER['QUERY_STRING']及$_SERVER['REQUEST_URI']。
以下是程序代码,都有注释,很容易看懂。
/**
+------------------------------------------------------------------------------
* url重写实现函数 function.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
function url_rewrite(){
if (isset( $_SERVER['PATH_INFO'])){
$url = substr($_SERVER['PATH_INFO'] , 1); //url提交的参数部分,去掉'/'
$url = explode(':', $url ); //以':'分割存放在数组中$url中
foreach ($url as $key => $value){
if ($key == 0){ //判断参数名
if ($value != '') {
$_GET ['module'] = $url[$key]; //将值存入$_GET数组中
}
$querystring[] = 'module='.$url[$key]; //组合参数名及值
} else {
if ($value != '') {
$_GET['action'] = $url[$key];
}
$querystring[] = 'action='.$url[$key];
}
}
$_SERVER['QUERY_STRING'] = implode("&", $querystring); //将组合后的字符串存入预定义变量$_SERVER['QUERY_STRING']中
$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; //将完整的url地址存入预定义变量$_SERVER['REQUEST_URI']中
}
}
/**
+------------------------------------------------------------------------------
* 类文件module.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
class module{
function index() {
echo "This is index page";
}
function action() {
echo "This is action page";
}
}
/**
+------------------------------------------------------------------------------
* 入口文件index.php
+------------------------------------------------------------------------------
* date: 2008-11-29
* author: zbl
+------------------------------------------------------------------------------
**/
set_include_path(get_include_path().PATH_SEPARATOR.'common'.PATH_SEPARATOR.'lib'); //设定php.ini中的include_path路径
include_once('function.php');
include_once('module.php');
url_rewrite(); //启动url rewrite
$module = $_GET['module'];
$action = $_GET['action'];
if (class_exists($module) && method_exists($module, $action)) { //检查类及方法是否存在
call_user_func(array($module, $action)); //调用相应的类及方法进行处理
} else {
call_user_func(array('module', 'index')); //当传入参数不正确的时候自动调用默认方法
}
实现了基本的dispath,根据不同需求可在此基础上扩充。
相关文章推荐
- php格式化时间戳显示友好的时间实现思路及代码
- PHP登陆后跳转到登陆前页面实现思路及代码
- php后台多用户权限组思路与实现程序代码分享
- php后台多用户权限组思路与实现程序代码
- php后台多用户权限组思路与实现程序代码分享
- phpcms输入后台内容录入框中支持php代码实现思路
- PHP中利用mysql进行访问统计的思路和实现代码
- php后台多用户权限组思路与实现程序代码
- php后台多用户权限组思路与实现程序代码
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(二)
- PHP用户登录后跳转回上一访问页面的实现思路及代码
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(一)
- PHP利用MySQL保存session的实现思路及示例代码
- php配置文件与代码分离的实现思路
- php采集远程图片的思路与实现代码
- PHP利用MySQL保存session的实现思路及示例代码
- PHP登陆后跳转到登陆前页面实现思路及代码
- php后台多用户权限组思路与实现程序代码
- php格式化时间戳显示友好的时间实现思路及代码