php防错处理,更好的PHP错误处理
=====错误类型====
PHP 主要有两种错误:触发错误和异常。
其中触发错误大概可以分为:编译错误、引擎错误和运行时错误,其中前两个是无法捕获的;
异常都是可以捕获的,当没有尝试捕获时则会中断代码。
触发错误可以通过 error_get_last() 来进行获得,异常可以使用标准的 try...catch 语句来捕获。
=====处理方式=====
【错误报告】
error_reporting() 函数是 PHP 提供的一个控制错误等级的函数,如果设置了对应的错误等级,则只会在对应错误等级触发时才会在页面(或输出,对于命令行来说)输出响应的错误信息。
error_reporting(int level) 支持等级 level 参数使用二进制的数字来配置错误等级,错误等级一般用常量来代替对应的二进制标识。例如:E_ALL、E_NOTICE、 E_USER_NOTICE 等等;如果不传递参数,则会返回当前的错误等级(一般用来保存当前的错误等级以供后续恢复)。
其中 E_PARSE、E_COMPILE_* 和 E_CORE_* 是非运行时错误,无法被捕获的
【php.ini】
配置文件是 PHP 初始化的默认配置,通过修改某些参数可以控制对应的初始化参数。如果要控制错误,可以通过以下几个方式来配置:
display_errors - 是否显示错误,一般在生产环境建议关闭该参数并和下列的参数一起试用 log_errors - 记录错误开关,如果打开会记录到对应位置 error_log - 记录错误日志的位置,不指定为系统默认 error_reporting - 同上面的函数
【错误抑制】
PHP 提供了一种特殊的操作,通过在语句前面加上抑制错误操作符@来抑制该语句出现错误。这种情况通常用于你不知道会发生什么情况下使用,比如打开了不确定的文件或者网络 URL,但一般不推荐使用
抑制错误本身内部做了一系列的处理才达到该效果,并且对于错误本身完全是未知的,一般情况下,不建议这么使用
【捕获异常】
几乎在所有语言中,都会有对于异常的处理。如果程序抛出一个异常,那么可以通过 try…catch 语句来捕获该异常,如果明确知道错误的类型,也可以只捕获该类型的错误。try…catch 是一种最标准的错误处理方式。
try {
// 代码部分
} catch (Exception $e) {
// 根据异常对象对 $e 进行处理
}
【设置错误处理器】
PHP 提供了 set_error_handler() 函数来让开发者传入一个函数名(或匿名函数,对于 5.2 以上的 PHP)就可以让所有的错误进入该函数,然后开发者可以在函数内进行控制,举例说明
set_error_handler(function($code, $msg){
log_error("$msg occur with code $code");
});
对应地,PHP 也提供了 restore_error_handler() 来恢复为标准的 PHP 错误控制。
【设置异常处理器】
如果每个异常都去捕获,显然是很复杂的事情,需要编写很多代码,而且维护起来会比较复杂,对于一个快速编程的语言来说,PHP 自然不会允许发生这种事情。使用 set_exception_handler() 就可以像上面错误处理控制器一样接收所有未捕获的异常,然后做一些该做的事情,甚至还可以再把错误抛出来。例如:
set_exception_handler(function($exception){
log_error("Exception occur: $exception");
});
【崩溃捕获】
该类处理并非 PHP 标准的处理方式,但对于某种使程序崩溃的无法捕获的错误确实很有用,它是指注册一个 shutdown 函数,在函数内通过调用 error_get_last() 来获取最后的错误,并且根据错误等级来做相应的处理。
register_shutdown_function(function(){
$error = error_get_last();
if ($error && $error['code']()() & error_reporting()) {
// 崩溃错误,记录日志
}
});
php防错处理,更好的PHP错误处理相关推荐
- facebook对话链接_如何应用防错原则,看看 Facebook 和 Gmail 是怎么做的
欢迎来到有言有料,让思考更有张力 本文共 3873 字,预计阅读 10 分钟 作者|Siddharth Gulati 译者|张聿彤本文翻译已获得作者的正式授权(授权截图如下) 在用户界面(UI)设计中 ...
- 精益质量管理中执行防错管理的八大要点
华天谋精益生产管理专家概述:防错技术是实践性很强的改进方法,主要依靠现场工作人员的经验来发现和实施,这在很大程度上妨碍了防错技术的推广,那么质量管理如何防错呢? - 1 - 质量管理理念与其他理念的区 ...
- 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)
本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...
- 如何利用MES系统实现防错和预警?(详细整理,值得收藏)
随着信息化技术的发展及管理水平的不断提升,信息化生产管理成为制造企业生产管理的重要手段,如何全面实时的掌握生产环节,掌握生产进度.产品质量数据及生产工人的工艺规范.合理控制产品物料批次.匹配配件型号, ...
- 浅谈汽车轮胎匹配视觉防错检测应用
前段时间都是分享到理论成果,今天看到一篇是结合车厂实际状况来进行的,可以从不同角度看看机器视觉在汽车行业中的应用. 1 前言 工业 4.0 的核心是数据.随着智能装备和智能终端的普及以及各种传感器的 ...
- 如何利用MES系统进行生产防呆防错?
一.认识MES系统的防呆防错功能 首先,我们要清楚了解,什么是MES系统的防呆防错.MES系统防呆防错是指利用MES系统来避免生产过程中的错误和缺陷,保障生产排程和生产过程顺利进行的过程.MES系统防 ...
- 说明使用assert和防错代码的区别
说明使用assert和防错代码的区别 说到防错代码,我第一联想到的是#ifdef.#ifndef.#else.#endif之类的在预处理阶段的一些宏和一些条件判断.而assert函数则是在程序中使用的 ...
- VC中使用全局变量的2种办法及防错措施
有人问特整理出来 1. 对于全局变量存在和函数一样的问题,为了在其他CPP文件中能够访问这些变量,必须在主文件的H文件中加上extern声明,格式如下: extern varibletype var; ...
- 汽车零部件物料配送防错漏视觉检测工作站
目前汽车发动机装配车间的物料配送是依靠人工来准备的,没有防错漏以及追溯功能,存在质量风险,并且无法找出核心问题进行改善和纠正.因此,想要降低品质风险提高效率,物流科的生产线升级改造成为首要解决的问题点 ...
最新文章
- python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值
- 众人评说《我们在微软怎样开发(英文版)》
- python相关工具
- 怎么在mysql创建数据库怎么加入学号_数据库怎么创建学生信息表
- 图解 React-router 源码
- 微信小程序实战–集阅读与电影于一体的小程序项目(八)
- Java参数传递笔记
- 关得紧紧的 FreeEIM飞鸽传书
- 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
- WebService的应用之winform身份验证
- macbook WIN10系统安装教程
- SpringBoot整合WebSocket案例
- 风控模型开发的特征选择与常用数据源介绍
- Linux基础、vim、find命令等
- 什么是互联网大厂_请问22届应届毕业生应该如何准备互联网秋招?
- 数学乐 --- 奇函数与偶函数(个人学习笔记)
- python语法糖 -- 列表正负数的排序
- spring--mvc用戶注册用户名验重
- 【Hive】(九)Hive 窗口函数总结
- 一个对C#程序混淆加密,小巧但够用的小工具
热门文章
- MySQL通过source命令执行sql文件
- You can‘t specify target table ‘XXX‘ for update in FROM clause
- nginx的脚本引擎(一)
- 如何高效的编写与同步博客 (.NET Core 小工具实现)
- 开源app之MyHearts
- 读取csv格式的数据
- BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
- 在ubuntu 12.04上安装tomcat 7.40
- Ubuntu下selenium+Chrome的安装使用
- 设计模式之开放封闭原则