码迷,mamicode.com
首页 > Web开发 > 详细

Thinkphp的空控制器和空操作以及对应解决方法

时间:2017-07-09 12:17:35      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:html   namespace   idt   UI   auto   版本   相同   建立   方法   

在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法、控制器会怎么样呢?

先看一下定义:

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

空控制器:在实例化控制器对象的时候,没有找到指定的类

首先,在Application文件下新建Ceshi模块,并在Ceshi模块下按照Home模块建立相同的文件夹,如下图:

技术分享

1)在Controller文件夹下新建Login控制器:

<?php
namespace Ceshi\Controller;
use Think\Controller;
class LoginController extends  Controller
{
   public function login()
   {
    echo "欢迎登陆!";
   }
}

 

2)地址栏输入访问地址:http://localhost/wamp/thinkphp/index.php/Ceshi/Login/login

技术分享

一、 在地址栏访问不存在的方法,会怎么样?

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss

 

 技术分享

通过此页面,我们可以知道:

(1)这样的界面暴露了我们是用什么工具写的代码,同时暴露了thinkphp的版本号,如果黑客找到该版本号的漏洞就可以攻击你了。

(2)其次,这样的界面很不友好,对于用户来说,他们看不懂也不知道是哪里出错了。

如何给出更为安全、更为友好的提示呢?

 

父类中有个方法如下图,我们可以仿照这个来做:

技术分享

 

 

 

 

第一种方法:做一个空的模板

1)在View文件夹下建一个Ceshi文件夹,路径如下:

技术分享

loginsss.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
*{ margin:0px auto; padding:0px}
</style>
</head>
<body>
<div>您访问的操作方法有误!</div>
</body>
</html>

 2) 再次访问http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss

技术分享

 

这样相比只出现代码要友好的多,但是,我们不可能每输入一个不存在的方法就做一个模板,这样不切实际,再说我们也不知道用户下一次会输入什么样的操作方法,所以这种方法并不可行。

第二种方法:做一个空的方法:_empty()方法

<?php
namespace Ceshi\Controller;
use Think\Controller;
class LoginController extends  Controller
{
   public function login()
   {
    echo "欢迎登陆!";
   }
   public function _empty(){
    echo "您访问的操作方法不存在!";
   }
}

 

这样不论访问到什么样的空方法都会显示“您访问的操作方法不存在!”如图:

 

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/logins

 

技术分享

 

http://localhost/wamp/thinkphp/index.php/Ceshi/Login/aaa

 

技术分享

二、 在地址栏访问不存在的控制器,会怎么样?出现同样的报错

 技术分享

解决方法:

新建一个Empty控制器:

 EmptyController.class.php

<?php
namespace Ceshi\Controller;
use Think\Controller;
class EmptyController extends Controller
{
    public function _empty(){
        echo "您访问的控制器有误哦";
    }
}

 

 再访问http://localhost/wamp/thinkphp/index.php/Ceshi/Main/login

技术分享 

 换个  http://localhost/wamp/thinkphp/index.php/Ceshi/MMMn/login

 技术分享

Thinkphp的空控制器和空操作以及对应解决方法

标签:html   namespace   idt   UI   auto   版本   相同   建立   方法   

原文地址:http://www.cnblogs.com/zhaohui123/p/7140711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!