删除 PHP 中的警告消息

Remove warning messages in PHP

提问人:Alireza 提问时间:1/1/2010 最后编辑:Banee Ishaque KAlireza 更新时间:9/13/2022 访问量:831265

问:

我有一些PHP代码。当我运行它时,会出现一条警告消息。

如何删除/禁止显示/忽略这些警告消息?

PHP 警告错误 报告

评论

0赞 dreftymac 8/14/2018
参见:stackoverflow.com/questions/1087365

答:

6赞 Pekka 1/1/2010 #1

您可以使用 error_reporting 来抑制警告,但更好的方法是首先修复您的脚本。

评论

8赞 Sampson 1/1/2010
萨法利,你应该解决问题,而不是忽视。
469赞 Tatu Ulmanen 1/1/2010 #2

您确实应该修复导致警告的任何问题,但您可以使用 error_reporting() 控制错误的可见性。若要跳过警告消息,可以使用如下所示:

error_reporting(E_ERROR | E_PARSE);

评论

81赞 Mark Amery 8/26/2014
E_ALL ^ E_WARNING,启用除警告之外的所有错误报告,似乎是更好的参数选择。error_reporting
1赞 pgee70 10/3/2017
总的来说,我同意,在我的情况下,生成警告消息是预期的行为,因为它是我的单元测试的一部分。
1赞 N S 1/21/2021
“^”运算符有什么作用?
3赞 caiovisk 11/9/2021
@NS ^ 是 xor(位翻转)运算符...在这个例子中,由于设置了所有错误位(“on”),所以当你在它之后这样做时,你正在翻转 的位,所以它的“off”......E_ALL^ E_WARNINGE_WARNING
149赞 PetPaulsen 1/1/2010 #3

您可以在函数调用前面放置一个 @ 以禁止显示所有错误消息。

@yourFunctionHere();

评论

7赞 dprevite 1/1/2010
这只是隐藏了错误,它仍在发生。错误会使 PHP 变慢,因此如果可能的话,最好修复错误。在没有错误的情况下,使用 @ 甚至可以减慢代码速度。vega.rd.no/articles/php-performance-error-suppression
65赞 Peter 12/12/2012
有时(不幸的是)你真的别无选择。例如,PHP 函数 parse_url() 为“严重格式错误”的 URL 生成警告 - 这可以说是一个错误,因为在这种情况下该函数返回 false。因此,您必须在程序输出中容忍这些 PHP 警告(对于解析器/验证器应用程序来说可能是不可接受的),以某种方式抑制警告,或者通过编写自己的 URL 解析器/验证器来解决损坏的 PHP 行为。在本例中,我选择 @.
1赞 Joshua Kissoon 6/26/2014
重要提示:使用此方法 (1) 您无法修复生成警告的问题,也无法 (2) 通过 php error_reporting 向最终用户隐藏您的警告......向开发人员隐藏警告不是解决方案。
5赞 Alice Wonder 2/20/2015
让我解释一下为什么这很关键。某些功能会抛出警告。您的代码可能会补偿警告,但仍会抛出警告。关闭错误报告在生产服务器上有效,但在开发服务器上无效。如果要生成 XML 内容,则该警告将导致浏览器无法呈现,因为服务器正在发送由该警告引起的格式错误的 XML。有时你希望这样做,但不是因为你已经补偿的临时DNS查找失败导致的事情。dns_get_record
2赞 Daniel N. 6/7/2015
让我解释一下为什么这很有用,因为不是所有警告消息,而是您想要将警告作为错误处理并生成自己的错误消息
65赞 Karthik 2/11/2011 #4

要禁止显示警告,同时启用所有其他错误报告:

error_reporting(E_ALL ^ E_WARNING); 
11赞 DaveWalley 12/31/2012 #5

不完全回答这个问题,但我认为在某些情况下这是一个更好的折衷方案:

由于第三方库中的 printf() 语句,我收到了一条警告消息。我确切地知道原因是什么 - 在第三方修复其代码时的临时解决方法。我同意警告不应该被禁止,但我无法向客户展示我的工作,屏幕上会弹出警告消息。我的解决方案:

printf('<div style="display:none">');
    ...Third-party stuff here...
printf('</div>');

警告仍然在页面源代码中作为提醒我,但对客户端不可见。

评论

5赞 h2ooooooo 12/31/2012
就个人而言,我会使用 ob_start() 和 ob_end_clean() 代替。这样一来,这些东西甚至不会被发送到浏览器(它在这里就是这样做的)。
6赞 DaveWalley 12/31/2012
这就是为什么我包括“某些情况”、“不应压制警告”和“提醒我”的原因。
2赞 DaveWalley 9/17/2014
在对我投更多反对票之前,请阅读我的回复。请注意“第三方”、“妥协”和上面的评论。我添加了这个答案,以防其他人处于与我相同的情况,并且在那种特定情况下,这救了我,而所有其他答案都不会那么好。下次我会三思而后行。
0赞 cneeds 11/5/2017
谢谢你没有删除这个绝妙的想法。在我的系统上,我保存了从客户端发回的所有错误和警告,当管理员登录时,他们会立即收到任何此类活动的警报,以便他们可以向维护人员提供建议。该网站用于教育游戏,因此如果一个小时左右出现任何问题,这并不是什么大问题。
36赞 mohan.gade 1/22/2013 #6

如果您不想显示警告和错误,请使用

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

错误报告 - PHP手册

8赞 Sebastian Piskorski 5/11/2014 #7

我认为更好的解决方案是配置.htaccess,这样您就不必更改应用程序代码。以下是 Apache2 的指令

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
23赞 Vijay Lathiya 5/12/2017 #8

在 Core Php 中隐藏警告消息集 error_reporting(0) 在公共包含文件或单个文件的顶部。

在 Wordpress 中隐藏警告和通知,在wp-config.php文件中添加以下代码

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

评论

0赞 Neo Morina 5/20/2020
在Wordpress中隐藏日志时,这是最好的解决方案。谢谢!!
30赞 zstate 1/11/2018 #9

如果要在显示所有其他错误时禁止显示警告和一些其他错误类型(例如,通知),可以执行以下操作:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
13赞 navid 2/27/2018 #10

我在php.ini中这样做如下:

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

这仅记录致命错误,不记录任何警告。

2赞 Jsowa 5/24/2020 #11

错误控制运算符已经有答案,但缺乏解释。您可以对每个表达式使用运算符,它会隐藏错误(致命错误除外)。@

@$test['test']; //PHP Notice:  Undefined variable: test

@(14/0); // PHP Warning:  Division by zero

//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error:  Uncaught Error: Call to undefined function customFuntion()

对于调试来说,这是快速而完美的方法。但是,您永远不应该在生产环境中使用它,也不应该永久包含在您的本地版本中。它会给你很多不必要的刺激。

您应该考虑:

1. 接受答案中提到的错误报告设置。

error_reporting(E_ERROR | E_PARSE);

或从 PHP INI 设置

ini_set('display_errors','Off');

2. 捕获异常

try {
    $var->method();
} catch (Error $e) {
    // Handle error
    echo $e->getMessage();
}