快速提示:如何在 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 不记录任何错误。 为此,我们必须通过打开 display_errors
PHP 配置文件中的变量( php.ini
文件)。
在这个文件中,我们可以另外告诉 PHP 我们是否还想记录通知和警告,以及应该记录这个日志的位置。
还有可能从代码中触发日志记录。 为此,我们可以使用 error_log()
功能。 由于错误日志记录不是本文的重点,因此可以在此处找到更多信息。
更改 PHP 错误报告
我们可以通过使用更改默认的 PHP 错误报告行为 error_reporting()
功能。 使用此功能,我们可以设置脚本持续时间内的错误级别。 这是通过将一个或多个预定义错误常量传递给函数来完成的。
例如,如果我们不仅要查看错误,还要查看通知,我们可以使用以下代码:
<?php
error_Reporting(E_ERROR | E_NOTICE);
通过此声明,脚本执行不仅会因错误而暂停,还会因通知而暂停。
抑制错误
我们还可以通过使用错误控制运算符 (@
). 通过将此运算符放在表达式的开头,任何由该表达式直接导致的错误都会被消除:
<?php
echo @$sitepoint;
这将输出值 $sitepoint
如果它存在,但它会返回一个 NULL
如果没有,则不打印任何内容(而不是发出通知)。
使用此运算符时要非常小心,因为它会完全隐藏错误。 不仅不会显示错误,而且不会将其发送到错误日志。
虽然它看起来无害,但通过使用此运算符,您将掩盖代码中更深层次的结构问题并掩盖潜在的错误行为。
PHP 作为异常密集型语言
最后,PHP 也可以用作“异常密集型”编程语言。 正常的 PHP 错误可以通过使用 ErrorException
扩展 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 可能会以一种非常松散的方式处理错误。 这取决于我们开发人员使用可用的工具来更好地处理它们,以便我们可以充分利用该语言。 通过使用这套工具,我们可以以可控的方式处理错误,从而节省数小时的调试时间。