PHP错误和异常处理

zxh5566  2016-08-13 14:26   Hits: 

任何程序员在开发时都可能遇到一些失误,或其他原因造成的错误的发生,当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生,PHP程序的错误发生一般归属于下列三个领域。
语法错误,该错误最常见也最容易修复,例如,漏了一个分号,就会显示错误信息,这类错误会阻止脚本执行,通常发生在程序开发时,可以通过错误报告进行修改。再重新运行。
运行时错误,这种错误一般不会阻止PHP脚本运行,但是会阻止脚本做希望它所做的任何事情,例如,在调用header()函数前如果有字符输出,PHP通常会显示一条错误信息,虽然PHP脚本继续运行,但header()函数并没有执行成功。
逻辑错误,这种错误实际上是最麻烦的,不但不会阻止PHP脚本的执行,也不会显示出错信息,例如在if语句中判断两个变量的值是否相等,如果错把比较运行符号==写成赋值运行符号=就是一种逻辑错误,很难会被发现。
一个异常则是在一个程序执行过程中出现的一个例外,或是一个事件,它中断了正常指令的运行,跳转到其他程序模块继续执行,所以异常处理经常被当做程序的控制流程,无论是错误还是异常,应用程序都必须能够以妥善的方式处理,并做出相应的反应,希望不要丢失数据或者导致程序崩溃。

运行PHP脚本时,PHP解析器会尽力报告它遇到的问题,在PHP中错误报告的处理行为,都是通过PHP的配置文件php.ini中有关的配置指令确定的,另外PHP的错误报告有很多级别,可以根据不同的错误报告级别提供对应的调试方法。一旦把PHP设置成呈现出发生了哪些错误,你可能想调整错误报告的级别。

如果用户希望在PHP脚本中,遇到某个级别的错误时,将错误信息报告给用户。则必须在配置文件中,将display_errors指令设置为on,开启PHP输出错误报告的功能。也可以在PHP脚本中调用ini_set()函数,动态设置配置文件,如果display_errors被启用,就会显示满足已设置的错误级别的所有错误,当用户在访问时,看到显示的这些消息不仅会感到迷惑,而且还可能会过多的泄漏有关服务器的信息,使服务器变得很不安全,所以在项目开发或测试期间启用此指令,可以根据不同的错误报告更好的调试程序,出于安全和美感的目的,让公众用户查看PHP的详细出错信息一般不明智,所以在网站投入使用时要将其禁用。当开发网站时,将希望PHP报告特定类型的错误,可以通过调整错误报告的级别实现

可以通过在设置文件中,php.ini修改配置指令error_reporting的值,修改成功重新启动web服务器,则每个PHP脚本都可以按调整后的错误级别输出错误报告,或者可以在PHP脚本中使用error_reporting()函数,基于各个脚本来调整这种行为,这个函数用于确定PHP应该在特定的页面内报告哪些类型的错误。

error_reporting(0) //设置为0会完全关闭错误报告
error_reporting(E_ALL) //将会向PHP报告发生的每个错误
error_reporting(E_ALL&~E_NOTICE)//可以抛出任何非注意的错误报告

在下面的示例中,我们在PHP脚本中分别创建出一个注意,一个警告和一个致命错误,并通过设置不同的错误级别限制程序输出没有被允许的错误报告,创建一个名为error.php的脚本文件。

<?php

ini_set("display_errors",1);
error_reporting(E_ALL);
getType($var);//调用函数时提供的参数变量没有定义,报一个notice,不会阻止脚本运行
getType();//调用函数没有提供参数,报warning,指示一个问题,但不会阻止脚本执行
get_Type();//报error错误,终止程序执行

?>

在上面的脚本中,为了确保配置文件display_errors指令开启,通过ini_set()函数强制在该脚本执行中启动,并通过error_reporting()函数设置错误级别为E_ALL,报告所有错误,警告和注意,并在脚本中分别创建出注意,警告和错误,PHP脚本只有在遇到错误时才会终止运行,注意和警告的错误报告并不会终止程序,如果不希望有注意和警告的输出,可以在脚本中修改error_reporting()函数为 error_reporting(E_ALL&~(E_WARNING|E_NOTICE))。

上一篇:PHP网站传到服务器后无法上传文件和图片
下一篇:PHP错误日志详解