如何消除PHP错误?


32

有没有办法使Drupal中的所有PHP错误,警告和通知静音?它们在开发站点上很有用,但存在很大的安全风险,会使该站点无法正常运行。

我知道在Drupal 6上的admin / settings / error-reporting页面可以阻止Drupal将错误写入屏幕,但是在Drupal 7的哪里可以找到它?似乎丢失了。


3
不过要注意,错误起着非常重要的作用:它们表明有问题。压抑这一点并不能解决潜在的问题。这也称为“俄罗斯方法”:当核电站中的警报灯开始闪烁时,只需卸下灯泡即可。警报灯不再闪烁;没问题。

好笑:)。但是我只抑制生产现场的错误。
drupal_stuff_alter

Drupal可以选择决定显示哪些错误;未显示的错误仍记录在数据库中,并显示在admin / reports / dblog中。
kiamlaluno

@kiamlaluno,在生产中还算不错(但出现错误,表示付款失败总是比让客户处于不确定状态更好)。但是在开发和测试中,我的经验是忽略了推入dblog的错误。每小时记录数百条通知和警告的Drupalsite也不例外。真正的异常和错误会丢失在噪音中。最好的方法是将每条通知硬性地推向开发人员。
berkes

是的,但是OP似乎有兴趣将这些错误隐藏在生产站点中。(请参阅“它们在开发站点上
很有用

Answers:


29

路径发生了变化,就像在Drupal 7中一样,您之前在admin / settings / error-reporting中看到的页面现在在admin / config / development / logging中。

屏幕截图


1
由于某种原因,即时通讯无法执行此操作。单击保存后,我的选择将重置。有没有办法可以在数据库中手动更改此名称?
Niranjan N Raju

17

如建议的那样,您可以在Administration » Configuration » Development(at /admin/config/development/logging)中找到禁用显示错误消息的设置,但不会完全禁用错误/通知。

这是因为Drupal 7强制执行E_ALL,因此仍将它们写入syslog,您可以在“ 最近的日志”中看到它们,从而影响网站性能。

要完全禁用通知,您必须在settings.phpphp.ini文件中添加以下行:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

显示所有错误,但声明和编码标准警告除外。

要使所有PHP错误都静音(不建议这样做),您可以尝试添加设置文件:

error_reporting(0); // Disable all errors.

看到: error_reporting()


负责E_ALL记录的Drupal 7核心代码(文件:)includes/bootstrap.inc

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

也可以看看:


4

没有人提到过的一件事可能对人们有所帮助,那就是Drupal 7忽略了所有本地系统错误报告级别。因此,您不能使用.htaccess甚至php.ini来在Drupal中设置php错误报告级别。

D8中为此提供了一个修补程序,但目前在D7中,您只能使用在管理页面kiamlaluno上设置的3个错误掩码(全部,无,或错误和警告)。


3

设置始终在admin / config / development / logging中:)


非常感谢!我仍然想让绿色的通知还活着。希望他们不会消失。
drupal_stuff_alter

2

不知道为什么Drush方法这么没有文档,但是我在构建脚本中有:

drush vset error_level 0

...将错误消息保存到日志中,但不在屏幕上显示。


1

您可能需要在上面发布的解决方案kenorb上添加引号:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

这是错误的-这些是常量,不应该用引号引起来。error_reporting是一个整数值,由整数常量或运算而成。这不是一个由常量名称组成的字符串设置,就像您在此处看到的那样。
datashaman

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.