学习PHP错误与异常设置

发布时间:2020-06-10编辑:脚本学堂
本文为大家介绍PHP错误与异常设置的相关内容,感兴趣的朋友可以参考下。

在PHP中,错误有轻重之分。严重的错误会中断脚本的继续执行,这是致命的错误,有点像Java中的Error和Exception,但Java中的Error源于JVM错误,无法被coder处理;而轻微的错误不中断脚本的继续执行,但产生一些错误信息(可以设置不显示这些警告信息),这是非致命的错误,有点像Java中的RuntimeException,不强求coder对之处理。

在PHP中,错误与异常是两种不同的东西。错误由系统抛出,也可以由coder手动抛出,并且都可以被coder捕获并处理。与Java等强类型语言不同,PHP不会自动抛出异常,而必须全部由coder手动抛出。异常一旦被抛出就必须有相应的代码对它处理,否则将会造成脚本执行的中断。

ini_set('display_errors', 'On');  ini_set('error_reporting', E_ALL | E_STRICT);  try {  $foo++;  } catch (Exception $e) {  echo 'I catch you!';//try catch能捕获异常,而不能捕获错误  }  echo 'go on ...';输出:
Notice: Undefined variable: foo in ****** on line 3
go on …
可见对未初始化的$foo进行加法运算会产生E_NOTICE错误,从而输出了一行警告信息。但不影响脚本后续部分的执行。
如果开启了日志功能(log_errors=On),则在php日志文件中可以同样看到:
[03-Sep-2009 14:02:31] PHP Notice: Undefined variable: foo in ****** on line 3

可见对未初始化的$foo进行加法运算会产生E_NOTICE错误,从而输出了一行警告信息。但不影响脚本后续部分的执行。
如果开启了日志功能(log_errors=On),则在php日志文件中可以同样看到:
[03-Sep-2009 14:02:31] PHP Notice: Undefined variable: foo in ****** on line 3

PHP中有哪些错误?

PHP使用常量标记了以下几种常见的错误类型:
E_NOTICE:run-time通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。如使用了未定义或未初始化的变量等。
E_WARNING:run-time警告。不暂停脚本执行。如mysql_connect()连接失败。
E_ERROR:run-time错误,脚本执行被中断。如使用了未定义的class。
E_USER_NOTICE:由coder使用trigger_error(‘error’, E_USER_NOTICE)手动抛出的run-time通知,脚本执行不被中断。
E_USER_WARNING:由coder使用trigger_error(‘error’, E_USER_WARNING)手动抛出的run-time警告,脚本执行不被中断。
E_USER_ERROR:由coder使用trigger_error(‘error’, E_USER_ERROR)手动抛出的run-time错误,脚本执行被中断。
E_PARSE:致命的parse错误。
E_COMPILE_ERROR:致命的compile错误。
E_COMPILE_WARNING:非致命的compile警告,脚本执行不被中断。
E_CORE_ERROR:致命的内核错误。
E_CORE_WARNING:非致命的内核警告,脚本执行不被中断。

如何配置错误报告?

PHP根据错误的类型,用常量标记了不同的错误报告级别,顾名思义地处理相应类型的错误。在配置中合理配置错误报告级别,可以控制哪些类型的错误显示、哪些不显示。
E_ERROR
E_WARNING
E_PARSE
E_NOTICE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
E_ALL:显示所有的警告、通知和错误,但不包括E_STRICT定义的部分。在PHP6.0中,E_STRICT是E_ALL的一部分。
E_STRICT:显示向后兼容性的建议。
E_RECOVERABLE_ERROR:显示可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。
E_NOTICE级别会产生巨大且重复的日志,建议在生产环境中不报告E_NOTICE,而在开发环境中报告E_NOTICE。

最佳实践:
1)、在开发环境中为保持健壮性而配置php.ini为display_errors = On、error_reporting = E_ALL | E_STRICT、log_errors = On;
2)、而在生产环境中为保持安全性而配置php.ini为display_errors = Off、error_reporting = E_ALL & ~E_NOTICE、log_errors = On。

如果你使用的是共享主机而无法修改php.ini,可以使用ini_set()函数进行配置。
您可能感兴趣的文章:
PHP 异常处理相关知识
使用php异常处理类Exception的例子
PHP5 的异常处理、错误的抛出及回调函数等
php中的异常处理、错误的抛出及错误回调函数
一个简单的php自定义异常类