thinkphp5 php错误日志,异常处理 - 错误和日志 - [ ThinkPHP5.1完全开发手册 ] - 手册网...

异常处理

和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面。

[TOC=2,2]

异常显示

在调试模式下,系统默认展示的异常页面:

63ae39f058d6895f4c3a45c95383b11e.png

只有在调试模式下面才能显示具体的错误信息,如果在部署模式下面,你可能看到的是一个简单的提示文字,例如:

3029c16f19b1e4a791b8f5376f2cb5c2.png

你可以通过设置exception_tmpl配置参数来自定义你的异常页面模板,默认的异常模板位于:

thinkphp/tpl/think_exception.tpl

你可以在应用配置文件app.php中更改异常模板

// 自定义异常页面的模板文件

'exception_tmpl' => Env::get('app_path') . 'template/exception.tpl',

默认的异常页面会返回500状态码,如果是一个HttpException异常则会返回HTTP的错误状态码。

异常忽略

本着严谨的原则,5.0版本开始默认情况下会对任何错误(包括警告错误)抛出异常,如果不希望如此严谨的抛出异常,可以使用下面方法设置。

默认框架会捕获所有的错误,包括PHP警告级别的错误,你可以在应用配置文件或者公共文件中设置要报告的错误级别,例如:

// 除了 E_NOTICE,报告其他所有错误

error_reporting(E_ALL ^ E_NOTICE);

由于错误机制的注册顺序问题,在入口文件中设置错误级别无效。

系统产生的异常和错误都是程序的隐患,要尽早排除和解决,而不是掩盖。对于应用自己抛出的异常则做出相应的捕获处理。

异常处理接管

框架支持异常处理由开发者自定义类进行接管,需要在应用配置文件app.php中配置参数exception_handle。

最简单的方式是使用闭包定义异常处理,例如:

'exception_handle' => function($e) {

// 参数验证错误

if ($e instanceof \think\exception\ValidateException) {

return json($e->getError(), 422);

}

// 请求异常

if ($e instanceof \think\exception\HttpException && request()->isAjax()) {

return response($e->getMessage(), $e->getStatusCode());

}

},

如果需要更复杂的异常处理,可以把exception_handle配置定义为异常处理类的名称,例如:

// 异常处理handle类 留空使用 \think\exception\Handle

'exception_handle' => '\\app\\common\\exception\\Http',

自定义类需要继承think\exception\Handle并且实现render方法,可以参考如下代码:

namespace app\common\exception;

use Exception;

use think\exception\Handle;

use think\exception\HttpException;

use think\exception\ValidateException;

class Http extends Handle

{

public function render(Exception $e)

{

// 参数验证错误

if ($e instanceof ValidateException) {

return json($e->getError(), 422);

}

// 请求异常

if ($e instanceof HttpException && request()->isAjax()) {

return response($e->getMessage(), $e->getStatusCode());

}

// 其他错误交给系统处理

return parent::render($e);

}

}

自定义异常处理的主要作用是根据不同的异常类型发送不同的状态码和响应输出格式。

需要注意的是,如果自定义异常处理类没有再次调用系统render方法的话,配置http_exception_template就不再生效,具体可以参考Handle类内实现的功能。

手动抛出和捕获异常

ThinkPHP大部分情况异常都是自动抛出和捕获的,你也可以手动使用throw来抛出一个异常,例如:

// 使用think自带异常类抛出异常

throw new \think\Exception('异常消息', 10006);

系统提供了一个助手函数简化异常的代码,用法如下:

exception('异常信息','异常代码','异常类')

异常代码默认为0,可以根据应用的异常设计来定义,异常类如果不传表示抛出默认的think\Exception异常,下面是示例:

// 使用助手函数抛出异常

exception('异常消息', 10006);

如果需要抛出自定义异常,可以使用:

// 抛出自定义异常

exception('异常消息', 10006,'\app\common\exception\NotFoundException');

手动捕获异常方式是使用try-catch,例如:

try {

// 这里是主体代码

} catch (ValidateException $e) {

// 这是进行验证异常捕获

return json($e->getError());

} catch (\Exception $e) {

// 这是进行异常捕获

return json($e->getMessage());

}

