问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp emptycontroller怎么执行的

发布网友 发布时间:2022-04-06 02:20

我来回答

2个回答

懂视网 时间:2022-04-06 06:41

下面由thinkphp教程栏目给大家介绍关于ThinkPHP空操作、空控制器处理,希望对需要的朋友有所帮助!

ThinkPHP空操作、空控制器处理

当一个高手浏览你的网站的时候,你网站的报错信息将给黑客提供攻击你网站的信息。比如对于空操作、空控制器,你会暴露给给黑客你网站后台所用的框架,黑客会根据框架本省的漏洞对你网站进行攻击。因此,我们需要对空控制器、空操作进行处理,不给黑客留下任何蛛丝马迹。

1. 空操作处理

首先看一下效果:

对于我在IndexController.class.php这个文件里我并没有hello这个方法,担任如果我试图去访问这个方式时,会报如下信息:

注:空操作的本质:一个对象(控制器)调用本身不存在的方法

企业微信截图_16004816248073.png

对于懂ThinkPHP的开发人员来说,很容易看出此网站后台用的是ThinkPHP框架。那么我们怎么来屏蔽这些问题呢?这就是我们今天要讨论的内容。

解决方式1,在控制器里添加一个__call($method,$argvs)的方法

企业微信截图_16004816534716.png

企业微信截图_16004816704958.png

这样,当你再次访问hello方法是就会默认调用控制器的__call($method,$args)方法。

但是!当我们有很多个控制器的时候,我还要每个控制器都写一个__call($method,$args)方法?显然不合理!因此,我们需要把此方法写到控制器的父类里,只需通过继承的方式即可。我们走进Controller.class.php却能找到__call()方法,因为TP已经帮我们做好了,在他的思想里,是看我们是否在控制器里定义了一个叫做_empty()的方法。如果定义了,则调用这个方法

普通控制器父类的位置:ThinkPHP/Library/Think/Controller.class.php

解决方式2

给空操作的名称制作一个同名的模板出来,系统会自动调用该模板。

2. 空控制器处理

企业微信截图_16004816803453.png

由于没有BeijingController.class.php这个文件,所以报错了!!

经过分析TP框架的源码,我们有如下解决办法

企业微信截图_16004816921830.png

所以,我们需要定义一个空的控制器。当我们访问不存在的控制器的时候,就会按照我们指定的错误给我们报错。

企业微信截图_16004817011799.png

企业微信截图_16004817102275.png

好啦,空操作、空控制器就先说到这里O(∩_∩)O~~

热心网友 时间:2022-04-06 03:49

空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController)。
http://localhost/index.php/passport/index/index这个url地址:
首先大小写一定要规范, 防止Linux环境下出错,正确写法是
http://localhost/index.php/Passport/Index/index ,地址访问的是Passport模块/Index控制器/index方法。
为什么会这样?还记得安装ThinkPHP的时候,输入入口文件地址http://localhost/index.php出现的那个笑脸吧?系统会访问index.php/Home/Index/index ,即Home模块下/Index控制器/index方法,这是系统默认设定的,
而当访问index.php/模块名,系统会自动定位到当前模块下的Index控制器下的index方法,这也是系统默认设定的,所以,当访问 index.php/Passport 时,会进入index.php/Passport/Index/index
至于加上反斜杠“/”,url是以"/"作为分隔符的,如果"/"后面如果为空,则pathinfo解析的值为空,因为此处代表控制器,所以访问的是空控制器,又因为直接访问控制器,系统会自动定位到当前控制器下的index方法,所以会进入Passport/Empty/index。
其实不只是加上“/”,只要访问的控制器不存在,都会定位到空控制器EmptyController 。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 thinkcmf设置空模块和空控制器,空方法默认跳转到404页面,怎么设置 thinkphp如何用空操作和空方法解决404问题? thinkphp3.2空控制器和空方法的写法 php 字符匹配与替换问题 php中空白字符串被当作假值?空白字符串是什么?和空字符串一样? php如何判断一个字符串是否包含另一个字符串 PHP判断某字符串是否存在于字符串中[记住] PHP判断输入字符是否符合限制条件 php 判断一个字符串里是否有某个字符代码怎么写? PHP中空字符串介绍0,null,empty和false之间的关系 PHP字符串判断某个字符是否存在。 php 判断一个字段是否为空,为空的话执行一段sql语句 检测字符串中有没有空字符php 使用 PHP 函数编写程序,判断输入一个变量为全数字,字符串长度不允许超过 18 位,不允许为空? PHP中,有没有什么方法能检测出一个字符串中是否有空格呢? PHP中如何判断字符串为空 PHP去掉右边数字跟其他字符 php删除”.. . .. .操作字符串&&&&&"这个字符串中首尾的字符?,求助 php怎么过滤字符串首尾的小括号 PHP删除”.. . .. .操作字符串&&&&&"这个字符串中首尾的字符。急,求助 thinkphp中控制器不存在的问题该怎么解决? thinkphp 访问不存在url怎么设置404 thinkphp跳转的问题 为什么ThinkPHP ThinkPHP中关于静态缓存的定义格式为全局的操作静态规则 ThinkPHP 如何判断模块控制器是否存在 thinkphp我想调出数据库表中内容显示为空,怎么回事? thinkphp 怎么设置404 thinkphp怎么判断post提交是否为空 thinkphp查询结果不为空 thinkphp 判断data是否有空 thinkphp怎么让uploadfile允许空文件上传 thinkphp用$.post发送到后台的数据打印出来是空数组。求解决。。。在线等。。。。。。。。 thinkPHP 查询时参数为空的话就查全部,不做where限制.【帮我看看代码】 电脑下载游戏用什么平台好 电脑游戏下载平台有哪些好的 如何在laravel5.4中使用element-ui的组件 laravel 框架 视图 里面怎么用php函数 在laravel中有必要使用vue吗 centos7.2+nginx1.6+php5.7 laravel框架。loadrunner测试注册接口时。php-fpm占用过高的cpu,内存无影响