zoukankan      html  css  js  c++  java
  • tp的url和基本属性状态

    tp框架url地址可以由以下四种

    1. http://网址/index.php?m=XX&c=XX&a=XX   基本get模式
    2. http://网址/index.php/模块/控制器/操作方法  路径模式pathinfo
    3. http://网址/模块/控制器/操作方法           rewrite重写模式
    4. http://网址/index.php?s=/模块/控制器/方法    兼容模式

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

     

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

    先看一下定义:

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

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    namespace CeshiController;
    use ThinkController;
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!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()方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    namespace CeshiController;
    use ThinkController;
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    namespace CeshiController;
    use ThinkController;
    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

     

    这样就可以解决空控制器和空操作的问题了~.~.~

  • 相关阅读:
    博士考试复习过程总结
    制作在Linux、Unix上以daemon方式启动Apusic的详细步骤(转)
    重开Blog
    给计算机的兄弟姐妹们补补身体→煲银耳粥
    被人夸成像设计师,高兴呐
    今天问题总结(Hibernate配置参数访问Oracle,Linux下的Apusic自启动)
    HDU ACM 1272 小希的迷宫
    Uva 10115 Automatic Editing
    HDU ACM 1162 Eddy's picture(MST)
    Uva 10474 Where is the Marble?(水题)
  • 原文地址:https://www.cnblogs.com/nzhcww/p/7140756.html
Copyright © 2011-2022 走看看