ThinkPHP3.2.3 的异常和错误屏蔽处理
一、入口文件关闭调试,配置文件配置异常页面
在生产环境中系统的错误信息不能暴露给用户,入口文件的 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 的异常和错误屏蔽处理的更多相关文章
- 《java中异常和错误》
异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发 ...
- 拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然
在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式.在开发的时候可以查看各种错误.异常,但是在线上就把错误显示的关闭. 上面的情形看似很科学,有人解释为这样很安全,别人看不 ...
- 关于Java异常和错误的几个问题
1.Java中什么是Exception? 异常是Java传达给你的系统和程序错误的方式. 在java中,异常功能是通过实现比如Throwable,Exception,RuntimeException之 ...
- SQL2008、SQL2013 执行Transact-SQL 语句或者批处理时发生了异常。错误5120
附加数据库的时候遇到问题,问题描述如下: 附加数据库 对于 服务器"服务器名"失败.(Microsoft.SqlServer.Smo) 执行Transact-SQL 语句或者批处理 ...
- C#管理异常和错误
C#管理异常和错误 1.try/catch捕捉异常的语句块,其中try{}中是写可能会出错的程序代码,catch{}中是抛出异常的代码:一个try后可以有多个catch. 2.异常采用继承层次结构进行 ...
- java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误
/** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...
- 扩展Python模块系列(五)----异常和错误处理
在上一节中,讨论了在用C语言扩展Python模块时,应该如何处理无处不在的引用计数问题.重点关注的是在实现一个C Python的函数时,对于一个PyObject对象,何时调用Py_INCREF和Py_ ...
- chrome console的使用 : 异常和错误的处理 – Break易站
本文内容来自:chrome console的使用 : 异常和错误的处理 – Break易站 利用 Chrome DevTools 提供的工具,您可以修复引发异常的网页和在 JavaScript 中调试 ...
- PHP异常和错误
一.PHP的异常和错误 异常:在程序运行中不符合预期的情况及与正常流程不同的情况.一种不正常的情况,就是按照正常逻辑不该出错,但任然出错的情况,这属于逻辑和业务流程的一种中断,而不是语法错误.PHP只 ...
随机推荐
- 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写): goto和const保留了它们,但是 ...
- UVa12298 Super Poker II(母函数 + FFT)
题目 Source http://acm.hust.edu.cn/vjudge/problem/23590 Description I have a set of super poker cards, ...
- Java keytool 使用总结
Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中. 在keystore里,包含两种数据: ( ...
- C#生成PDF总结
(一)C#生成PDF总结 (1)iTextSharp控件对iTextSharp研究还可以表格.文字.各种GDI对象,图片,水印,文字旋转(2)aspose的控件(3)PDF Library这个类库(只 ...
- Linux下使用vsftp
参考网址: http://wenku.baidu.com/view/4339434bc850ad02de80419c.html?re=view root用户无法ftp登录,显示530 Permissi ...
- 前端构建之gulp与常用插件
gulp是什么? http://gulpjs.com/ 相信你会明白的! 与著名的构建工具grunt相比,有什么优势呢? 易于使用,代码优于配置 高效,不会产生过多的中间文件,减少I/O压力 易于学习 ...
- JS保留小数点(四舍五入、四舍六入)实例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- POJ 3061 (二分+前缀和or尺取法)
题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...
- ACM Color the fence
Color the fence 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Tom has fallen in love with Mary. Now Tom w ...
- Collections.sort的三种用法
/** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; impor ...