php异常处理捕获错误整理

PHP的错误报告有三种:

1、错误,语法解析错误,致命错误

2、警告

3、注意

后果:

错误 -> 致命错误,会终止已下程序的执行,语法错误的话,PHP压根就没执行。

警告 -> 他不会终止运行,但会影响结果。

注意 -> 不会终止执行,也不会影响结果。

为了让用户得到更好的体验,我们屏蔽所有错误的输出,是输出,而不是显示。但这样的话,管理员也看不到错误了。页面上不显示错

误,而将错误生成一个日志,提供给管理员查看。

error_reporting(~E_ALL)将所有输出都屏蔽掉了,自然,管理员也看不到了。我不要屏蔽所有输出,我只要屏蔽所有显示

ini_set('display_errors','off');表示屏蔽了所有的页面上错误的显示,但没有屏蔽错误的输出。

ini_set('log_errors','on'); //开启日志写入功能 ini_set('error_log','myerror.log');

//日志的存放位置 ini_set('display_errors','off'); //屏蔽页面显示 error_reporting(E_ALL); //输出所有错误

echo 123; echo $str; //这个会出现一个注意,表示未声明变量 echo date(); //警告,没有传参 echo dae(); 

//致命错误,找不到这个函数 echo 123;

异常:

在 PHP语言里,所有异常都必须自己抛出,而不像 JAVA 之类的语言会自动抛出异常,这也正是 PHP源代码里很少看到异常处理语句的

原因之一。

异常与错误:

异常是指程序运行中不符合预期情况以及与正常流程不同的状况。错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器

无法通过检查设置无法运行的情况。

由于php最开始是没有异常处理,后来为了进军企业级开发,模仿。PHP一旦遇到非正常代码,大多数情况下,都是直接抛出错误,而不

是异常。

php只有在你throw 一个异常后,才能用try...catch来捕获异常(一般情况下如此,也有部分异常可以自动捕获)。

在php中通常会在以下场景中使用异常:

1、对程序的悲观预测:如果认为自己的代码无法一一处理各种可预见的情况、不可预见的情况。

2、程序的需要和对业务的关注 : 如果对数据的一致性要求很高时,可以用try...catch把异常造成的逻辑中断破坏将到最小,并且经过补救

处理后,不影响业务逻辑的完整性。

3、语言级别的健壮性要求 : 通过精确控制运行时的流程,在程序中断时,有预见的用try...catch缩小可能出错的范围,及时捕获异常并做

出相应的补救。

PHP中的错误:

错误就是会使脚本运行不正常的情况。

在php中主要的错误等级如下:

deprecated: 最低级别的错误,表示"不推荐, 不建议"。例如在php 5中使用了ereg系列的正则函数就会出现。这类错误一般由于使用了不推荐的、过时的函数或语法造成。不影响程序正常运行,但建议修正。

notice: 一般指语法中存在不恰当的地方。如使用变量但是未定义就会报此错误。不影响程序正常流程。

warning: 较高级别的错误,在语法中出现很不恰当的情况才会出现此错误,比如函数参数不匹配。会导致得不到预期的结果,需要修改代码。

fetal error: 致命错误,直接导致程序终止运行。这类错误必须修改。

prase error: 语法解析错误,上面几种都属于运行时错误,此错误在运行前就会抛出。

自定义错误处理程序:

可以使用 set_error_handler() 函数来托管错误处理程序,可自行定制错误的处理流程。

如果要取消托管的话,可以在同一个页面中使用restore_error_handler()来取消托管;如果想要自己抛出一个错误的话,可以使用

trigger_error()函数。

以上就是php异常处理捕获哪些错误的详细内容,感谢大家的学习和对我们的支持。

(0)

