如何在nginx php配置中启用错误报告


How to enable error reporting in nginx php config

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

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

编辑:我已经在我的文件中使用了上面描述的ini_set功能,它一直工作到我尝试连接到数据库。 我已经确认我已经为 phpinfo(( 函数目录路径中描述的 php.ini 文件启用了错误报告。 没有任何效果。

因为没有人特别透露答案,所以我只需要自己发布。

我在此目录中发现了错误.log文件(确实记录了我的 Nginx 服务器上的所有错误(:/var/log/nginx/error.log

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

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

我只是想对此进行更新:自从从 PHP 7.0.2 <= 7.0.3 升级以来,我现在能够看到应该显示的错误。

编辑:不要删除该日志文件的内容,它将搞砸整个错误报告。我现在什么都没回来了。–

报告自身错误

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文件中更改这些变量,您就会变得金光闪闪。绝对确保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();
}

只是我的框架中的一个片段。当然,您必须根据自己的喜好进行更改,但您应该能够在那里获得大致的想法。他们的关键是这里的这部分:

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

我仍然没有看到错误

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

您可能需要对您所追逐的内容以及期望看到的内容进行更多的描述。

尝试:

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

它会帮助你。 更改参数的值在文件/etc/php/7.0/fpm/pool.d/www.conf 中(例如,默认情况下禁用的值display_errors(

我可以在/var/log/php7.4-fpm.log中找到错误