如何在PHP中管理错误报告 在这个关于 PHP错误报告的快速提示中,我们将了解如何使用 PHP 中可用的工具以可控的方式处理错误,从而节省调试时间。
根据定义,PHP 是一种“异常轻”的编程语言。这意味着,虽然它确实有异常,但它会继续执行任何脚本,而不管发生什么,除非发生致命错误。
例如:
<?php echo $sitepoint;
上面的代码将返回以下消息:
Notice: Undefined variable: sitepoint in PHP shell code on line 1
PHP 只会抛出通知错误,并会愉快地继续执行。像 Python 这样的“异常密集型”语言会抛出错误并停止执行。
由于这种行为,PHP 开发人员在编写代码时必须格外小心。程序执行中可能会出现意外结果,因为通知不会停止执行但可能会影响程序的正确行为。
在我们探讨如何调整 PHP错误报告样式之前,让我们先了解一下 PHP 错误严重性的几个级别。
PHP 具有三种主要类型的消息:错误、通知和警告。这些代表不同的严重程度:E_ERROR
、E_NOTICE
和E_WARNING
。
- 错误是致命的运行时错误,通常由代码中的错误引起。这将导致 PHP 停止执行。
- 通知是由可能会或可能不会导致问题的代码引起的消息(例如,未定义的变量)。这些不会导致执行停止。
- 警告是非致命错误,脚本执行不会停止。
PHP中管理错误报告
默认情况下,PHP 不记录任何错误。为此,我们必须通过打开PHP 配置文件(文件)上的display_errors
变量来明确告诉它开始记录。php.ini
在这个文件中,我们可以另外告诉 PHP 我们是否还想记录通知和警告,以及应该记录这个日志的位置。
还有可能从代码中触发日志记录。为此,我们可以使用该error_log()
功能。由于错误日志记录不是本文的重点,因此可以在此处找到更多信息。
更改 PHP错误报告
我们可以使用该error_reporting()
函数更改默认的 PHP错误报告行为。使用此功能,我们可以设置脚本持续时间内的错误级别。这是通过将一个或多个预定义错误常量传递给函数来完成的。
例如,如果我们不仅要查看错误,还要查看通知,我们可以使用以下代码:
<?php error_Reporting(E_ERROR | E_NOTICE);
通过此声明,脚本执行不仅会因错误而暂停,还会因通知而暂停。
抑制错误
我们还可以使用错误控制运算符 ( @
) 告诉 PHP 抑制特定错误。通过将此运算符放在表达式的开头,任何由该表达式直接导致的错误都会被消除:
<?php echo @$sitepoint;
如果存在,这将输出值$sitepoint
,但如果不存在,它将返回 aNULL
并且不打印任何内容(而不是抛出通知)。
使用此运算符时要非常小心,因为它会完全隐藏错误。不仅不会显示错误,而且不会将其发送到错误日志。
虽然它看起来无害,但通过使用此运算符,您将掩盖代码中更深层次的结构问题并掩盖潜在的错误行为。
PHP 作为异常密集型语言
最后,PHP 也可以用作“异常密集型”编程语言。ErrorException
通过使用扩展 PHP类的类,可以将正常的 PHP 错误作为异常抛出Exception
。
在以下示例中,调用的用户定义函数errorhandler()
被设置为函数的错误处理程序set_error_handler()
。ErrorException
当由于函数找不到文件而发生致命错误时,它会抛出file_get_contents()
:
<?php function errorHandler($severity, $message, $file, $line) { if (!(error_reporting() & $severity)) { return; } throw new ErrorException("Fatal Error:No such file or directory", 0, E_ERROR); } set_error_handler("errorHandler"); try { $data=file_get_contents("sitepoint.txt"); echo $data; } catch (ErrorException $e) { echo $e->getMessage(); }
通过使用这种方法,我们可以像处理异常一样处理执行错误,将它们包装在一条try…catch
语句中,并附上关于在这种情况下如何表现的正确说明。
结论
总之,PHP可能会以一种非常松散的方式处理错误。这取决于我们开发人员使用可用的工具来更好地处理它们,以便我们可以充分利用该语言。通过使用这套工具,我们可以以可控的方式处理错误,从而节省数小时的调试时间。