【问题标题】:How to enable error reporting in nginx php config如何在 nginx php 配置中启用错误报告
【发布时间】:2016-05-21 12:41:24
【问题描述】:

我已经尝试了三天来启用 PHP 中的错误报告。我已经使用ini_set('display errors' 1); 函数有一段时间了,直到我尝试连接到数据库;它没有用。现在,我启用了error_reportingdisplay_startup_errorslog_errors,对错误报告没有任何影响。我已经更改了所有五个配置文件(开发 ini、生产 ini、位于 php/7.0/cli、php/7.0/fpm 中的 php.ini 文件,甚至是 apache2 中的一个(即使我正在运行 nginx )

我开始怀疑自己的能力,非常感谢任何帮助。

编辑:我在我的文件中使用了上述的 ini_set 函数,并且在我尝试连接到数据库之前它一直有效。我已经确认我已经为 phpinfo() 函数目录路径中描述的 php.ini 文件启用了错误报告。一点效果都没有。

【问题讨论】:

  • 在大多数情况下,您只需在脚本的开头添加:ini_set('display_errors', 1); error_reporting(E_ALL);,就会像这样显示错误。如果您想通过 config 执行此操作,请创建一个 phpinfo() 脚​​本,查看加载了哪个配置文件并更改该文件,直到 phpinfo() 显示错误报告并显示您想要的错误。
  • 你带我回到我开始的地方:o 不过谢谢你,我会继续寻找答案!
  • 你使用什么命令来连接数据库?
  • 如果您没有看到错误,error_reportingdisplay_errors 都没有正确设置。做一个测试:echo HELLO; if(array_key_exists($a, $b)) echo "Hello"; 你看到警告了吗?如果没有,您的配置绝对没有正确设置。如果是这样,那就是您的数据库适配器。您必须进行错误捕获。

标签: php config reporting


【解决方案1】:

由于没有人特别给出答案,我只好自己发布。

我在这个目录中找到了 error.log 文件(它确实记录了我的 Nginx 服务器上的所有错误):/var/log/nginx/error.log

希望这也可以帮助其他使用 Nginx 的人,但我仍然不明白为什么错误没有出现在浏览器中。我认为 Nginx 的天性是让一切变得复杂。

也许我应该使用 Apache 进行开发,然后在我有更多经验时将其移植到 Nginx 中——这只是对其他正在涉足此领域的人的一些想法。

我只是想对此进行更新:自从从 PHP 7.0.2

编辑:不要删除该日志文件的内容,它会搞砸整个错误报告。我现在一无所有。 ——

【讨论】:

  • 请注意:这与 PHP 错误报告完全无关。这是一个 Web 服务器级别的配置问题。这个答案与错误报告和 PHP 没有任何关系。它与 nginx 的配置以及它如何包装 PHP 的错误报告(以及任何其他脚本语言的选择)密切相关。 OP 解决了他的问题真是太好了,但它的措辞、标签和回答确实 100% 错误。我希望我能早点看到这个,但可惜的是,现在看到这个的任何人至少应该对非常误导性的问答关系保持警惕。
【解决方案2】:

错误报告本身

ini_set('display_errors', 1);display_errors

只允许 PHP 输出错误 - 对调试很有用,强烈建议在生产环境中禁用。它通常包含您不希望用户看到的信息。

error_reporting(E_ALL);error_reporting

只需准确设置显示哪些错误。

设置其中之一并不能保证会显示错误。您必须同时设置两者才能在屏幕上实际看到错误。

至于在您的 PHP 配置中进行永久设置,error_reporting 的默认设置是 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED。也就是说,这个变量不需要改变。见这里:

http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

至于显示错误,请看这里:

http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors

根据需要将“display_errors”的配置值设置为stderrstdout

只需在您的 php.ini 文件中更改这些变量,您就可以了。确保 both display_errorserror_reporting 设置为令人满意的值。仅设置 error_reporting 并不能保证您会看到您要查找的错误!


错误报告在任何地方都有效除了连接到我的数据库时!

如果您在数据库连接中发现任何需要除了的错误,您只需要进行一些错误捕获。如果是 PDO,请执行以下操作:

try {
    $this->DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $this->DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $STH = $this->DBH->prepare("INSERT INTO `" . $this->table . "` ($fs) value ($ins) $up");
            
    $STH->execute($data);
            
    $id = $this->DBH->lastInsertId();
            
    $this->closeDb();
            
    return $id;
} catch(PDOException $e) {
    echo $e->getMessage();
}

只是我框架中的一个 sn-p。当然,您必须根据自己的喜好对其进行更改,但是您应该能够在那里获得总体思路。他们的关键是这里的这部分:

try {
    //DB Stuff
} catch(PDOException $e) {
    echo $e->getMessage();
}

我仍然没有看到错误

如果您已完成我在此处列出的两项操作,但仍然遇到问题,则您的问题与启用错误报告无关。提供的代码将向您显示数据库连接本身以及 PHP 代码内部的错误。如果这没有向您显示您正在追踪的错误,那么您一定有一个完全不同的问题。

您可能需要更准确地描述您正在追逐的内容以及您期望看到的内容。

【讨论】:

  • 关于 PDO 的注释是模棱两可的。 OP 写道,错误报告在数据库连接上失败。您将 db 连接解释为(可能正确)为 PDO,但您的示例不是关于 PDO 连接,而是关于 PDO 命令 following 连接。实际上,错误报告对PDO建立连接有影响
  • 我关注了您帖子中的所有内容,但仍然无法正常工作。我想知道这是否与我运行 nginx 有什么关系?
  • @fusion3k 如果没有建立连接,简单的error_reportingdisplay_errors 将在尝试调用像prepare()execute() 这样的PDO 方法时显示错误。您的评论无关紧要,因为我提供的代码显示错误,无论情况如何。 prepare()execute()(等)上的方法错误意味着您从未建立过连接 - 这非常简单。另外,我提供了trycatch 的示例——我从未说过它必须在连接之后。 //DB Stuff的哪一部分表示不能用于连接?
  • @Frank 很可能是 nginx。究竟是什么行不通?您是否看到 any 错误?就像您这样输入胡言乱语:echo $fake->nothing(HELLO); 它会给您带来任何错误吗?这应该会产生类似于Call to undefined method 的错误(忘记确切的措辞)。您可能值得花时间将有问题的代码扔到 Apache 服务器上,看看它是否为您提供了有关错误本身的更多信息。这并不理想,但这至少可以确认它是否是 nginx。
  • @NateI 感谢 Nate 的快速回复,非常感谢。如果我运行此代码: echo $undefinedvar;它不会返回错误 #8: Undefined Variable ,即使我已经在 phpinfo() 页面中描述的 php.ini 文件中明确启用了错误报告!我已经可以假设它可以在 Apache 上运行,尽管我会尝试。
【解决方案3】:

试试:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

【讨论】:

  • 这并不总是有效。我需要一个涉及修改我的 php 配置的永久解决方案。不过谢谢。
【解决方案4】:

也许,它会帮助你。改变参数的值 在文件 /etc/php/7.0/fpm/pool.d/www.conf 中(例如默认值 display_errors 是禁用的)

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 2020-01-03
    • 2017-07-27
    • 2013-09-05
    • 2014-01-13
    • 1970-01-01
    • 2013-10-17
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多