支持使用try-catch-finally结构捕获异常。

可以使用PHP的异常捕获进行必要的处理,但需要注意一点,在异常捕获中不要使用think\Controller类的error、success和redirect方法,因为上述三个方法会抛出HttpResponseException异常,从而影响正常的异常捕获,例如:

try{

Db::name('user')->find();

$this->success('执行成功!');

}catch(\Exception $e){

$this->error('执行错误');

}

应该改成

try{

Db::name('user')->find();

}catch(\Exception $e){

$this->error('执行错误');

}

$this->success('执行成功!');

HTTP 异常

可以使用\think\exception\HttpException类来抛出异常

框架提供了一个abort助手函数快速抛出一个HTTP异常:

namespace app\index\controller;

use think\Controller;

class Index extends Controller

{

public function index()

{

// 抛出 HTTP 异常

throw new \think\exception\HttpException(404, '异常消息');

}

}

系统提供了助手函数abort简化HTTP异常的处理,例如:

框架提供了一个abort助手函数快速抛出一个HTTP异常:

namespace app\index\controller;

use think\Controller;

class Index extends Controller

{

public function index()

{

// 抛出404异常

abort(404, '页面异常');

}

}

如果你的应用是API接口,那么请注意在客户端首先判断HTTP状态码是否正常,然后再进行数据处理,当遇到错误的状态码的话,应该根据状态码自行给出错误提示,或者采用下面的方法进行自定义异常处理。

部署模式下一旦抛出了HttpException异常,可以定义单独的异常页面模板,只需要在应用配置文件中增加:

'http_exception_template' => [

// 定义404错误的模板文件地址

404 => Env::get('app_path') . '404.html',

// 还可以定义其它的HTTP status

401 => Env::get('app_path') . '401.html',

]

模板文件支持模板引擎中的标签。

