理解 ThinkPHP项目中异常的分类,有助于我们在全局异常处理的时候可以理清思路。
用户异常
由于用户的行为导致异常(没有通过验证器,没查询到结果)
- 通常不需要记录日志 (如:若有异常IP大量访问,也可以做日志)
- 需要向用户返回具体信息
服务器内部自身异常
服务器自身异常(代码错误、调用外部接口错误)
- 通常需要记录日志
- 不需要向客户端返回具体原因
使用技巧
自定义Handle
首先我们需要自定义全局异常处理Handle
class ExceptionHandler extends Handle
{
public function render(Exception $ex){
//处理异常逻辑
}
}
将config.php中exception_handle配置成我们自定义的Handle文件。
#config 配置
exception_handle => 'app\lib\exception\ExceptionHandler'
日志相关配置
查看配置文件config下path=>LOG_PATH,查阅LOG_PATH对应的路径,重新在index.php中定义该常量路径。
注:ThinkPHP常量存放路径默认位于 thinkphp->base.php 下。
define('LOG_PATH', __DIR__ . '/../log/');
全局配置
我们可以配置app_debug来设置是否显示服务器内部错误的具体信息,开发环境中我们需要显示具体信息,但是在线上版本一般情况下我们不需要告诉用户,服务器具体出了什么错。
生产环境下,必须关闭。
如果开启,主要有一下两点问题:
- 性能问题
- 安全性问题,错误信息全部显示
读取配置文件变量信息工具函数:
config('变量名')//助手函数