点击上方“蓝字”关注公众号获取最新信息!
本文作者:Twe1ve(贝塔安全实验室-核心成员)
这段时间在看PHP代码审计相关知识,国内有不少CMS都是基于ThinkPHP开发的,因此了解ThinkPHP的开发思路更容易理解这类CMS的代码
一般分为前后台等模块进行开发:
index.php前台入口文件定义引入ThinkPHP_PATH、项目路径、项目名称
admin.php前台入口文件定义引入ThinkPHP_PATH、后台模块路径、后台名称
在APP路径下生成MANAGE目录
MVC 框架
M-modole(模型):编写model类对数据进行操作
对应目录:项目目录/应用目录/Lib/Model
V-view(视图):编写html、页面呈现
对应目录:项目目录/应用目录/Tpl
C-controller(控制器):编写类文件(如UserAction.class.php)
对应目录:项目目录/应用目录/Lib/Action
URL 4种访问模式
模式设置:URL_MODEL=0/1/2/3 (在ThinkPHP/conf/convention.php文件中)
0、普通模式
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2
1、Pathinfo(路由模式)********
http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2
2、Rewrite(重写模式)
http://域名/项目名/模块名/方法名/键1/值1/键2/值2
3、兼容模式 ******
http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2
URL访问Controller
http://127.0.0.1/xyhcms/index.php
默认使用的模块index(为方便理解,这里我把模块理解成Controller...和其他地方讲解的有出入)
默认使用的方法是index
即相当于访问http://127.0.0.1/xyhcms/index.php/index/index不同栏目的跳转和页面呈现
通过上面的一些例子,应该可以看到一些端倪:
不同 模块( 前后 台)内部通过Controller控制器实现不同栏目,再通过Controller中的方法实现不同页面的呈现可通过一个简答的小实验来验证:
修改xyhcms\App\Home\Controller\IndexController.class.php
常用变量
__PUBLIC__: 公共(一般为public)文件目录
__Model__: 获取当前模块名
__ROOT__:替换为当前网站地址(不包含域名)
__APP__:替换为当前应用URL地址(不包含域名)
__MODULE__:当前模块URL地址(不包含域名)
__Controller__:当前控制器URL地址(不包含域名)
__Action__:当前操作URL地址(不包含域名)
__SELF__:当前页面URL
参考链接:
https://blog.csdn.net/weixin_33924312/article/details/89628867
http://document.thinkphp.cn/manual_3_2.html#read_data ThinkPHP3.2完全开发手册
更多的学习资源,
更好的学习氛围,
欢迎加入我们的知识星球!