热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中错误处理集合

错误的分类

通常分3种:

 

语法错误:

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

 

运行时错误:

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

提示性错误:

警告性错误:

致命错误:

 

逻辑错误:

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

 

错误的分级

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

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

 

系统常见错误:

E_ERROR:        致命错误

E_WARNING:    警告性错误

E_NOTICE:        提示性错误

用户可自定义的错误:

E_USER_ERROR:        自定义致命错误

E_USER_WARNING:        自定义警告性错误

E_USER_NOTICE:        自定义提示性错误

其他:

E_STRICT:        严谨性语法检查错误

E_ALL            代表"所有错误"。

 

详细参考手册:

PHP中错误处理集合

 

 

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

PHP中错误处理集合

运行结果为:

PHP中错误处理集合

 

错误的触发

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

有两种方式会触发错误:

 

系统触发

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

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

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

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

PHP中错误处理集合

 

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

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

PHP中错误处理集合

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

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

PHP中错误处理集合

自定义触发:

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

语法形式:

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

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

PHP中错误处理集合

 

错误报告的显示问题

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

 

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

 

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

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

做法1:

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

PHP中错误处理集合

可以修改为:

PHP中错误处理集合

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

 

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

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

比如:

PHP中错误处理集合

 

方法2:

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

PHP中错误处理集合

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

 

注意:

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

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

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

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

 

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

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

 

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

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

PHP中错误处理集合

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

修改为:

PHP中错误处理集合此时就只显示E_NOTICE级别的错误

更多示例为:

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

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

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

PHP中错误处理集合

 

做法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:直接使用一个文件名,此时系统会自动在每个文件夹下都建立该文件名,并用其记录该文件夹下的所有网页文件发生的错误信息。

PHP中错误处理集合

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

PHP中错误处理集合

其中的内容大约为:

PHP中错误处理集合

 

 

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

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

 

PHP中错误处理集合

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

PHP中错误处理集合

 

 

自定义错误处理器

什么叫错误处理器?

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

 

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

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

 

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

 

第一步:

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

set_error_handler("f1");

第二步:

去定义该函数!

function f1(){

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

}

 

PHP中错误处理集合

 


推荐阅读
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
author-avatar
Melody-Zhu1988
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有