PHP错误处理

错误的分类

通常分3种:

语法错误:

程序运行之前,都要先检查语法。如果语法有错误,就会立即报错,并且不会去执行程序。

运行时错误:

就是在程序语法检查通过后,,开始运行程序并在此过程中遇到的错误。常见的有3中:

提示性错误:

警告性错误:

致命错误:

逻辑错误:

指的是,程序本身可以正常执行,没有报错——但"计算结果"却错了。

错误的分级

php语言中,将各种错误进行了不同级别的分类归纳,并形成大约有10几个级别的错误,这就是技术层面的错误分级。

每一级别的错误,都有一个"代号",这个代号其实也就是一个系统内部的"常量而已"。比如:

系统常见错误:

E_ERROR:        致命错误

E_WARNING:    警告性错误

E_NOTICE:        提示性错误

用户可自定义的错误:

E_USER_ERROR:        自定义致命错误

E_USER_WARNING:        自定义警告性错误

E_USER_NOTICE:        自定义提示性错误

其他:

E_STRICT:        严谨性语法检查错误

E_ALL            代表"所有错误"。

详细参考手册:

下面来看看这些错误代号的实际值:

运行结果为:

错误的触发

错误的触发,就是让错误"发生"。

有两种方式会触发错误:

系统触发

程序运行到某行代码,确实出现了某种错误,此时系统就会报错——这就是触发了系统错误。

系统触发的典型错误有这3种:

E_NOTICE:        提示性错误:会输出错误提示,并继续执行后续代码;

比如使用不存在的变量或常量:

E_WARNING:    警告性错误:会输出错误提示,并继续执行后续代码(也可能看具体情况,比如require)

比如include载入一个不存在的文件:

E_ERROR:        致命错误:导致程序无法执行后续语句;

比如调用一个不存在的函数!

自定义触发:

当我们处理某些数据的时候,本来数据本身是没有错误的,但根据具体应用(业务)的需要,会要求数据满足某种条件,而该数据并不满足的时候,我们就可以在程序中"主动"去触发(创建)一个错误,以表明该数据的"非法性"。

语法形式:

trigger_error("错误提示信息内容", 3中用户错误代号之一);

其中触发了用户的致命错误(E_USER_ERROR),也会终止程序的后续执行。

错误报告的显示问题

所谓错误报告,就是显示在网页上的错误提示内容!

有关错误报告,有2个问题需要处理:

是否显示错误报告(display_errors):

有2种做法可以来设定是否显示:

做法1:

在php.ini文件中,设定display_erros的值,为on(显示),或为off(不显示)

可以修改为:

当然,作为开发阶段,我们都应该显示错误信息。

注意:前提条件都是我们apache已经装载了php.ini文件——这一点,需要在apache的配置文件httpd.config中加入如下一行:

PHPIniDir "php.ini文件的了位置(路径)"

比如:

方法2:

直接在php的脚本文件中设使用函数ini_set()来对其进行设置:

当然,如果设置为1,就是显示!

注意:

1,不管哪种形式,该单词是一样的:display:errors

2,使用php.ini配置,影响的是全局(即所有php网页);

3,在某个脚本代码中使用ini_set()设置,就只影响该脚本代码本身——这是常用的方式。

4,脚本中的设置优先于php.ini中的设置。

显示哪些级别的错误报告(error_reporting):

显然,前提是"display_errors"设置为On(或1),表示可以显示。

显示哪些级别的错误报告,也有2个做法:

做法1:在php.ini文件中;

这个值目前代表"所有错误",都显示。

修改为:

此时就只显示E_NOTICE级别的错误

更多示例为:

error_reporting = E_NOTICE | E_WARING | E_ERROR        //显示该3种;

error_reporting = E_ERROR | E_USER_ERROR                //显示该2种严重错误

要想代表真正的"所有错误",应该写为:E_ERROR | E_STRICT,图示如下:

做法2:在当前的脚本代码中:

跟php.ini中设置其实是一样,举一些例子如下:

ini_set("error_reporting", E_NOTICE);    //就显示该一个级别的错误

ini_set("error_reporting", E_NOTICE | E_WARNING),    //显示2个级别

ini_set("error_reporting", E_NOTICE | E_WARNING | E_ERROR),    //显示3个级别

ini_set("error_reporting", E_ALL | E_STRICT),    //这才代表显示所有错误!

错误日志的记录问题

错误日志其实就是错误报告,只是它会"写入文件中",此时就称为错误日志!

也有2个问题,每个问题也有2种做法:

是否记录log_errors:

php.ini中:

log_errors = On 或 Off

脚本中:

ini_set("log_erros", 1); 或 0

补充一句:

1:ini_set("php配置项", 值);    //用于脚本中设置php.ini中是某项的值。

