如何关闭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' );