删除PHP中的警告消息


Answers:


349

您确实应该修复引起警告的所有内容,但是可以使用来控制错误的可见性error_reporting()。要跳过警告消息,您可以使用以下方法:

error_reporting(E_ERROR | E_PARSE);

53
E_ALL ^ E_WARNING,启用除警告之外的所有错误报告功能,似乎是的更好选择error_reporting
Mark Amery 2014年

1
通常,我同意,就我而言,生成警告消息是预期的行为,因为它是单元测试的一部分。
pgee70

120

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

@yourFunctionHere();

4
这只是隐藏了错误,而且仍在发生。错误会使PHP变慢,因此,如果可能的话,最好修复该错误。如果没有错误,使用@甚至会减慢代码速度。vega.rd.no/articles/php-performance-error-suppression
dprevite 2010年

46
有时候(不幸的是)您真的没有选择。例如,PHP函数parse_url()会为“格式严重错误”的URL生成警告-可以说是一个错误,因为在这种情况下该函数返回false。因此,您必须在程序输出中容忍这些PHP警告(对于解析器/验证器应用程序可能不可接受),以某种方式抑制警告,或者通过编写自己的URL解析器/验证器来解决损坏的PHP行为。在这种情况下,我选择@。
彼得

1
重要信息:如果(1)您无法解决生成警告的问题,或者(2)通过php error_reporting对最终用户隐藏警告,则无法使用此方法...隐藏开发人员的警告不是解决方案。
Joshua Kissoon 2014年

3
让我解释一下为什么这很关键。某些功能dns_get_record会抛出警告。您的代码可以补偿警告,但仍会引发警告。关闭错误报告可在生产服务器上运行,但不能在开发服务器上运行。如果生成的是XML内容,则警告将导致浏览器无法呈现,因为服务器正在发送由警告引起的格式错误的XML。有时,您希望在开发过程中做到这一点,而不是因为已经补偿的由临时DNS查找失败引起的问题。
爱丽丝·旺德

2
让我来解释为什么这是有用的,当所有,而不是警告信息,这是你谁愿意来处理警告为错误,并生成自己的错误消息
丹尼尔·N.

43

要在保留所有其他错误报告的同时取消显示警告,请执行以下操作:

error_reporting(E_ALL ^ E_WARNING); 


18

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

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

15

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

当涉及在Wordpress中隐藏日志时,这是最好的解决方案。谢谢!!
新莫里纳

10

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

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

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

警告仍在页面源中,以提醒我,但对客户端不可见。


5
就个人而言,我会使用ob_start()ob_end_clean()代替。这样,这些东西甚至都不会发送到浏览器(它在这里完成)。
h2ooooooo 2012年

6
这就是为什么我加入“某些情况”,“不应压制警告”和“提醒我”的原因。
DaveWalley

1
在进一步投票给我之前,请阅读我的回复。注意上面的“第三方”,“妥协”和注释。我添加了此答案,以防其他人处于与我相同的情况,在这种特定情况下,这可以救我,而其他所有答案都不会那么好。下次,我会三思而后行。
DaveWalley 2014年

感谢您不要删除这个绝妙的主意。在我的系统上,我保存了从客户端发回的所有错误和警告,并且当管理员登录时,他们会立即收到有关任何此类活动的警报,以便他们可以向维护人员提供建议。该网站适用于教育游戏,因此如果一个小时左右出现任何问题,这并不是什么大问题。
凌晨

8

我在php.ini中按以下步骤进行操作:

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

这仅记录致命错误,没有警告。


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

7

您可以使用error_reporting禁止显示警告,但是更好的方法是首先修复脚本。

如果您不知道该怎么做,请编辑您的问题,然后向我们显示有问题的行以及显示的警告。


7
Safaali,您应该解决问题,然后不要忽视。
桑普森

2
Safaali看到您对PHP有一定兴趣后,帮自己一个忙,并研究修复该脚本。
Pekka 2010年

0

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

@$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();
}

0

要忽略所有警告,请在代码顶部使用以下示例:

error_reporting(0);

您的答案与接受的答案有什么区别?
endo64
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.