如何关闭PHP通知?

如何关闭PHP通知?,php,error-handling,constants,Php,Error Handling,Constants,我已经在php.ini中注释掉了,但不起作用 如何使PHP不向浏览器输出这些内容 更新 我在那里设置了display\u errors=Off,但它仍在报告此类通知 这是PHP5.3的问题吗 报告大量调用堆栈也..您可以将显示错误设置为0或使用该功能 然而,通知很烦人(我可以),但它们是有目的的。您不应该定义一个常量两次,第二次将不起作用,常量将保持不变 来自PHP文档(): 该功能的其他有趣选项: <?php // Turn off all error reporting error

我已经在
php.ini
中注释掉了,但不起作用

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

更新

我在那里设置了
display\u errors=Off
,但它仍在报告此类通知

这是PHP5.3的问题吗


报告大量调用堆栈也..

您可以将
显示错误
设置为
0
或使用该功能


然而,通知很烦人(我可以),但它们是有目的的。您不应该定义一个常量两次,第二次将不起作用,常量将保持不变

来自PHP文档():


该功能的其他有趣选项:

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

您可以设置
ini\u集('display\u errors',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);

?>

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

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

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

我认为在php.ini中注释掉display_错误将不起作用,因为默认设置是打开的。您必须将其设置为“关闭”

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

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


正如其他人所指出的,理想情况下,在开发过程中,您应该以尽可能高的级别运行错误报告,并启用显示错误。这些错误、警告、通知和严格的编码建议加在一起,使您能够成为一名更好的编码员。

我最近发现了这个诀窍。 在可能产生警告/错误的行首敲打@


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

对于命令行php,设置

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>
/etc/php5/cli/php.ini中

命令
php
执行,然后ommits通知。

您正在查找:

error_reporting = E_ALL & ~E_NOTICE

source

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

/etc/php5/cli/php.ini

对于apache运行的php,它是:

/etc/php5/apache2/php.ini

然后按需要设置
错误报告


正如一些人提到的,如果您是代码作者,您应该纠正所有这些错误、注意事项等,因为长期来看,这会给您带来比不解决它们更多的问题(尤其是在升级操作系统时)。对于您的服务器,您应该只在日志中显示错误,而不是在客户端屏幕中显示错误

因此,为了避免浏览器中出现错误,请使用您已经找到的
display\u errors
标志:

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

?>
现在真正的问题是当您运行其他人的代码时。在这种情况下,每次升级代码时,修改代码可能会被覆盖。这使得维护代码变得单调乏味

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

对于PHP代码:

display_errors = Off

在代码中使用了这一行

error_reporting = E_ALL & ~E_NOTICE

我想这对你很有帮助。

我不想在我的代码中设置
错误报告。但在一个例子中,一个遗留产品,有太多的通知,他们必须隐藏

因此,我使用下面的代码片段为
error\u reporting
设置服务器端配置的值,但减去
E\u NOTICE
s

error_reporting(E_ALL ^ E_NOTICE);  

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

双定义常量

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

error_reporting(error_reporting() & ~E_NOTICE);
我个人会先在代码库中搜索常量
DIR\u FS\u CATALOG
,然后用这个替换双定义

以内联方式逐个隐藏PHP通知

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

使用此选项,您可以在代码中逐个忽略/禁用通知和警告,这对于错误或通知是故意的、计划的或完全令人讨厌的且无法在源代码处解决的情况非常有用。在引起通知的函数或变量之前放置一个
@
,它将被忽略

下面是一个例子:

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

更多信息可在文档中找到。

错误报告(E\U错误);为我工作。

如果它是一个生产站点,无论你是否认为它没有错误,如果出现错误,你仍然不应该显示错误-因此“不导致错误”似乎是对一个有效问题的一种厚颜无耻的回答。从什么时候开始允许生产站点出现错误?我同意在生产站点上不应该显示错误,我不是这么说的。我是说你应该检查常量是否定义了,如果没有,就设置它(这就是我给出代码示例的原因)。虽然你的答案不是“最好的”,但它似乎完全回答了OP的问题+1到你的安
error_reporting(E_ALL ^ E_NOTICE);  
error_reporting(error_reporting() & ~E_NOTICE);
if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );
// Intentional file error
$missing_file = @file( 'non_existent_file' );