相关推荐

  • php实现的PDO异常处理操作分析

    本文实例讲述了php实现的PDO异常处理操作.分享给大家供大家参考,具体如下: 异常处理: PHP:默认为直接报错 MYSQL:默认为静默模式,错就错,不报错 PDO:默认为静默模式,错就错,不报错 以前,当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦.后来,当错误发生之后,会将错误信息不再直接输出,放到一个类的对象里(PDOException) 要使用PDO异常处理,必须满足两个条件 1.需要将错误处理模式变成异常模式 $pdo->setAttribute(PDO::ATTR_ER

  • PHP中常见的错误与异常处理总结大全

    前言 当我们开发程序时,程序出现问题是很常见的,当出现了异常与错误我们该如何处理呢?本文将详细给大家介绍PHP错误与异常处理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 一.PHP错误处理 1.语法错误 2.运行时错误 3.逻辑错误:不提示错误,但功能不对,最麻烦 4.三种级别:notice/warning/fatal error(无法继续执行) 5.错误报告显示: a.可以在php.ini中修改error_reporting项目,以限定错误报告类型,如:error

  • PHP异常处理定义与使用方法分析

    本文实例讲述了PHP异常处理定义与使用方法.分享给大家供大家参考,具体如下: <?php //php5提供了基本的异常处理类,可直接使用 ,不需要自己再定义 // class Exception // { // protected $message = 'Unknown exception'; // 异常信息 // protected $code = 0; // 用户自定义异常代码 // protected $file; // 发生异常的文件名 // protected $line; // 发生

  • 基于PHP7错误处理与异常处理方法(详解)

    PHP7错误处理 PHP 7 改变了大多数错误的报告方式.不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出. 这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获.如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理. 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error). Error 类并非继承自

  • 关于ThinkPHP中的异常处理详解

    什么是异常 从更加广泛的角度来看,异常包含两个方面,一方面是程序执行时由于语法.运行时错误等导致的异常,一方面时没有给予正确的反馈,如客户端要查询某个产品,没有查询到,我认为这也属于异常的一种. 第一种异常TP框架本身会在页面中输出错误信息,但是第二种异常则一般不会输出任何信息,所以非常不方便调试. 本文将详细介绍关于ThinkPHP异常处理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 前提环境 现在 PHP 在很多时候是为前端提供接口,所以我们的异常处理也基于这

  • PHP异常类及异常处理操作实例详解

    本文实例讲述了PHP异常类及异常处理操作.分享给大家供大家参考,具体如下: 异常处理归类于错误处理,PHP从5.1.0开始增加了Exception异常处理类. 一.异常处理 PHP 异常处理与Java相似,都使用try.throw.catch语句,发生异常时代码.如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息. 1.t

  • php异常处理捕获错误整理

    PHP的错误报告有三种: 1.错误,语法解析错误,致命错误 2.警告 3.注意 后果: 错误 -> 致命错误,会终止已下程序的执行,语法错误的话,PHP压根就没执行. 警告 -> 他不会终止运行,但会影响结果. 注意 -> 不会终止执行,也不会影响结果. 为了让用户得到更好的体验,我们屏蔽所有错误的输出,是输出,而不是显示.但这样的话,管理员也看不到错误了.页面上不显示错 误,而将错误生成一个日志,提供给管理员查看. error_reporting(~E_ALL)将所有输出都屏蔽掉了,自

  • PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法

    异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. PHP 5 添加了类似于其它语言的异常处理模块.在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常.每一个 try 至少要有一个与之对应的 catch.使用多个 catch 可以捕获不同的类所产生的异常.当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一

  • 浅谈PowerShell 捕获错误

    之前的文章我们演示了如何使用 Windows PowerShell 构建相当高级的清单工具.我创建的工具提供了多个有关输出的选项,这应归功于外壳的内置功能和将函数应用于对象. 我所创建的函数有一个无可否认的弱点:它不能适度处理可能发生的任何错误(例如连接或权限问题).这正是我要在本期的 Windows PowerShell 专栏中加以解决的,我将介绍 Windows PowerShell 所提供的错误处理功能. 设置 Trap 在 Windows PowerShell 中,Trap 关键字定义一

  • ASP.NET MVC中异常处理&自定义错误页详析

    一.应用场景 对于B/S应用程序,在部署到正式环境运行的过程中,很有可能出现一些在前期测试过程中没有发现的一些异常或者错误,或者说只有在特定条件满足时才会发生的一些异常,对于使用ASP.NET MVC开发的应用程序站点,在部署到IIS上后,如果开发人员未对程序进行错误处理,那么一旦程序出现未处理的错误或异常,用户将看到一个让人感到及其困惑的错误堆栈跟踪页面,使得站点的用户体验下降,从程序的角度上来说,不做自定义错误处理也不利于程序出问题时的根源查找,因为很多时候有些错误只在特定条件下满足时才重现

  • Android 捕获错误日志的方法

    前提 今天在群里聊天的时候有群友问如何捕获错误日志,我说可以自己写,也可以用第三方的比如腾讯的bugly,友盟的错误统计等等,但是那些是别人的东西,作为一个程序员当然是要知其然,并且要知其所以然.因此今天就在此写一下关于捕获错误日志的文章,希望可以给新手指导,大佬请绕行. 首先 要捕获错误日志当然是调用系统的了,这样最方便,也是大家常用的了,废话不多说,直接上图,no pic say a xx. 错误日志.png 其次 上面的图是日志信息,下面来看看代码如何编写. 捕获错误日志信息类 publi

  • python怎么自定义捕获错误

    异常捕捉: try: XXXXX1 raise Exception("xxxxx2") except (Exception1,Exception2,--): xxxx3 else: xxxxx4 finally: xxxxxxx5 1.raise 语句可以自定义报错信息,如上. 2. raise后的语句是不会被执行了,因为已经抛出异常,控制流将会跳到异常捕捉模块. 3. except 语句可以一个except后带多个异常,也可以用多个语句捕捉多个异常,分别做不同处理. 4. excep

  • JAVA异常处理捕获与抛出原理解析

    JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 异常处理能让程序在异常发生时,按照异常处理设定的逻辑对异常进行处理,最大程度保证程序继续运行,并且显示并处理异常. JAVA 程序发生异常,就会用对应的异常类的对象来封装异常,JRE(Java Runtime Environment) 便会寻找对应的异常处理逻辑来处理该异常. 总的说来,异常处理机

  • shiro与spring security用自定义异常处理401错误

    目录 shiro与spring security自定义异常处理401 背景 解决方案 SpringBoot整合Shiro自定义filter报错 No SecurityManager accessible to the calling code... 产生原因 解决办法 小结一下 shiro与spring security自定义异常处理401 背景 现在是前后端分离的时代,后端必然要统一处理返回结果,比如定义一个返回对象 public class ResponseData<T> { /** *

  • asp.net错误捕获(错误处理)page_error事件使用方法

    ASP.NET 提供了三种用于在出现错误时捕获和响应错误的主要方法:page_error事件.application_error 事件以及应用程序配置文件 (Web.config). 这三种方法的主要作用无非是创建自定义的错误报告,创建自定义错误报告的作用无非是:出于安全方面的考虑,还有就是为了向用户展示友好的错误页面,提高程序的友好性. Page_Error 事件,现举例说明如下: 此示例在浏览器中显示了详细的错误信息,提供此示例只是为了进行说明.向应用程序的最终用户展示出错的详细信息是非常危

  • PowerShell捕获错误的2种方法(异常捕获命令、错误变量)

    在先前的技巧中你能观察到使用了 "-ErrorAction Stop"结合"异常捕获命令"能捕获一个Powershell命令的错误,可是使用了这种方式操作之后,脚本会在第一个错误发生后停止. 下面举例:使用Powershell递归扫描文件夹.它将不能完成捕获中间所有的异常(例如某些子文件夹是受访问保护的). 复制代码 代码如下: try{  Get-ChildItem -Path $env:windir -Filter *.ps1 -Recurse -ErrorAc

随机推荐