如何在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_ERRORE_NOTICEE_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可能会以一种非常松散的方式处理错误。这取决于我们开发人员使用可用的工具来更好地处理它们,以便我们可以充分利用该语言。通过使用这套工具,我们可以以可控的方式处理错误,从而节省数小时的调试时间。

推荐阅读

PHP中检查是否设置变量的办法-极速阅读

JavaScript使用扩展运算符-极速阅读