How do I turn off PHP Notices?

Notice: Constant DIR_FS_CATALOG already defined

I've already commented out display_errors in php.ini, but is not working.

How do I make PHP to not output such things to browsers?

UPDATE

I put display_errors = Off there but it's still reporting such notices,

Is this an issue with PHP 5.3?

Reporting numerous Call Stack too..

551113 次浏览

可以通过使用 error_reporting ini 设置或 error_reporting()函数将错误报告级别设置为 E_ALL & ~E_NOTICE;来禁用通知。

然而,通知是令人讨厌的(我可以 部分同情) ,但他们有一个目的。你不应该定义一个常量两次,第二次不会工作,常量将保持不变!

您可以在脚本中设置 ini_set('display_errors',0);,或者定义要用 error_reporting()显示的错误。

通过不造成错误:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

如果必须这样做,那么使用 error _ report ()将错误报告更改为 E _ ALL ^ E _ NOTICE。

您可以使用以下方法检查是否已经定义了常量:

<?php
if (!defined('MYCONST'))
define('MYCONST', 'Weeha!');
?>

我相信在 php.ini 中注释 display _ error 不会起作用,因为默认设置是 On。您必须将其设置为“关闭”。

不要忘记重新启动 Apache 来应用配置更改。

还要注意,虽然您可以在运行时设置 display _ error,但在这里更改它不会影响 FATAL 错误。

正如其他人所指出的,理想情况下,在开发期间,您应该在最高级别运行 error _ report,并启用 display _ error。虽然刚开始时很烦人,但这些错误、警告、注意事项和严格的编码建议加在一起使你成为一个更好的编码者。

我最近发现了这个把戏。 在可能产生警告/错误的行的开头添加一个@。

就像变魔术一样,他们消失了。

对于命令行 php,设置

error_reporting = E_ALL & ~E_NOTICE

/etc/php5/cli/php.ini

命令 php执行,然后忽略通知。

你要找的是:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"

使用 phpinfo ()并搜索 Configuration File (php.ini) Path,查看使用了 php 的哪个配置文件路径。PHP 可以有多个配置文件,这取决于它运行的环境。通常,对于控制台来说,它是:

/etc/php5/cli/php.ini

对于 apache 运行的 php,它是:

/etc/php5/apache2/php.ini

然后按照你需要的方式设置 error_reporting:

Http://www.phpknowhow.com/configuration/php-ini-error-settings/ Http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini-file

正如一些人所提到的,如果你是代码的作者,你应该更正所有的错误,注意等,因为它会给你带来更多的问题比不修复它们(特别是当你升级你的操作系统)。对于服务器,应该只在日志中显示错误,而不是在客户机屏幕上显示错误。

因此,为了避免在浏览器中出现错误,您可以使用 display_errors标志,就像您已经发现的那样:

display_errors = Off

现在真正的问题是当您运行其他人的代码时。在这种情况下,修改代码很可能会在每次升级代码时被覆盖。这使得维护这些代码变得非常繁琐。

在我的例子中,我使用 crontab运行 PHP,以便每隔一段时间运行一次 wp-cron.php脚本。我收到的邮件都是错误的,当你每10分钟收到一封邮件的时候,这就变得很无聊了!但是,在这种情况下,Wordpress 系统有一个包含 WP_DEBUG的配置文件,它们调用 error_reporting()函数,因此尝试在命令行上更改 error_reporting变量是不会起作用的。相反,您必须编辑根文件夹中的 wp-config.php文件,并确保将 WP_DEBUG设置为 false。否则你会一直收到那些警告和通知。

PHP 代码:

<?php
error_reporting(E_ALL & ~E_NOTICE);

对于 php.ini配置:

error_reporting = E_ALL & ~E_NOTICE

在代码中使用此行

error_reporting(E_ALL ^ E_NOTICE);

我想对你来说已经够了。

我不喜欢在我的代码中设置 error_reporting。但是在一个案例中,一个遗留产品,有太多的注意事项,它们必须被隐藏。

因此,我使用以下代码片段来设置 error_reporting的服务器端配置值,但减去 E_NOTICE

error_reporting(error_reporting() & ~E_NOTICE);

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

双定义常数

要修复这里的特定错误,您可以在定义常量之前检查它是否已经定义:

if ( ! defined( 'DIR_FS_CATALOG' ) )
define( 'DIR_FS_CATALOG', 'something...' );

我个人会首先在代码库中搜索常量 DIR_FS_CATALOG,然后用这个替换双重定义。

逐案隐藏 PHP 通知

PHP 提供了 @错误控制操作符,您可以使用该操作符忽略导致通知或警告的特定函数。

使用这种方法,您可以在代码中根据具体情况忽略/禁用通知和警告,这对于故意的、计划好的错误或通知,或者完全恼人的、不可能在源代码中解决的情况非常有用。在引起通知的函数或变量前面放置一个 @,它将被忽略。

这里有一个例子:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

关于这方面的更多信息可以在 PHP 的错误控制操作符文档中找到。

Error _ report (E _ ERROR) ; 对我有用。

如果从命令行运行,可以这样做:

php -d display_errors="0" script.php 2>/dev/null

您必须包含-d display _ error = “0”以及将 stderr 重定向为 null, 很奇怪

设置 display _ error = Off 并重新启动 xampp 服务器