php路由分发,php如何实现url路由分发功能

php实现url路由分发功能的方法:首先要在服务器的配置上对【/router/】路径进行拦截;然后实现路由分发器,并获取请求的uri;最后进行模块的编写。

37d4e67e7e21474b91ffc3b4166df1df.png

【相关学习推荐:php图文教程】

php实现url路由分发功能的方法:

第一步,首先要在服务器的配置上对/router/路径进行拦截

70a46413bf327dbd3520bc271174e625.png

调用某个文件夹目录下的index.php页面,假定现在所有模块使用单独的文件存放于class目录下,该目录与router平级,如下图所示:

469309da2b5752291bd4857001d20673.png

第二步,路由分发器的实现(index.php)

路由测试~~

date_default_timezone_set("Asia/Shanghai");

define("MODULE_DIR", "../class/");

$_DocumentPath = $_SERVER['DOCUMENT_ROOT'];

$_FilePath = __FILE__;

$_RequestUri = $_SERVER['REQUEST_URI'];

$_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\router\index.php

$_UrlPath = $_RequestUri; //==>/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http:

$_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath);

/**

* http://192.168.0.33/router/hello/router/a/b/c/d/abc/index.html?id=3&url=http:

*

* /hello/router/a/b/c/d/abc/index.html?id=3&url=http:

*/

for ($i = 0; $i < count($_AppPathArr); $i++) {

$p = $_AppPathArr[$i];

if ($p) {

$_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1);

}

}

$_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1);

$_AppPathArr = explode("/", $_UrlPath);

$_AppPathArr_Count = count($_AppPathArr);

$arr_url = array(

'controller' => 'index',

'method' => 'index',

'parms' => array()

);

$arr_url['controller'] = $_AppPathArr[0];

$arr_url['method'] = $_AppPathArr[1];

if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) {

die('参数错误');

} else {

for ($i = 2; $i < $_AppPathArr_Count; $i += 2) {

$arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]);

$arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash);

}

}

$module_name = $arr_url['controller'];

$module_file = MODULE_DIR.$module_name.'.class.php';

$method_name = $arr_url['method'];

if (file_exists($module_file)) {

include $module_file;

$obj_module = new $module_name();

if (!method_exists($obj_module, $method_name)) {

die("要调用的方法不存在");

} else {

if (is_callable(array($obj_module, $method_name))) {

$obj_module -> $method_name($module_name, $arr_url['parms']);

$obj_module -> printResult();

}

}

} else {

die("定义的模块不存在");

}

?>

获取请求的uri,然后拿到要加载的模块名、调用方法名,对uri参数进行简单的判断..

第三步,模块的编写

根据上述的uri,我们要调用的是Hello模块下的router方法,那么可以在class目录下定义一个名为Hello.class.php的文件(注意linux下是区分大小写的)<?php

class Hello {

private $_name;

private $_varValue;

function __construct() {

}

function router() {

$this->_name = func_get_arg(0);

$this->_varValue = func_get_arg(1);

}

function printResult() {

echo $this->_name;

echo "

";

echo var_dump($this->_varValue);

echo "

";

}

}

?>

同理,我们可以编写Ha模块..

这算是实现了很简单的url路由分发功能了…相关学习推荐:php编程(视频)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值