PHP 错误处理机制
在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息;有些错误异常会终止脚本执行,这个时候如果没有一些错误提示信息的话,那么我们只能从头开始看代码了,要知道项目中成百上千行的代码对我们来说是件多么恐怖的事情啊,那么我们如何在项目开发的过程中快速准确地定位到异常、错误呢,并进行相应的处理,本文由自己对错误、异常处理的了解,再此分享与大家相互学习交流,并作为一个备忘。
系统错误处理器:
PHP正常情况下,错误会正常的输出,但在一些框架中,可能会影响错误的输出,可能是框架本身有自己的处理机制,也可能代码中作处理了,一般是这几个函数设置:
1.error_reporting(); 设置PHP 的报错级别并返回当前级别
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:
值 |
常量 |
描述 |
1 |
E_ERROR |
致命的运行时错误。不能回收此错误。脚本被中断执行。 |
2 |
E_WARNING |
非致命的运行时警告。脚本不被中断执行。 |
4 |
E_PARSE |
编译时分析错误。解析应该只由分析器生成的错误 |
8 |
E_NOTICE |
运行时通知。该脚本发现可能是一个错误,但通常运行一个脚本时,也可能发生 |
16 |
E_CORE_ERROR |
致命错误在PHP启动时。这就好比在PHP核心的E_ERROR |
32 |
E_CORE_WARNING |
在PHP启动时警告。这就好比在PHP核心的E_WARNING |
64 |
E_COMPILE_ERROR |
致命的编译时错误。这就好比通过了Zend脚本引擎产生的E_ERROR |
128 |
E_COMPILE_WARNING |
非致命编译时警告。这就好比通过了Zend脚本引擎产生E_WARNING |
256 |
E_USER_ERROR |
致命的用户生成的错误,这类似于程序员使用PHP函数 trigger_error() 设置的 E_ERROR |
512 |
E_USER_WARNING |
非致命的用户生成的警告,这类似于程序员使用PHP函数 trigger_error 设置的 E_WARNING |
1024 |
E_USER_NOTICE |
用户生成的通知,这类似于程序员使用PHP函数trigger_error 设置的 E_NOTICE |
2048 |
E_STRICT |
运行时通知。PHP建议改变你的代码,以帮助该代码的互操作性和兼容性 |
4096 |
E_RECOVERABLE_ERROR |
可捕获的致命错误,类似 E_ERROR,但可被用户定义的处理程序捕获(参见 set_error_handler()) |
8191 |
E_ALL |
所有的错误和警告,除级别E_STRICT(在PHP6.0中,E_STRICT将是E_ALL的一部分) |
这里值得注意的是,$level为0的时候是关闭错误输出,也就是任何错误都不会输出。
2.set_error_handler()
定义和用法
set_error_handler() 函数设置用户自定义的错误处理函数。
该函数用于创建运行时期间的用户自己的错误处理方法。
该函数会返回旧的错误处理程序,若失败,则返回 null。
语法
set_error_handler(error_function,error_types)
参数 |
描述 |
error_function |
必需。规定发生错误时运行的函数。 |
error_types |
可选。规定在哪个错误报告级别会显示用户定义的错误。默认是 "E_ALL"。 |
提示:如果使用了该函数,会完全绕过标准的 PHP 错误处理函数,如果必要,用户定义的错误处理程序必须终止 (die() ) 脚本,
注释:如果在脚本执行前发生错误,由于在那时自定义程序还没有注册,因此就不会用到这个自定义错误处理程序。
测试代码如下:
/**
*
* @param type $error_level 错误级别
* @param type $error_message 错误信息
* @param type $error_file 可选 错误文件
* @param type $error_line 可选 错误行
* @param type $error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
*/
function my_error($error_level, $error_message, $error_file, $error_line, $error_context) {
echo date('Y-m-d H:i:s') . $error_level . $error_message . $error_file . $error_line; var_dump($error_context);
} set_error_handler('my_error', E_ALL); print_r($a); //通过上案例可以得知,在注册 my_error 方法时,系统会自动覆盖原有的错误处理 error_fuction() 方法
以上程序运行结果:
自定义错误触发器
定义和用法
trigger_error() 函数创建用户定义的错误消息。
trigger_error() 用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由 set_error_handler() 函数创建的用户自定义函数使用。
如果指定了一个不合法的错误类型,该函数返回 false,否则返回 true。
语法
trigger_error(error_message,error_types)
参数 |
描述 |
error_message |
必需。规定错误消息。长度限制为 1024 个字符。 |
error_types |
可选。规定错误消息的错误类型。 可能的值:
|
测试代码如下:
/**
*
* @param type $level
* @param type $msg
*/
function my_error($level, $msg) { switch ($level) {
case E_USER_ERROR:
echo "ERROR:<br/>";
break; case E_USER_WARNING:
echo "WARNING:<br/>";
break; case E_USER_NOTICE:
echo "NOTICE:<br/>";
break; default:
break;
} echo "错误编号:" . $level . " <br/>";
echo "错误信息:" . $msg;
} //注册错误处理器
set_error_handler('my_error'); if (89 > 8) {
//调用错误触发器
trigger_error('这是错误啊', E_USER_WARNING);
}
运行结果如下:
WARNING:
错误编号:512
错误信息:这是错误啊
参考来源:
PHP 错误处理机制的更多相关文章
- linux系统编程之错误处理机制
在讲解liunx错误处理机制之前我们先来看一段代码: #include<sys/types.h> #include<sys/stat.h> #include<fcntl. ...
- javascript中的错误处理机制
× 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...
- Map/Reduce 工作机制分析 --- 错误处理机制
前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...
- Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制
本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...
- PHP异常与错误处理机制
先区别一下php中错误 与 异常的概念吧 PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况.平时遇到的warming.notice ...
- ASP.NET的错误处理机制之一(概念)
对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制.当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行 ...
- ASP.NET的错误处理机制
对于一个Web应用程序来说,出错是在所难免的,因此我们应该未雨绸缪,为可能出现的错误提供恰当的处理.事实上,良好的错误处理机制正是衡量Web应用程序好坏的一个重要标准.试想一下,当用户不小心在浏览器输 ...
- hadoop 错误处理机制
hadoop 错误处理机制 1.硬件故障 硬件故障是指jobtracker故障或TaskTracker 故障 jobtracker是单点,若发生故障,目前hadoop 还无法处理,唯有选择最牢靠的硬件 ...
- .net错误处理机制(转)
asp.net 提供了4中错误机制:Page_Error事件>ErrorPage属性>Application_Error事件> <customErrors>配置项 ① P ...
- PHP中的错误处理机制
常见的三种错误: 1.Notice :通知性错误,最小的错误,当发生通知性错误时,会弹出一个提示信息.不会中断代码的执行. 错误代码: #例如Notice: 2.Warning:警告性错误,当发生警告 ...
随机推荐
- linq to sql转载
LINQ简介 LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库 ...
- 关于JDBC 连接Access 数据库
************连接方式(一)Access_JDBC30.jar,此包由于是免费的,所有限制连接单次不超过50************************* Connection conn ...
- Firefox 设置技巧
在Firefox地址栏中输入“about:cache”并键入回车,接着将显示Firefox的内存缓冲设置与磁盘高速缓存设置.如果在页面上单击“List Cache Entries”链接,我们还可以查看 ...
- OC:copy 与 retain 的区别
copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象 ...
- MySQL主从复制的原理及配置
[http://www.jb51.net/article/50053.htm] MySQL 数据库的高可用性架构: 集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单 ...
- VS 2010下单元测试
1.创建单元测试项目 2.创建完成后,新建项目会自动添加“Microsoft.VisualStudio.QualityTools.UnitTestFramework”的引用,该引用用于单元 ...
- eclipse下安装Extjs的插件spket
最近项目要用ext进行开发,所以这段时间开始学习ext. 我这里用的是ext3.0,eclipse3.5. 每次都要去查API,很烦,所以装个EXT提示的插件对初学者来说有很大的帮助. 假设你已经下载 ...
- Ajax随笔
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- MPIO配置
设置好两块网卡的IP(实用同一段IP,或者不同网段IP均可以配置多路径)iSCSI发起程序配置:1.添加发现(默认设置即可)2.目标-连接-高级:分别配置 本地适配器.发起程序IP.目标门户IP(此处 ...
- PS-文字如何竖排版
单击文字输入工具“T”按钮,点住鼠标左键不要松手,会在“T”按钮的右边显示出其它形式的文字工具,拖动鼠标指向“直排文字”工具就可以了.