如何关闭PHP通知?

时间:2010-05-19 15:41:12

标签: php error-handling constants

Notice: Constant DIR_FS_CATALOG already defined

我已在php.ini中注释掉了display_errors,但无效。

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

更新

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

这是PHP 5.3的问题吗?

报告众多调用堆栈 ..

17 个答案:

答案 0 :(得分:220)

从PHP文档(error_reporting):

<?php
// Turn off all error reporting
error_reporting(0);
?>

该功能的其他有趣选项:

<?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);

?>

答案 1 :(得分:72)

您可以将display_errors设置为0或使用error_reporting()功能。

但是,通知很烦人(我可partly sympathize),但它们有用。你不应该定义两次常数,第二次不起作用,常数将保持不变!

答案 2 :(得分:31)

对于命令行php,设置

error_reporting = E_ALL & ~E_NOTICE
/etc/php5/cli/php.ini

中的

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

答案 3 :(得分:20)

<?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);

?>

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

答案 4 :(得分:10)

在您的代码中使用此行

error_reporting(E_ALL ^ E_NOTICE);  

我认为它对你很满意。

答案 5 :(得分:4)

您正在寻找:

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

答案 6 :(得分:4)

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

答案 7 :(得分:3)

不导致错误:

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

如果确实需要,请使用error_reporting()将错误报告更改为E_ALL ^ E_NOTICE。

答案 8 :(得分:2)

对于PHP代码:

<?php
error_reporting(E_ALL & ~E_NOTICE);

对于php.ini config:

error_reporting = E_ALL & ~E_NOTICE

答案 9 :(得分:0)

我最近发现了这个伎俩。 在行的开头敲一个可能产生警告/错误的@。

好像通过魔法,他们消失了。

答案 10 :(得分:0)

我相信在php.ini中注释掉display_errors是行不通的,因为默认为On。您必须将其设置为“关闭”。

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

另请注意,虽然您可以在运行时设置display_errors,但在此处更改它不会影响致命错误。

正如其他人所指出的那样,理想情况下,在开发过程中,您应该在尽可能高的级别运行error_reporting并启用display_errors。虽然你刚开始时很烦人,但这些错误,警告,通知和严格的编码建议都会加起来,使你能够找到一个更好的编码器。

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

使用phpinfo()并搜索org\wso2\carbon\utils\logging\appenders CarbonConsoleAppender.class CarbonConsoleAppender$1.class 以查看使用php的配置文件路径。 PHP可以有多个配置文件,具体取决于它运行的环境。通常,对于控制台来说:

/etc/php5/cli/php.ini

对于由apache运行的php,它是:

/etc/php5/apache2/php.ini

然后按照您需要的方式设置Configuration File (php.ini) Path

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

答案 13 :(得分:0)

如某些人所述,如果您是代码作者,您应该更正所有这些错误,通知等,因为这会导致长期问题而不是修复它们(特别是在升级操作系统时)。对于您的服务器,您应该只在日志中显示错误,而不是客户端的屏幕。

为避免浏览器中出现错误,请使用已找到的display_errors标记:

display_errors = Off

现在真正的问题是当你运行其他代码时。在这种情况下,每次升级该代码时,修改代码很可能会被覆盖。这使得维护该代码变得冗长乏味。

就我而言,我正在使用crontab运行PHP以使wp-cron.php脚本偶尔运行一次。我收到了发送到我的电子邮件的错误,当您每10分钟收到一封电子邮件时,这会变得乏味!但是,在这种情况下,Wordpress系统的配置文件包含WP_DEBUG,并且它们调用error_reporting()函数,因此尝试更改命令行上的error_reporting变量赢了工作。相反,您必须编辑根文件夹中的wp-config.php文件,并确保WP_DEBUG设置为false。否则,您将始终获得所有这些警告和通知。

答案 14 :(得分:0)

我不想在代码中设置error_reporting。但是在一种情况下,旧产品有很多提示,必须将它们隐藏起来。

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

error_reporting(error_reporting() & ~E_NOTICE);

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

答案 15 :(得分:0)

双重定义的常量

要在此处修复特定错误,可以在定义常量之前检查是否已定义常量:

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's Error Control Operators文档。

答案 16 :(得分:-1)

error_reporting(E_ERROR);为我工作。