如何在 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/7.0/cli、php/7.0/fpm 的 php.ini 文件,甚至apache2 中的一个(即使我是 运行 nginx)

我开始怀疑自己的能力了,不胜感激。

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

尝试:

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

错误报告本身

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 并不能保证您看到您要查找的错误!


错误报告无处不在除了连接到我的数据库时!

如果您在数据库连接中需要 except 的地方看到错误,您只需要进行一些错误捕获。如果是 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 代码内部的错误。如果这没有向您显示您正在追查的错误,那么您一定遇到了完全不同的问题。

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

因为没有人特别给出答案,所以我只好post自己了。

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

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

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

我只想更新一下:自从 PHP 7.0.2 <= 7.0.3 升级后,我现在可以看到应该显示的错误。

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

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