http_exception_template配置仅在部署模式下面生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
易优企业官系统是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms。 易优企业官系统秉承了易优CMS的先进设计理念,并且专注于企业。 易优企业官系统特点: 简单方便 易优企业官系统安装十分方便,只需输入域名,然后再点两次鼠标,期间填入一些必要的安装信息就可以轻松完成整个安装过程。 使用十分便捷,安装后进后台,无需事先进行任何设置操作。 要进行站设置也十分简单,几分钟就可以完成。 易优企业官系统功能介绍: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 9、多语言功能 10、水印功能 易优企业官系统安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.1 及以上 本地电脑推荐使用PHPstudy安装,及安装在合适的站空间、虚拟主机上。 默认后台 域名/login.php 易优企业官系统更新日志: 1、[安全]修复已知存在的安全漏洞; 2、[新增]广告位置的多种类型,适用于片碎化管理; 3、[新增]批量新增Tag标签的功能; 4、[新增]发布/编辑视频文档时,支持批量导入视频链接的功能; 5、[新增]内置腾讯云COS对象存储的逻辑,可以安装COS插件使用; 6、[新增]内置升级模式,可选择升级新版本,也可选择只升级安全补丁; 7、[新增]整点秒杀、优惠券(仅限于可视化商城小程序插件内使用); 8、[新增]商品评价功能,请参考comment标签手册(仅限于专业版商业授权); 9、[新增]商城退换货售后处理(仅限于专业版商业授权); 10、[新增]内置问答悬赏模型(仅限于专业版商业授权); 11、[优化]后台更多功能加入到管理员权限控制里; 12、[优化]tag列表页不存在的URL直接显示404; 13、[优化]后台会员列表支持用户名或昵称搜索; 14、[优化]前台列表页调用arclist标签后,不会生成多余的分页静态文件; 15、[优化]管理员可以预览待审核稿件的逻辑,保护内容隐私被盗取; 16、[优化]插件内置升级前后置方法,便于更好的插件在线升级; 17、[优化]后台更多功能新增通知管理入口; 18、[优化]后台栏目支持上级移动,栏目保持最多3级的逻辑; 19、[优化]后台商品规格的规格值支持是否同步更新; 20、[优化]多图上传的用户体验; 21、[优化]广告管理逻辑体验; 22、[修复]在IE系列浏览器中,会员升级支付无法进行; 23、[修复]样式影响了留言导出按钮被隐藏; 24、[修复]微站点开启之后,手机端会员中心无法退出的问题; 25、[修复]回收站还原文档报错的问题; 26、[修复]视频模型发布文档时不显示编辑器的问题; 27、[修复]部分前台模板的手机端收藏弹窗的兼容性; 28、[修复]后台编辑会员时,没有邮箱或手机属性时报错; 29、[修复]微信支付支持异步回调,确保用户行为中断不影响业务自动处理; 30、[修复]后台站内信通知删除报错的问题; 31、[修复]做了一些已知问题的修正和完善;
DolphinPHP快速开发框架 v1.4.2更新日志 修正:在PHP7.0环境下运行出错的问题 修正:部分检索条件书写不正确的问题 修正:导出模块时,如果配置存在布局参数则导出失败的问题 修正:系统配置时间类型没有转换时间格式的问题 修正:插件和模块管理页面简介无法识别html的问题 修正:表单中有name为action的表单项时,url获取不正确的问题 修正:某些情况下,无法读取模块配置文件信息的问题 修正:在PHP7.3下long2ip方法报错的问题 修正:系统设置类型为快速联动时报错的问题 修正:升级到TP5.1后,系统设置页面报错的问题 修正:表格的替换按钮在某些情况下报错的问题 修正:前台默认模块设置出错的问题 修正:定义路由规则后,无法找到控制器的问题 修正:视图查询无法使用raw方法获取原始数据的问题 修正:其他角色无法通过右侧栏设置站点开关的问题 修正:addFilterList可能会导致不同用户之间数据互串的问题 改进:角色节点授权按模块分组 改进:左侧菜单,有url的节点,不会显示子节点 改进:数据授权支持夸模块调用指定模型 改进:替换右侧按钮支持获取变量 改进:get_files_path方法返回的文件路径,键值为附件id 改进:setPageTips方法可以指定显示在表单的顶部还是底部   DolphinPHP 快速开发框架简介 DophinPHP(海豚PHP)是一个基于ThinkPHP5.0.3开发的一套开源PHP快速开发框架,DophinPHP秉承极简、极速、极致的开发理念,为开发集成了基于数据-角色的权限管理机制,集成多种灵活快速构建工具,可方便快速扩展的模块、插件、钩子、数据包。统一了模块、插件、钩子、数据包之间的版本和依赖关系,进一步降低了代码和数据的冗余,以方便开发者快速构建自己的应用。 DolphinPHP 快速开发框架 页面展示 同类推荐:站长常用源码 相关阅读 DophinPHP安装步骤
睿谷信息管理系统(简称:RGCMS)是一套开源的建站管理系统,使用PHP语言编写,框架为Thinkphp5.1.+,数据库采用MYSQL数据库。 睿谷信息管理系统特点: 自定义各种栏目模型、功能模型,以便适应各种生产场景,模板路径文件自由定义 扩展字段,灵活调用,系统没有太多的固定模板标签,大多数标签都是根据自定义的字段来调用 后台使用LAYUI框架,强大的TP模板标签和缓存机制使得内容以毫秒级呈现 过滤机制以及黑名单阻止非法入侵,同步TP官方更新框架,及时修补各种问题 一个后台管理N个站点,可以创作多语言站,也可创作站群,也可根据需求定制各种应用 系统免费提供邮件、七牛、短信等第三方流行接口 有层次的权限分级,让管理变得轻松方便,自定义不同的组别,分配不同的权限 节省空间资源,同一张图片或同一个文件,在第二次上传时会自动获取原来上传的文件地址,有效节省空间资源 一键复制站点,快速创建分站 多图上传可以标注每个图的描述标题等 无限分级,前台可无限调用,同时可对栏目字段进行向上追溯调用,如当前栏目无栏目图,可自动调用上一级栏目图,直到有图为止 可设置栏目访问级别,如对会员组设置访问权限等 内置素材库存储所有上传资料,直接点击选取即可调用素材 关键词内链机制、SEO标题、关键词、描述设置,自动百度链接提交功能 在线模板编辑,无需FTP即可在线管理 批量添加栏目、批量添加内容 免费开源:无任何授权,无任何后门和加密,放心免费使用,RGCMS的发展离不开您的宝贵建议 睿谷信息管理系统更新日志: 版本号:1.12 更新时间:2020-02-01 更新内容 更新Layui至最新版本2.5.6 新增HOME模块和USER模块的中间件 修复搜索和功能模型标签冲突的BUG 修复域名绑定分站存在的逻辑上的缺陷 完善栏目会员阅读权限 版本号:1.11 更新时间:2019-12-10 更新内容 修复插件在某些环境下不解析插件标签的bug 修复系统在安装时,数据库表丢失以及数据不全的bug HOME模块增加2种语言包(zh、en) 新增简易编辑器字段 新增多内容字段以及多内容调用标签rg:cons 新增文件下载路由规则 新增会员系统路由规则 新增会员表单功能,需要会员登录的表单为会员表单 新增会员功能配置 新增多文件字段以及多文件调用标签,可隐藏实际下载地址rg:files 新增会员所属管理员管理功能,user表新增admin_id字段 新增会员提交表单,只允许所属管理员管理功能 新增会员系统(开发中) 新增后台会员菜单管理(开发中) 新增开发者管理员可在后台直接登陆其他管理员后台 更新敏感词库 更新SEO站点链接提交规则 更新系统标签,完善优化了标签的功能,手册同步更新 调整了搜索模型,支持更多模型和多字段、多条件搜索 调整缓存结构,优化了系统执行流程,效率进一步提升 调整详情页路由规则,去除show字样 版本号:1.10 不建议覆盖升级 更新时间:2019-11-11 更新内容 后台layui更新至v2.5.5 新增后台列表数据筛选功能,支持时间筛选 新增后台列表点击表头排序功能 新增插件机制,免费提供筛选插件 新增地区库(暂无用途,以便后期开发地区站群功能) 新增设置访问记录条数,避免造成爆库 新增站点起始访问数字段 新增全站页面敏感词过滤功能,敏感词将过滤成*星号 新增系统安装时php版本小于7.0环境下检测always_populate_raw_post_data是否支持 新增开启打印、导出EXCEL功能 新增域名绑定分站,后台新增域名管理板块 新增、调整部分标签,使用更直观更合理 新增删除站点时自动清除当前站点Session 新增栏目模型、功能内容、表单的内容列表设置默认排序字段及规则 新增日期自定义字段的类型选择 修复前台表单提交存在XSS漏洞 修复UE编辑器插入动态地图不显示的bug 修复后台编辑器插入视频不生效的bug 修复后台管理员列表内容丢失问题 修复高版本安装系统时eregi函数报错 修复后台模板编辑中存在的安全漏洞 修复后台模板管理对中文目录和中文命名的支持 修复系统全面支持https协议 增强后台登陆时数据过滤 改进delete_dir函数,优化清理缓存和清理静态首页的过程 局部更新了系统语言变量 优化后台权限验证方法 重构seo标题、关键词及描述规则,取消了Rgseo类 重构后台系统配置模块,以便后期二次开发 后台强制token验证,有效防范CSRF攻击 重构路由,提升访问性能 调整后台功能模型和表单管理,新增统一管理页面 调整了前台home模块内核,重构了首页、栏目页、详情页以及其他页面程序代码 合并栏目内容列表中的移至回收站和彻底删除功能按钮 优化访问记录,去除获取第三方IP数据 后台配置取消了模板路径设置,取消了对后
工业电子元件开源系统是一款开源的THinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms。 工业电子元件开源系统秉承了易优CMS的先进设计理念,并且专注于工业。 工业电子元件开源系统特点: 简单方便 工业电子元件开源系统安装十分方便,只需输入域名,然后再点两次鼠标,期间填入一些必要的安装信息就可以轻松完成整个安装过程。 使用十分便捷,安装后进后台,无需事先进行任何设置操作。 要进行站设置也十分简单,几分钟就可以完成。 工业电子元件开源系统功能介绍: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多语言版(后台一键开启) 8、插件功能 9、多语言功能 10、水印功能 工业电子元件开源系统安装环境要求: 操作系统:Linux/Unix/Windows 软件环境:Apache/Nginx/IIS + PHP 5.5~7.1 + MySQL 5.1 及以上 本地电脑推荐使用PHPstudy安装,及安装在合适的站空间、虚拟主机上。 默认后台 域名/login.php 工业电子元件开源系统更新日志: 1、[安全]修复已知存在的安全漏洞; 2、[新增]广告位置的多种类型,适用于片碎化管理; 3、[新增]批量新增Tag标签的功能; 4、[新增]发布/编辑视频文档时,支持批量导入视频链接的功能; 5、[新增]内置腾讯云COS对象存储的逻辑,可以安装COS插件使用; 6、[新增]内置升级模式,可选择升级新版本,也可选择只升级安全补丁; 7、[新增]整点秒杀、优惠券(仅限于可视化商城小程序插件内使用); 8、[新增]商品评价功能,请参考comment标签手册(仅限于专业版商业授权); 9、[新增]商城退换货售后处理(仅限于专业版商业授权); 10、[新增]内置问答悬赏模型(仅限于专业版商业授权); 11、[优化]后台更多功能加入到管理员权限控制里; 12、[优化]tag列表页不存在的URL直接显示404; 13、[优化]后台会员列表支持用户名或昵称搜索; 14、[优化]前台列表页调用arclist标签后,不会生成多余的分页静态文件; 15、[优化]管理员可以预览待审核稿件的逻辑,保护内容隐私被盗取; 16、[优化]插件内置升级前后置方法,便于更好的插件在线升级; 17、[优化]后台更多功能新增通知管理入口; 18、[优化]后台栏目支持上级移动,栏目保持最多3级的逻辑; 19、[优化]后台商品规格的规格值支持是否同步更新; 20、[优化]多图上传的用户体验; 21、[优化]广告管理逻辑体验; 22、[修复]在IE系列浏览器中,会员升级支付无法进行; 23、[修复]样式影响了留言导出按钮被隐藏; 24、[修复]微站点开启之后,手机端会员中心无法退出的问题; 25、[修复]回收站还原文档报错的问题; 26、[修复]视频模型发布文档时不显示编辑器的问题; 27、[修复]部分前台模板的手机端收藏弹窗的兼容性; 28、[修复]后台编辑会员时,没有邮箱或手机属性时报错; 29、[修复]微信支付支持异步回调,确保用户行为中断不影响业务自动处理; 30、[修复]后台站内信通知删除报错的问题; 31、[修复]做了一些已知问题的修正和完善;
thinkphp5.1完全开发手册.pdf是一本全面介绍了ThinkPHP 5.1框架开发手册ThinkPHP是一款相当流行的PHP开源框架,它具有良好的扩展性和易用性,适用于各种规模的Web应用开发。 这本开发手册详细介绍了ThinkPHP 5.1框架的使用方法和各种功能。首先,手册介绍了如何安装和配置ThinkPHP框架,包括服务器环境配置和数据库连接设置。然后,手册详细讲解了ThinkPHP框架的MVC架构,包括控制器、模型和视图的使用方法和关系。 接下来,手册针对常用的功能模块进行了深入的讲解。比如,数据库操作模块介绍了如何使用ThinkPHP的ORM功能进行数据库的增删改查操作。表单验证模块介绍了如何使用ThinkPHP的验证器进行数据验证。文件上传、缓存、日志记录等功能由浅入深地讲解了使用方法。 此外,手册还介绍了ThinkPHP框架的路由、中间件、事件和插件等高级功能,以及如何进行单元测试和异常处理。 这本手册的优点是系统完整地介绍了ThinkPHP 5.1框架的各种功能和用法,对于初学者来说非常友好。而对于有一定经验的开发者来说,手册也提供了足够的细节和实例,帮助他们了解和应用框架更高级的特性。 总而言之,thinkphp5.1完全开发手册.pdf是一本全面详细的ThinkPHP 5.1框架开发指南,既适合初学者入门,又适合有经验的开发者查漏补缺,是学习和使用ThinkPHP框架的重要参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值