PHP路由技术的原理与实践
0x00 路由实现原理
用户通过指定的URL范式对后台进行訪问。URL路由处理类进行处理后。转发到逻辑处理类,逻辑处理类将请求结果返回给用户。
约定URL范式和规则
约定一套自己喜欢的,对搜索引擎友好。对用户友好的URL规则
URL处理类(即路由实现的核心)
对用户请求的URL进行解析处理,获取到用户请求的类,方法,以及Query參数等,并将请求转发给逻辑处理类。
逻辑处理类
处理站点的真实业务逻辑。
0x01 URL范式约定
眼下来说,有两种比較流行的URL格式,一种是普通模式,一种是 pathinfo 模式。
普通模式
在 ThinkPHP 框架中,默认的URL格式即为普通模式。普通模式URL例如以下:
index.php?
m=home&c=user&a=login&v=value
当中 m 參数的值为模块名称。 c 參数的值为控制器名称, a 參数的值为方法名称,之后的參数则为该方法中所要接收的其它 GET 请求參数
pathinfo模式
在 CodeIgniter 框架中,默认的URL格式为 pathinfo 模式,例如以下:
index.php/controller/method/prarme1/value1
这块的意义也已经标注的非常明确了,在 method 以后,就是方法接收的 GET 參数了,格式就是 名称/值
0x02 URL路由处理类(核心)
此处我们选用最简单的普通单模块模式进行演示。仅仅为说明简单的原理,例如以下:
index.php?
c=user&a=login&v=value
我们约定參数 c 为控制器名称,參数 a 为方法名称,之后的均是 GET 參数
<?php
include 'index.class.php';
include 'user.class.php';
// 对用户请求URL进行处理
$query = $_GET;
$controller = isset($query['c']) ? $query['c'] : 'indexController';
$action = isset($query['a']) ? $query['a'] : 'index';
if (class_exists($controller)) {
if (method_exists($controller, $action)) {
unset($_GET['c']);
unset($_GET['a']);
// 实例化用户请求类并调用方法
(new $controller())->$action();
} else {
echo '控制器' . $controller . '中不存在方法' . $action;
}
} else {
echo '不存在控制器' . $controller;
}
当中 unset() 掉两个get參数,仅仅是为了对真正调用的方法造成其它影响。
0x03 逻辑处理类
逻辑处理类就是终于的业务逻辑,也就是真正的回应用户请求的代码片段。以下仅仅是一个简单的演示样例:
/* index.class.php 文件源代码 */
<?
php
class indexController {
public function index(){
var_dump($_GET);
}
}
/* user.class.php 文件源代码 */
<?php
class user {
public function index() {
echo '这里是User控制器';
}
public function login() {
var_dump($_GET);
}
}
0x04 结束
这里仅仅是最简单的PHP路由技术的原理。事实上真正为一个项目或者框架进行路由开发,可能须要可以兼容非常多复杂的情况。须要对各种情况都要考虑到。
原文作者:我才是二亮
原文链接:http://www.2liang.me/?p=230
转载必须在正文中标注并保留原文链接、作者等信息。
PHP路由技术的原理与实践的更多相关文章
- 搞懂分布式技术10:LVS实现负载均衡的原理与实践
搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...
- Java 动态调试技术原理及实践
本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停顿,使得整个应用停止响应. ...
- Atitit.ide技术原理与实践attilax总结
Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...
- Atitit.异步编程技术原理与实践attilax总结
Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...
- Atitit.gui api自动化调用技术原理与实践
Atitit.gui api自动化调用技术原理与实践 gui接口实现分类(h5,win gui, paint opengl,,swing,,.net winform,)1 Solu cate1 Sol ...
- 20165223《网络对抗技术》Exp3 免杀原理与实践
目录 -- 免杀原理与实践 免杀原理与实践 本次实验任务 基础知识问答 免杀扫描引擎 实验内容 正确使用msf编码器,msfvenom生成jar等文件,veil-evasion,加壳工具,使用shel ...
- 20165223《网络对抗技术》Exp2 后门原理与实践
目录 -- 后门原理与实践 后门原理与实践说明 实验任务 基础知识问答 常用后门工具 实验内容 任务一:使用netcat获取主机操作Shell,cron启动 任务二:使用socat获取主机操作Shel ...
- 2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165232 Exp3 免杀原理与实践 免杀原理及基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...
- 2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 ( ...
随机推荐
- VUE里子组件获取父组件动态变化的值
在VUE里父组件给子组件间使用props方式传递数据,但是希望父组件的一个状态值改变然后子组件也能监听到这个数据的改变来更新子组件的状态. 场景:子组件通过props获取父组件传过来的数据,子组件存在 ...
- 实现人脸识别性别之路---matplotlib
Np.linspace(start,stop,num,endpoint,dtype)函数 1.参数:范围值,在范围值中取到的数值总数.是否包含范围值.类型 2.返回值:返回一维数据 3.在指定的范围内 ...
- 学习推荐《零起点Python大数据与量化交易》中文PDF+源代码
学习量化交易推荐学习国内关于Python大数据与量化交易的原创图书<零起点Python大数据与量化交易>. 配合zwPython开发平台和zwQuant开源量化软件学习,是一套完整的大数据 ...
- 玩转 Jupyter Notebook (CentOS)
Jupyter Notebook 简介 Jupyter Notebook 是一个开源的 Web 应用程序,可以用来创建和共享包含动态代码.方程式.可视化及解释性文本的文档.其应用于包括:数据整理与转换 ...
- cp---复制文件
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...
- UNIX多线程编程
一个程序至少有一个进程.一个进程至少有一个线程.进程拥有自己独立的存储空间,而线程能够看作是轻量级的进程,共享进程内的全部资源.能够把进程看作一个工厂.线程看作工厂内的各个车间,每一个车间共享整个工厂 ...
- PHP的模板引擎smarty原理是什么(整理)
PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...
- Codefroces Educational Round 26 837 C. Two Seals
C. Two Seals time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Java证书通信
一.概念介绍: 加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击.其重点在于数据的安全性.身份认证是用来判断某个身份的真实性 ...
- windows安装memcached
http://www.cnblogs.com/wujuntian/p/4791220.html