一、入口文件关闭调试,配置文件配置异常页面

在生产环境中系统的错误信息不能暴露给用户,入口文件的 APP_DEBUG 默认为开启状态

define('APP_DEBUG',true);

此时如果用户访问到不存在的模块、控制器或者方法会出现:

在生产环境中需要把 APP_DEBUG 设置为 FALSE 或者将该定义屏蔽:

define('APP_DEBUG',false);

此时如果用户访问到不存在的模块、控制器或者方法会出现:

这个错误的默认模板页在 ./ThinkPHP/Tpl/think_exception.tpl,可以设置自定义的异常页面来代替 ThinkPHP 默认的错误页面,在配置文件 config.php 中配置:

    //异常页面
'TMPL_EXCEPTION_FILE' => './Public/Admin/error.html',

在访问不存在的模块、控制器或方法时,会加载默认的或者自定义的异常页面模板。

二、定义 EmptyController 类

例如在 Admin 模块下创建一个 EmptyController.class.php,里面的 index 方法定义当用户访问一个不存在的控制器时系统该如何处理:

<?php
namespace Admin\Controller;
use Think\Controller; class EmptyController extends Controller{
public function index(){
//跳转或加载404页
}
}

三、定义空操作 _empty()

例如在 Admin 模块的  Common 控制器中定义一个 _empty() 方法,当用户访问一个不存在的方法时,就会按照空方法中的设置进行处理:

    //空方法
function _empty() {
//跳转或加载404页
}

注:如果同时请求一个不存在的控制器和一个不存在的方法,或者请求一个不存在的模块时,会加载默认或者自定义的异常页面,而不会执行 EmptyController::index 或 _empty()。

四、数据库错误

在默认情况下,如果程序中的 SQL 语句出现了语法错误,很可能会把数据库信息暴露给用户:

注:在 APP_DEBUG 为 TRUE 且没有自定义异常页面时发生数据库错误会输出以上信息。

在关闭 APP_DEBUG 后,遇到数据库错误时,会加载默认的或者自定义的异常页面。如果希望在发生数据库错误时进行自定的处理时,可以在配置文件中设置数据库调试模式为 FALSE(该配置默认值是 TRUE):

'DB_DEBUG'  =>  FALSE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增

当该选项开启时,会记录 SQL 日志,路径是 ./Application/Runtime/Logs/YourModule/

但是当该选项开启时,无法自定义处理异常,只能加载系统默认或者自定义的一场模板。如果关闭该选项,同时在开发时与数据库相关的操作都必须捕获异常,例如:

        $result = M('session')->field('a')->select();
if($result === false) {
//处理
}

或者

try {
$result= M("session")->field('a')->select();
} catch (\Exception $e) {
//处理
}

注:捕获异常可以参见 ./ThinkPHP/Library/Think/Db/Driver.class.php Line:169

        try{
$result = $this->PDOStatement->execute();
// 调试结束
$this->debug(false);
if ( false === $result ) {
$this->error();
return false;
} else {
return $this->getResult();
}
}catch (\PDOException $e) {
$this->error();
return false;
}

ThinkPHP3.2.3 的异常和错误屏蔽处理的更多相关文章

  1. 《java中异常和错误》

    异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发 ...

  2. 拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然

    在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式.在开发的时候可以查看各种错误.异常,但是在线上就把错误显示的关闭. 上面的情形看似很科学,有人解释为这样很安全,别人看不 ...

  3. 关于Java异常和错误的几个问题

    1.Java中什么是Exception? 异常是Java传达给你的系统和程序错误的方式. 在java中,异常功能是通过实现比如Throwable,Exception,RuntimeException之 ...

  4. SQL2008、SQL2013 执行Transact-SQL 语句或者批处理时发生了异常。错误5120

    附加数据库的时候遇到问题,问题描述如下: 附加数据库 对于 服务器"服务器名"失败.(Microsoft.SqlServer.Smo) 执行Transact-SQL 语句或者批处理 ...

  5. C#管理异常和错误

    C#管理异常和错误 1.try/catch捕捉异常的语句块,其中try{}中是写可能会出错的程序代码,catch{}中是抛出异常的代码:一个try后可以有多个catch. 2.异常采用继承层次结构进行 ...

  6. java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误

    /** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...

  7. 扩展Python模块系列(五)----异常和错误处理

    在上一节中,讨论了在用C语言扩展Python模块时,应该如何处理无处不在的引用计数问题.重点关注的是在实现一个C Python的函数时,对于一个PyObject对象,何时调用Py_INCREF和Py_ ...

  8. chrome console的使用 : 异常和错误的处理 – Break易站

    本文内容来自:chrome console的使用 : 异常和错误的处理 – Break易站 利用 Chrome DevTools 提供的工具,您可以修复引发异常的网页和在 JavaScript 中调试 ...

  9. PHP异常和错误

    一.PHP的异常和错误 异常:在程序运行中不符合预期的情况及与正常流程不同的情况.一种不正常的情况,就是按照正常逻辑不该出错,但任然出错的情况,这属于逻辑和业务流程的一种中断,而不是语法错误.PHP只 ...

随机推荐

  1. 软件打开时间、窗体透明度、背景色---《用delphi开发共享软件》-15.1任务管理器

    1.计算软件启动了多长时间:用定时器,每分钟触发一次: procedure TFrmMain.tmCheckLegalTimer(Sender: TObject);Var Minutes:LongIn ...

  2. HDU5812 Distance(枚举 + 分解因子)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5812 Description In number theory, a prime is a ...

  3. LightOJ1036 A Refining Company(DP)

    题目大概说有一个n*m的格子地图,每个格子有铀或者镭矿.地图最北面的镭矿加工厂,最西面有铀矿加工厂,而要通过在格子里铺设由南向北(镭)或由东向西(铀)的轨道来送矿物到加工厂.一个格子只能铺设一种轨道, ...

  4. Visual Studio: How to change ipch path in Visual Studio 2010 (.sdf, *.opensdf, ...)

    Link: http://stackoverflow.com/questions/4315681/how-to-change-ipch-path-in-visual-studio-2010 引用: T ...

  5. 【原】iOS学习45之多媒体操作

    1. 音频 1> 音频实现简述 iOS 里面共有四种专门实现播放音频的方式: System Sound Services(系统声音服务) OpenAL(跨平台的开源的音频处理接口) Audio ...

  6. HDU 2842 (递推+矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...

  7. POJ 2480 (约数+欧拉函数)

    题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...

  8. 20145304 Java第七周学习报告

    20145304<Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时,因地球的公转与自传,会造 ...

  9. 让mysql有直接写redis能力

    1.文件包下载 http://pan.baidu.com/s/1qW9DHYc 2.安装 gcc -fPIC -Wall -I/usr/local/mysql/include/mysql -I. -s ...

  10. Java 文件和byte数组转换

    /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...