文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在 PHP 中记录错误

2024-02-27 20:30

关注

当我们开发任何应用程序(包括 PHP 应用程序)时,记录错误都是必不可少的。 因此,重要的是要知道如何在 PHP 中记录错误,而不是依赖 print_r()var_dump() 来知道什么时候出了问题。

本文将讨论在 PHP 中启用和处理错误日志记录所需的所有函数。

使用 ini_set() 启用 PHP 错误日志

在任何操作之前,打开 php.ini 文件并检查 display_errors 是否设置为 On,如下图所示。

Display 设置为 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_typedestinationadditional_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 文件所必需的; 我们可以在那里添加这个函数及其参数。

  1. 关闭 PHP 代码空间内的所有错误报告。
    
    error_reporting(0);
    
  2. 报告简单的运行错误(致命运行时错误、运行时警告和编译时解析错误)。
    
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    
  3. 报告未初始化的变量或捕获变量名称拼写错误(运行时通知)。
    
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    
  4. 报告除运行时通知之外的所有错误。
    
    error_reporting(E_ALL & ~E_NOTICE);
    
  5. 报告所有类型的 PHP 错误。
    
    error_reporting(E_ALL);
    error_reporting(-1);
    ini_set('error_reporting', E_ALL);
    
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