在 PHP 中记录错误
当我们开发任何应用程序(包括 PHP 应用程序)时,记录错误都是必不可少的。 因此,重要的是要知道如何在 PHP 中记录错误,而不是依赖 print_r()
和 var_dump()
来知道什么时候出了问题。
本文将讨论在 PHP 中启用和处理错误日志记录所需的所有函数。
使用 ini_set() 启用 PHP 错误日志
在任何操作之前,打开 php.ini 文件并检查 display_errors 是否设置为 On,如下图所示。
此外,在 php.ini 文件中,您需要检查 error_reporting 条件。 如果您的版本是 PHP 8.1,您可能在 php.ini 文件中会看到 error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
。 但是,为了安全起见,请添加以下行。
error_reporting = E_ALL & ~E_NOTICE
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ER… _ERROR
error_reporting = E_ALL & ~E_NOTICE
为了让大家正确记录错误,需要使用 ini_set()
函数来启用错误记录。 此函数允许我们设置配置选项的值,例如错误日志记录选项。
我们可以使用一个选项和一个值在我们的代码库中配置 PHP 错误日志记录。 下面的代码片段向我们展示了所需的选项和值。
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
如果我们需要在我们的 PHP 脚本中记录错误,我们需要将它们包含在该脚本中。 为了维护 DRY 原则,我们应该创建一个包含上述代码的 PHP 文件,并在我们需要的每个 PHP 中都需要它。
require_once('error.php');
使用 error_log()
在 PHP 中记录错误
现在我们已经配置了 PHP 环境以启用 PHP 错误记录,我们可以使用最重要的 error_log()
函数。
有了这个功能,我们减少了使用
print_r()
和var_dump()
函数进行调试(尤其是在生产环境中),并创建了特殊的错误模板来让我们知道某些地方工作不正常。
为了展示 error_log()
是如何工作的,我们可以使用该函数来告诉我们读取文件输入操作失败。 在代码片段中,我们使用 file_get_contents()
函数读取 PHP 输入,如果 $data 为空(这将在 NOT 条件下设置为真),则读取 No 文件。 错误语句将被记录。
$data = file_get_contents('php://input');
if (!$data) {
error_log("No file read. Check input conditions or values.");
}
如果 file_get_contents()
函数没有输入,则代码的输出如下所示。
No file read. Check input conditions or values.
如大家所见,error_log()
函数接受一个消息参数。 除了该参数之外,它还需要一个 message_type、destination 和 additional_headers 参数。
不同的日志类型定义了我们将解析为 error_log
函数的整数值;
例如,如果要将错误消息发送到 PHP 系统记录器,则使用 0 作为消息类型。
此外,您可以使用消息类型 3 保存到文件目的地,如以下代码片段所示。
error_log("No file read. Check input conditions or values.", 3, "/my-errors.log");
使用 error_reporting() 在浏览器中记录 PHP 错误
除了 ini_set()
函数之外,我们还可以设置报告哪些 PHP 错误。 error_reporting()
函数可以帮助我们做到这一点。
记住我们创建的错误 PHP 文件是每个需要它的 PHP 文件所必需的; 我们可以在那里添加这个函数及其参数。
-
关闭 PHP 代码空间内的所有错误报告。
error_reporting(0);
-
报告简单的运行错误(致命运行时错误、运行时警告和编译时解析错误)。
error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
报告未初始化的变量或捕获变量名称拼写错误(运行时通知)。
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
-
报告除运行时通知之外的所有错误。
error_reporting(E_ALL & ~E_NOTICE);
-
报告所有类型的 PHP 错误。
error_reporting(E_ALL); error_reporting(-1); ini_set('error_reporting', E_ALL);
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341