如何关闭PHP通知?

use*_*729 114 php error-handling constants

Notice: Constant DIR_FS_CATALOG already defined
Run Code Online (Sandbox Code Playgroud)

我已经注释掉display_errorsphp.ini,但不能正常工作.

如何让PHP不向浏览器输出这些内容?

UPDATE

我放在display_errors = Off那里,但它仍在报告此类通知,

这是PHP 5.3的问题吗?

报告众多调用堆栈 ..

Cri*_*ian 228

从PHP文档(error_reporting):

<?php
// Turn off all error reporting
error_reporting(0);
?>
Run Code Online (Sandbox Code Playgroud)

该功能的其他有趣选项:

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>
Run Code Online (Sandbox Code Playgroud)

  • 只关闭通知对我来说不起作用,如上面的帖子所述^注意.对于PHP v5.3,请使用:E_ALL&~E_NOTICE (3认同)
  • 这实际上是接受的答案!谢谢! (2认同)

Pek*_*ica 75

您可以设置display_errors0或使用error_reporting()功能.

但是,通知很烦人(我可以部分同情),但它们是有目的的.你不应该两次定义常量,第二次不起作用,常量将保持不变!

  • +1:我赞成提及他应该纠正错误,而不是关闭报告.你用比@Jonathan Kuhn更温和的方式做到了:-) (4认同)

小智 31

对于命令行php,请设置

error_reporting = E_ALL & ~E_NOTICE
Run Code Online (Sandbox Code Playgroud)

/etc/php5/cli/php.ini

命令php执行然后省略通知.


Abh*_*oel 21

<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>
Run Code Online (Sandbox Code Playgroud)

来源http://php.net/manual/en/function.error-reporting.php

  • 这不只是几年前发布的[此现有答案](http://stackoverflow.com/a/2867082/1402846)的副本吗? (2认同)
  • @AbhishekGoel 独角兽是伪装的小马,那句话无关紧要,四年后你仍然重复了[已经存在的答案](http://stackoverflow.com/a/2867082/1900648)。 (2认同)

vic*_*ale 11

在您的代码中使用此行

error_reporting(E_ALL ^ E_NOTICE);  
Run Code Online (Sandbox Code Playgroud)

我觉得它的遗产很丰富.


alg*_*thm 9

我宁愿不在error_reporting我的代码里面设置。但在一种情况下,一个遗留产品,有太多的通知,他们必须隐藏。

所以我使用以下代码段来设置服务器端配置的值,error_reporting但减去E_NOTICEs。

error_reporting(error_reporting() & ~E_NOTICE);
Run Code Online (Sandbox Code Playgroud)

现在可以在php.ini或 中进一步配置错误报告设置.htaccess。只有通知将始终被禁用。


Nab*_*.Z. 6

对于 PHP 代码:

<?php
error_reporting(E_ALL & ~E_NOTICE);
Run Code Online (Sandbox Code Playgroud)

对于php.ini配置:

error_reporting = E_ALL & ~E_NOTICE
Run Code Online (Sandbox Code Playgroud)


DrL*_*zer 5

我最近发现了这个技巧。在行的开头敲击 @ 可能会产生警告/错误。

就像施了魔法一样,它们消失了。

  • 这通常是一个糟糕的主意,就像戴上耳塞一样,因为你的汽车发出可怕的磨擦噪音。 (28认同)
  • 这对于某些情况实际上是非常有意义的,例如在渲染变量时,无论它是设置的还是空的。 (11认同)
  • 仅当您拥有作者尚未更新的 WordPress 插件之类的东西并且您确切知道导致问题的原因时,这才有意义。但这只是一个创可贴,而不是解决办法。 (2认同)
  • 只要确保你把 @ 放在你 100% 确定你在做什么的地方。 (2认同)

小智 5

您正在寻找:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
Run Code Online (Sandbox Code Playgroud)

  • @Christian,您好,欢迎来到StackOverflow!将来,如果您可以在回答中添加一些额外的解释/细节来启发那些了解该解决方案的原因/方式/解决问题的人,那将是很棒的。非常感谢,并祝您编程愉快:) (2认同)