我已经尝试了三天,以便在PHP中启用错误报告。我已经使用ini_set了一段时间('显示错误' 1);功能,直到我尝试连接到数据库;它没有用。现在,我启用了error_reporting,display_startup_errors,log_errors,对错误报告没有任何影响。我已经更改了所有五个配置文件(开发ini,生成ini,位于php / 7.0 / cli中的php.ini文件,php / 7.0 / fpm,甚至是apache2中的一个(即使我正在运行nginx) )
我开始怀疑自己的能力,非常感谢任何帮助。
编辑:我在我的文件中使用了上面描述的ini_set函数,直到我尝试连接到数据库时它才起作用。我已经确认我已经为phpinfo()函数目录路径中描述的php.ini文件启用了错误报告。没有任何影响。
答案 0 :(得分:4)
因为没有人特别放弃答案,我必须自己发布。
我在此目录中找到 error.log 文件(确实记录了我的Nginx服务器上的所有错误):/var/log/nginx/error.log
希望这也可以帮助其他人使用Nginx,但我仍然不明白为什么****错误没有出现在浏览器中。我认为Nginx的本性使一切变得非常复杂。
也许我应该使用Apache进行开发,然后在我有更多经验的时候将其移植到Nginx中 - 对于其他人来说也是如此。
嘿伙计们!只是想对此进行更新:从PHP 7.0.2< = 7.0.3升级后,我现在能够看到应该显示的错误。编辑:不要删除该日志文件的内容,它将搞乱整个错误报告。我现在一无所获。 -
答案 1 :(得分: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"的配置值根据您的需要,stderr
或stdout
。
只需在php.ini
文件中更改这些变量即可,您将成为金牌。确保 display_errors
和error_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代码内部的错误。如果您没有向您显示您正在追逐的错误,则必须有完全不同的问题。
您可能需要对您正在追逐的内容以及您期望看到的内容进行更具描述性的描述。
答案 2 :(得分:1)
尝试:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 3 :(得分:0)