PHP错误和异常处理功能模块示例


Posted in PHP onNovember 12, 2016

本文实例讲述了PHP错误和异常处理功能模块。分享给大家供大家参考,具体如下:

一、错误类型和基本的调试方法

PHP程序的错误发生一般归属于下列三个领域:

语法错误:

语法错误最常见,并且也容易修复。如:代码中遗漏一个分号。这类错误会阻止脚本的执行。

运行时错误:

这种错误一般不会阻止PHP脚本的执行,但会阻止当前要做的事情。输出一条错误,但php脚本继续执行

逻辑错误:

这种错误最麻烦,既不阻止脚本执行,也不输出错误消息。
一个异常则是在一个程序执行过程中出现的一个例外,或是一个事件,它中断了正常指令的运行,跳转到其他程序模块继续执行。

PHP的错误报告级别

E_ALL //所有信息值:6143
E_ERROR//致命的运行时错误值:1
E_RECOVERABLE_ERROR //接近致命的运行时错误,若未被捕获则视同E_ERROR 值:4096
E_WARNING //运行时警告(非致命性错误) 值:2
E_PARSE//编译时解析错误值:4
E_NOTICE //运行时提醒(经常是bug,也可能是有意的) 值:8
E_STRICT//编码标准化警告(建议如何修改以向前兼容) 值:2048
E_CORE_ERROR //PHP启动时初始化过程中的致命错误值:16
E_CORE_WARNING //PHP启动时初始化过程中的警告(非致命性错)值:32
E_COMPILE_ERROR //编译时致命性错值:64
E_COMPILE_WARNING //编译时警告(非致命性错) 值:128
E_USER_ERROR //用户自定义的致命错误值:256
E_USER_WARNING //用户自定义的警告(非致命性错误) 值:512
E_USER_NOTICE //用户自定义的提醒(经常是bug) 值:1024

php.ini配置文件

display_errors: 是否开启PHP输出错误报告的功能
值为:On(默认输出错误报告)、Off(屏蔽所有错误信息)
在PHP脚本中可调用ini_set( )函数,动态设置php.ini配置文件.
如:ini_set("display_errors","On"); //显示所有错误信息
error_reporting: 设置不同的错误报告级别。
error_reporting= E_ALL & ~E_NOTICE
--可以抛出任何非注意的错误,默认值
error_reporting= E_ERROR | E_PARSE | E_CORE_ERROR
--只考虑致命的运行时错误、新解析错误和核心错误。
error_reporting= E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
--报告除用户导致的错误之外的所有错误。
在PHP脚本可以通过error_reporting( )函数动态设置错误报告级别。如:error_reporting(E_ALL);]

设置错误级别实例:error.php

<h2>测试错误报告</h2>
<?php
/*开启php.ini中的display_errors指令,只有该指令开启如有错误报告才能输出*/
ini_set('display_errors',1);
/*通过error_reporting()函数设置在本脚本中,输出所有级别的错误报告*/
error_reporting(E_ALL);
/*“注意(notice)”的报告,不会阻止脚本的执行,并且不一定是一个问题*/
getType($var);//调用函数时提供的参数变量没有在之前声明
/*“警告(warning)”的报告,指示一个问题,但是不会阻止脚本的执行*/
getType();//调用函数时没有提供必要的参数
/*“错误(error)”的报告,它会终止程序,脚本不会再向下执行*/
get_Type();//调用一个没有被定义的函数
?>

PHP错误报告行为的配置指令

display_startup_errors= Off
是否显示PHP引擎在初始化时遇到的错误。
log_errors= On
决定日志语句记录的位置。
error_log(默认null)
指定错误写进的文件或记录错误日志于系统日志syslog。
Log_errors_max_len=1024
每个日志项的最大长度,单位是字节。0表示最大。

二、错误日志

两种方式记录错误日志:

使用指定的文件记录错误报告日志
错误日志记录到操作系统的日志里

使用指定的文件记录错误报告日志

1、先配置php.ini:

error_reporting= E_ALL//将向PHP发送每个错误
display_errors=Off//不显示错误报告
log_errors=On//决定日志语句记录的位置。
log_errors_max_log=1024// 每个日志项的最大长度
error_log=G:/myerror.log//指定错误写进的文件

2、使用函数:在php文件中使用error_log()来记录日志,就可以将信息写入到myerror.log文件中

如:

error_log("登录失败了!");

3、使用四个函数来记录日志:

define_syslog_variables();//为系统日志初始化配置
openlog();//打开一个日志链接
syslog();//发送一条日志

例子

<?php
if(!Ora_Logon($username, $password)){
error_log("Oracle数据库不可用!", 0);
//将错误消息写入到操作系统日志中
}
if(!($foo=allocate_new_foo()){
error_log("出现大麻烦了!", 1, "webmaster@www.mydomain.com"); //发送到管理员邮箱中
}
error_log("搞砸了!",2, "localhost:5000");
//发送到本机对应5000端口的服务器中
error_log("搞砸了!", 3, "/usr/local/errors.log");
//发送到指定的文件中
?>
<?php
define_syslog_variables();
openlog("PHP5", LOG_PID , LOG_USER);
syslog(LOG_WARNING, "警告报告向syslog中发送的演示,警告时间:".date("Y/m/dH:i:s"));
closelog();
?>

查看日志:如windows系统,通过右击“我的电脑”-> 选择管理选项->在系统工具菜单中选择事件查看器->在应用程序选项中即可看到日志了

三、异常处理

异常(Exception)处理用于在指定的错误发生时改变脚本的正常流程。是PHP5中的一个新的重要特性。异常处理是一种可扩展、易维护的错误处理统一机制,并提供了一种新的面向对象的错误处理方式。

异常处理格式:

try{
//使用try去包含可能会发生异常的代码.
//一旦出现异常try进行捕获异常,交给catch处理。
//抛出异常语句:throw 异常对象。
}catch(异常对象参数){
//在这里做异常处理。
}[catch(。,,){
.. .. ..
}]

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
十天学会php(1)
Oct 09 PHP
php读取msn上的用户信息类
Dec 05 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
PHP将XML转数组过程详解
Nov 13 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHP5.3新特性小结
Feb 14 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
php版微信小店调用api示例代码
Nov 12 #PHP
php实用代码片段整理
Nov 12 #PHP
php中strlen和mb_strlen用法实例分析
Nov 12 #PHP
Yii2单元测试用法示例
Nov 12 #PHP
php获取flash尺寸详细数据的方法
Nov 12 #PHP
Yii2实现log输出到file及database的方法
Nov 12 #PHP
php 自定义错误日志实例详解
Nov 12 #PHP
You might like
关于PHP中Object对象的笔记分享
2011/06/28 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
Python lambda和Python def区别分析
2014/11/30 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python对象与引用的介绍
2019/01/24 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python try...finally...的实现方法
2020/11/25 Python
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
优秀民警事迹材料
2014/01/29 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
创先争优活动承诺书
2014/08/30 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
一般纳税人申请报告
2015/05/18 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server