php基础系列----8php中错误和异常的处理

来源:互联网 发布:rsyslog windows 编辑:程序博客网 时间:2024/06/11 15:52

php提供了对异常和错误的处理机制,通过这些机制可以让程序更加健壮;

php中的错误处理机制:

1:常见的错误类型

    E_WARNING           警告,非致命的错误。不暂停脚本执行。    E_NOTICE            通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。    E_ERROR           致命的错误,会导致程序终止执行    E_USER_ERROR          致命的用户生成的错误。类似于使用 PHP 函数 trigger_error() 设置的 E_ERROR。    E_USER_WARNING        非致命的用户生成的警告。类似于使用 PHP 函数 trigger_error() 设置的 E_WARNING。    E_USER_NOTICE         用户生成的通知。类似于使用 PHP 函数 trigger_error() 设置的 E_NOTICE。    E_RECOVERABLE_ERROR      可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。    E_ALL             所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

2:错误处理方式

通过php函数:

1:die()函数:

支持输出一段提示信息,终止程序的运行:

die("程序出现错误");

2:exit()函数:

同die()函数,可以在输出一段提示信息之后终止程序的执行;

exit("程序出现错误");

3:自定义错误处理器:

如果觉得系统对于错误的处理满足不了自己的需求,那么可以自定义错误处理器:

指定错误处理函数:

//自定义错误处理器,通过set_error_handler()函数指定错误处理函数;set_error_handler(myErrorHandler);

自定义错误处理函数:

myErrorHandler(error_level,error_message,error_file,error_line,error_context)//特别注意:前两个是必须要有的参数,之后的参数则是可选的;error_level     //必需。为用户定义的错误规定错误报告级别。必须是一个数字。error_message   //必需。为用户定义的错误规定错误消息。error_file    //可选。规定错误发生的文件名。error_line    //可选。规定错误发生的行号。error_context   //可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

4:调整错误的显示和记录:

php同样支持队错误信息的显示与否的设置,以及错误信息的记录设置;

1:设置是否显示错误提示信息:

  1:通过display_errors:设置是否输出错误信息:

ini_set("display_errors",0/1/on/off): //0不显示,1显示;

  2:在php.ini的配置文件里面设置display_errors = on/off:选择是否输出错误信息;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:一般推荐在开发过程中打开错误提示,在正式部署上线只后就关闭这个功能;

2:输出错误报告级别:

  1:通过error_reporting:设置错误报告级别

如:ini_set("error_reporting",E_ALL&~E_NOTICE)

  2:在php.ini的配置文件中设置error_reporting的常量值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:常量值由上述错误常量和逻辑表达式组成;

3:设置是否记录错误日志

  1:通过log_errors设置是否将错误信息记录到日志中;

如:ini_set("log_errors",0/1);

  2:在php.ini的配置文件里,设置log_errors的值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;

4:错误信息记录位置:

  1:通过error_log设置记录错误信息的位置:

如:ini_set("error_log","log/mylog.log");

  2:在php.ini的配置文件里,设置error_log的值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:记录位置可以是自定义的位置,也可以是记录到系统日志:syslog;

4:trigger_error()函数的用法:

ok,谁编写程序肯定都不希望自己的程序动不动出错对吧?,但是你管得了自己还能管得了别人吗?
对,说的就是用这个软件的人,在用户输入错误的时候,无论是故意挑衅还是无意为之,我们都必须要能够进行提示;这时候就需要trigger_error();函数;
trigger_error()函数的作用就在于可以人为的触发用户级别的错误;
这个函数要求有两个参数,
第一个参数是提示信息;是必须的参数;
第二个参数是错误级别:是可选的参数,默认是notice级别;

php中的异常的处理机制:

程序运行过程中除过错误以外还有可能发生异常;看下php对异常的处理:

1:抛出异常:

在有可能出现异常的地方通过throw关键字即可抛出异常:
如:

function splitefunction(){    $i = 0;    if($i == 0){    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;        throw new Exception("error  msg");    }}splitefunction();

2:通过try catch来处理异常

像上面那样,如果外部能够捕获并处理异常最好,但是如果不能的话那程序将会终止执行;
有些时候也需要进行个性化的处理,那么就需要主动捕获异常并处理:
如:

function splitefunction(){    $i = 0;    if($i == 0){    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;        throw new Exception("error  msg");    }}//在这里通过try  catch捕获异常并处理try{    splitefunction();}catch(Exception $e){    echo $e->getMessage();}

3:多级异常处理:

多级处理是通过多个catch块进行的:
比如:

function splitefunction(){    $i = 0;    if($i == 0){    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;    //此处假设抛出exception1的异常;        throw new Exception1("error  msg");    }}//在这里通过try  catch捕获异常并处理try{    splitefunction();}catch(Exception1 $e){    echo $e->getMessage();}catch(Exception $e){    echo $e->getMessage();}

通过多个catch块可以捕获多级异常信息,但是要求从上至下异常的级别应该由小到大;

获取异常信息

$e->getMessage():获取异常信息;$e->getFile():返回发生异常的文件名;$e->getLine():返回发生异常的代码行号$e->getTrace():返回错误栈;

自定义异常处理器:

自定义异常处理函数:

function myException($exception){    echo "Exception: " . $exception->getMessage();}

自定义异常处理器:

set_exception_handler('myException');

定义了异常处理器之后,在脚本中的异常将会交由自定义的异常处理函数解决;

0 0