位置: 编程技术 - 正文

PHP各种异常和错误的拦截方法及发生致命错误时进行报警(php7异常处理)

编辑:rootadmin

推荐整理分享PHP各种异常和错误的拦截方法及发生致命错误时进行报警(php7异常处理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php各种异常和错误的区别,php处理异常,php 错误和异常处理,php常见错误类型,php 错误和异常处理,php各种异常和错误的区别,php 错误和异常处理,php各种异常和错误的关系,内容如对您有帮助,希望把文章链接给更多的朋友!

在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式。在开发的时候可以查看各种错误、异常,但是在线上就把错误显示的关闭。

上面的情形看似很科学,有人解释为这样很安全,别人看不到错误,以免泄露重要信息...

但是你有没有遇到这种情况,线下好好的,一上线却运行不起来也找不到原因...

一个脚本,跑了好长一段时间,一直没有问题,有一天突然中断了,然后了也没有任何记录都不造啥原因...

线上一个付款,别人明明付了款,但是我们却没有记录到,自己亲自去实验,却是好的...

种种以上,都是因为大家关闭了错误信息,并且未将错误、异常记录到日志,导致那些随机发生的错误很难追踪。这样矛盾就来了,即不要显示错误,又要追踪错误,这如何实现了?

以上问题都可以通过PHP的错误、异常机制及其内建函数'set_exception_handler','set_error_handler','register_shutdown_function' 来实现

'set_exception_handler' 函数 用于拦截各种未捕获的异常,然后将这些交给用户自定义的方式进行处理

PHP各种异常和错误的拦截方法及发生致命错误时进行报警(php7异常处理)

'set_error_handler' 函数可以拦截各种错误,然后交给用户自定义的方式进行处理

'register_shutdown_function' 函数是在PHP脚本结束时调用的函数,配合'error_get_last'可以获取最后的致命性错误

这个思路大体就是把错误、异常、致命性错误拦截下来,交给我们自定义的方法进行处理,我们辨别这些错误、异常是否致命,如果是则记录的数据库或者文件系统,然后使用脚本不停的扫描这些日志,发现严重错误立即发送邮件或发送短信进行报警

首先我们定义错误拦截类,该类用于将错误、异常拦截下来,用我们自己定义的处理方式进行处理,该类放在文件名为'errorHandler.class.php'中,代码如下

上述代码中,有个'errorHandlerException'类,该类放在文件'errorHandlerException.class.php'中,该类用于将错误转换为异常,以便记录错误发生的文件、行号、错误代码、错误信息等信息,同时其方法'isFatalError'用于辨别该错误是否是致命性错误。这里我们为了方便管理,将错误进行编号并命名。该类的代码如下

在错误拦截类中,需要用户自己定义实现错误记录的方法('logException'),这个地方需要注意,有些错误可能在一段时间内不断发生,因此只需记录一次即可,你可以使用错误代码、文件、行号、错误详情 生成一个MD5值用于记录该错误是否已经被记录,如果在规定时间内(一个小时)已经被记录过则不需要再进行记录

然后我们定义一个文件,用于实例化以上类,捕获各种错误、异常,该文件命名为'registerErrorHandler.php', 内如如下

剩下的就是需要你在你的入口文件引入该文件,定义调试模式,然后实现你自己记录错误的方法即可

需要注意的是,有些错误在你进行注册之前已经发生并且导致脚本中断是无法记录下来的,因为此时'registerErrorHandler::register()' 尚未执行已经中断了

还有就是'set_error_handler'这个函数不能捕获下面类型的错误 E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、E_COMPILE_ERROR、 E_COMPILE_WARNING, 这个可以在官方文档中看到,但是本处无妨,因为以上错误是解析、编译错误,这些都没有通过,你是不可能发布上线的

PHP+swoole实现简单多人在线聊天群发 由于本文的能力有限,有好多聊天逻辑的细节没有实现,只实现了群发,具体代码如下所示:php代码:$serv=newswoole_websocket_server(".0.0.1",);//服务的基

php pthreads多线程的安装与使用 安装Pthreads基本上需要重新编译PHP,加上--enable-maintainer-zts参数,但是用这个文档很少;bug会很多很有很多意想不到的问题,生成环境上只能呵呵了,所

Codeigniter控制器controller继承问题实例分析 本文实例讲述了Codeigniter控制器controller继承问题。分享给大家供大家参考,具体如下:在项目中经常用到这样一种情况,后台中每个页面都要判断Session

标签: php7异常处理

本文链接地址:https://www.jiuchutong.com/biancheng/288184.html 转载请保留说明!

上一篇:CI(CodeIgniter)简单统计访问人数实现方法 原创(codeigniter 教程)

下一篇:PHP+swoole实现简单多人在线聊天群发(phpswoole面试)

  • 印花税购买使用要求及印花税会计分录?
  • 从价计税消费税计算公式
  • 增值税额的计算公式写销售额除以1.13*0.13对吗
  • 不用交增值税还用填附加税申报表吗
  • 设备5年直线法计提折旧怎么做
  • 发票没有银行账号可以收不
  • 滴滴上开的发票是增值税发票还是普通发票
  • 个体工商户开普票流程
  • 工会经费免征三年需要申报吗
  • 科技型中小企业条件
  • 个人非专利技术转让属于什么收入
  • 建安企业会计处理
  • 丢失海关专用缴款书后该怎么处理其相关会计分录
  • 当月发票开错了已经红冲怎么做分录?
  • 车辆使用费怎么开票
  • 转贴现视为贷款银行如何进行账务处理?
  • 个体行业哪些不需要交税
  • 会计账簿的定义及其作用
  • 开票商品名称是什么意思
  • 小微企业增值税减免账务处理
  • 发票一直显示在报送中
  • 注册资本与注册资金的区别
  • 软件固定资产还是无形资产
  • 工地买东西怎么记账
  • 开过去的普通发票多久不能冲红?
  • 电脑win10点开始没反应
  • 苹果14promax电池掉电很快
  • 中介公司代发工资合法吗
  • 抵扣给供货商预缴税款
  • 公司买的理财产品怎么做账
  • 代销返利业务会计处理
  • 笔记本电脑应该关机还是睡眠
  • 孕妇能吃桂圆吗有什么好处
  • 景区门票定价方法
  • 企业所得税若干问题
  • vue 滚动条往下滑
  • 购车人丢失发票怎么查
  • 设备拆修痕迹影响大吗
  • php读取数据输出html
  • background-size 之 背景图的尺寸设置
  • pytorch如何学
  • python制作chm
  • php生成guid
  • php读取excel数据
  • 如何在最新版本钉钉上使用支付审申请
  • 子公司收购母公司另一子公司会计处理
  • 银行汇票和银行承兑汇票的区别
  • 商业承兑汇票退回给上手公司怎么操作
  • xadmin配置
  • 视同销售的增值税怎么申报
  • 盈余公积转增资本会计科目
  • 文化事业建设费报告表
  • 作废发票清单要回收吗
  • 个税申报月份错误怎么更改
  • 进项税加计抵扣政策2023年
  • 汽车报废补贴18000
  • 个人代人开普票个税怎么算
  • 所得税费用科目编码
  • 外币报表折算差额名词解释
  • 无形资产减值准备借贷
  • 待抵扣进项税额借贷方向
  • 新成立的公司需要年检吗
  • 一个基于口令的用户身份认证基本过程是怎样的?
  • windowxp操作系统
  • Win7 SP1补丁32/64位 2015年1月汇总篇(内附下载)
  • Win10打开设备管理器
  • win8磁盘分区
  • 实用的linux命令
  • win7关闭445端口 注册表
  • 隐藏网络怎么连接电脑连不上
  • 如何优化营商环境
  • Node.js中的事件循环是什么意思
  • js秒数转时间
  • python中while用法
  • js日期操作
  • 基于nodejs的api框架
  • androidstudio如何放大代码
  • android图片压缩库
  • 中国海关化妆品关税
  • 1988年中华人民共和国印花税票五元
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设