2,:$v1 = ini_get("php配置项");    //用于获取php.ini中是某项的值

记录到哪里error_log:

一般就只有2个写法:

写法1:直接使用一个文件名,此时系统会自动在每个文件夹下都建立该文件名,并用其记录该文件夹下的所有网页文件发生的错误信息。

然后执行一个有错误的网页,并可以观察到:

其中的内容大约为:

写法2:使用一个特殊的名字"syslog",则此时所有错误信息都会记录到系统的"日志文件"中。

系统日志文件在这里:控制面板》管理工具》事件查看器》window日志》应用程序:

然后执行一个有错误的网页,并可以观察到:

自定义错误处理器

什么叫错误处理器?

就是一旦发生错误,用来处理该错误的一种"机器"——其实就是一个函数。

自定义错误处理,就是指:

让系统不要去处理错误了,而完全由我们(开发者)来对错误进行处理:显示和记录。

做法,其实非常简单,就2步:

第一步:

设定要用于处理错误的函数名!

set_error_handler("f1");

第二步:

去定义该函数!

function f1(){

//这里可以任意写代码:自然正常是去显示错误报告,和记录错误日志。

}

PHP中错误处理集合的更多相关文章

  1. DB2中错误信息说明

    DB2错误信息SQLCODE SQLSTATE (按sqlcode排序) .分类: db2数据库 2012-10-19 11:35 2942人阅读 评论(0) 收藏 举报 db2sql存储table数 ...

  2. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  3. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  4. 深入理解javascript中的动态集合——NodeList、HTMLCollection和NamedNodeMap

    × 目录 [1]NodeList [2]HTMLCollection [3]NamedNodeMap[4]注意事项 前面的话 一说起动态集合,多数人可能都有所了解.但是,如果再深入些,有哪些动态集合, ...

  5. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  6. JAVA并发七(多线程环境中安全使用集合API)

    在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...

  7. 【.net 深呼吸】在配置节中使用元素集合

    前一篇博文中,老周介绍了自定义配置节的方法,本文咱们再往深一层,再看看如何在自定义的配置节中使用配置元素集合. 前面咱们说过,Configuration Section是特殊的配置元素,它可以包装一类 ...

  8. 转:【Java并发编程】之八:多线程环境中安全使用集合API(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17200509     在集合API中,最初设计的Vector和Hashtable是多线程安 ...

  9. ERROR : PHP中错误基础

    1.错误 在进行PHP代码编辑的时候,容易碰到error错误提示,PHP中错误有两种:语法错误.逻辑错误. 2.错误报告类型 Notice : 通知 比如直接使用未定义的变量,这种错误不影响PHP脚本 ...

随机推荐

  1. [转]Oracle 修改或者删除临时表 ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引

    本文转自:http://blog.csdn.net/treasurelifelhf/article/details/7290729 由于存储过程出现问题,导致前台页面无法显示数据.执行存储过程发现临时 ...

  2. NopCommerce 发布时 Could not load file or assembly 'file:///...\Autofac.3.5.2\lib\net40\Autofac.dll' or one of its dependencies

    本文转自:http://www.nopcommerce.com/boards/t/33637/4-errors.aspx 问题: The 3.5 solution compiles fine, and ...

  3. MMORPG大型游戏设计与开发(客户端架构 part6 of vegine)

    客户端的变量模块部分主要是将一些常用可变的值集中管理,如窗口的大小,是否开启音乐,音量的大小等等.这些变量通常会应该到客户端的操作,一般来说变量改变的时候会调用一个回调进行处理.下面我们就看看该模块的 ...

  4. 探索 OpenStack 之(17):计量模块 Ceilometer 中的数据收集机制

    本文将阐述 Ceilometer 中的数据收集机制.Ceilometer 使用三种机制来收集数据: Notifications:Ceilometer 接收 OpenStack 其它服务发出的 noti ...

  5. java的构造方法

    当一个类a继承一个类b,类b继承类c,类c继承类d时, 先执行d的构造,然后c.b:当该执行a的构造时,如果有成员变量,就先执行成员变量,最后构造 子类继承父类,子类重写父类的某个方法,当父类构造时, ...

  6. QuickFIX/N 动态存储配置信息

    Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要.在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号 ...

  7. [No000004]在WIN7/8任务栏创建快捷方式

    在XP时代,有一个快速启动栏,创建快捷方式只需要把快捷方式放在“%AppData%\Roaming\Microsoft\Internet Explorer\Quick Launch”文件夹下即可,如果 ...

  8. centos安装docker

    一.升级内核 [root@iZ2893wjzgyZ ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@iZ289 ...

  9. BZOJ 1030 【JSOI2007】 文本生成器

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...

  10. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...