错误的分类

通常分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文件中;

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

修改为:

更多示例为:

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. 航空概论(历年资料,引之百度文库,PS:未调格式,有点乱)

    航空航天尔雅 选择题1. 已经实现了<天方夜谭>中的飞毯设想.—— A——美国2. 地球到月球大约—— C 38 万公里3. 建立了航空史上第一条定期空中路线—— B——德国4. 对于孔明 ...

  2. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  3. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  4. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  5. 实时的.NET程序错误监控产品Exceptionless

    Exceptionless可以对ASP.NET, Web API, WebForms, WPF, Console, 和 MVC 应用提供错误监控.上传.报表服务.使用时需要在Exceptionless ...

  6. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  7. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  8. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

  9. 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file

    我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...

  10. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

随机推荐

  1. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

    由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...

  2. CodeForces 725A

    A. Jumping Ball time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  3. json-lib之复杂数据类型的转换

    在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名.年龄等 public class Student{ private String sname; privat ...

  4. iOS横向瀑布流的封装

    前段时间, 做一个羡慕, 需要使用到瀑布流! 说道瀑布流, 或许大家都不陌生, 瀑布流的实现也有很多种! 从scrollView 到 tableView 书写的瀑布流, 然后再到2012年iOS6 苹 ...

  5. .Net程序员学用Oracle系列(12):增删改查

    1.插入语句 1.1.INSERT 1.2.INSERT ALL 2.删除语句 2.1.DELETE 2.2.TRUNCATE 3.更新语句 3.1.UPDATE 3.2.带子查询的 UPDATE 3 ...

  6. 《响应式Web设计—HTML5和CSS3实战》 学习记录

    作者:Ben Frain 学习时间   2016/5/12 第一章   设计入门 *视口调试工具 IE:Microsoft Internet Explorer Develop Toolbar Safa ...

  7. SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)

    前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...

  8. nagios安装及监控Linux主机

    服务端的操作:##################################安装lamp环境及依赖包##########################   24  rpm -ivh gd-de ...

  9. windows 地址空间分配

    当系统创建一个进程同时为其创建它地址空间时,此地址空间中大部分都是闲置的.为了使用这部分地址空间,我们必须调用VirtualAlloc来分配其中的区域.分配区域的操作被称为预定. 当应用程序预定地址空 ...

  10. android列表停止滚动,加载图片,较为通用的一种办法

    在Adapter的itemView里面,判断列表是否在滚动中,其实是比较麻烦的,可能耦合性会比较严重. 所以考虑了下,是否能在itemView里面,检测列表的滚动状态,并监听停止状态加载图片,实现it ...