删除PHP中的警告消息

Ali*_*eza 206 php warnings error-reporting

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

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

Tat*_*nen 315

您真的应该修复导致警告的任何内容,但您可以使用error_reporting控制错误的可见性.要跳过警告消息,您可以使用以下内容:

error_reporting(E_ERROR | E_PARSE);
Run Code Online (Sandbox Code Playgroud)

  • `E_ALL ^ E_WARNING`,除了警告之外,启用所有错误报告,似乎是`error_reporting`的更好的参数选择. (49认同)
  • @NS ^ 是异或(位翻转)运算符...在该示例中,由于 `E_ALL` 已设置所有错误位(“on”),因此当您在其后执行 `^ E_WARNING` 时,您将翻转该位`E_WARNING`,所以它“关闭”...... (4认同)

Pet*_*sen 109

您可以在函数调用前放置@来禁止显示所有错误消息.

@yourFunctionHere();
Run Code Online (Sandbox Code Playgroud)

  • 有时(不幸的是)你真的没有选择.例如,PHP函数parse_url()为"严重格式错误"的URL生成警告 - 这可能是一个错误,因为在这种情况下函数返回false.因此,您必须在程序输出中容忍这些PHP警告(对于解析器/验证器应用程序可能是不可接受的),以某种方式抑制警告,或者通过编写自己的URL解析器/验证器来解决损坏的PHP行为.在这种情况下,我选择@. (40认同)
  • 这只是隐藏错误,它仍在发生.错误使PHP变慢,所以最好在可能的情况下修复错误.使用@甚至可以在没有错误时减慢代码速度.http://vega.rd.no/articles/php-performance-error-suppression (4认同)
  • 让我解释为什么这是至关重要的.像`dns_get_record`这样的函数会抛出警告.您的代码可能会对警告进行补偿但仍会引发警告.关闭错误报告在生产服务器上有效,但在开发服务器上无效.如果要生成XML内容,则警告将导致浏览器无法呈现,因为服务器正在发送由警告导致的格式错误的XML.有时你想要开发,但不是因为你已经补偿的临时DNS查找失败导致的. (3认同)
  • 让我解释一下为什么这样做很有用,当您想要代替所有警告消息而是将警告作为错误处理并生成自己的错误消息时, (2认同)

Kar*_*hik 37

要在启用所有其他错误报告的情况下禁止显示警告:

error_reporting(E_ALL ^ E_WARNING); 
Run Code Online (Sandbox Code Playgroud)


小智 27

如果您不想显示警告以及使用错误

// Turn off all error reporting
error_reporting(0);
Run Code Online (Sandbox Code Playgroud)

错误报告 - PHP手册


zst*_*ate 16

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

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
Run Code Online (Sandbox Code Playgroud)


小智 12

在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);
Run Code Online (Sandbox Code Playgroud)


Dav*_*ley 11

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

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

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

警告仍然在页面源中作为提醒给我,但对客户来说是不可见的.

  • 这就是为什么我包括"某些情况","警告不应该被压制"和"提醒我". (6认同)
  • 就个人而言,我会使用[`ob_start()`](http://php.net/manual/en/function.ob-start.php)和[`ob_end_clean()`](http://php.net /manual/en/function.ob-end-clean.php)相反.这样东西甚至不会被发送到浏览器(它在这里做). (5认同)
  • 在对我投反对票之前,请阅读我的回复。注意“第三方”、“妥协”和上面的评论。我添加了这个答案,以防其他人处于与我相同的情况,并且在那种特定情况下,这救了我,而所有其他答案都不会那么好。下次我会三思而后行。 (2认同)

Pek*_*ica 7

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

如果您不知道如何操作,请编辑您的问题并向我们显示相关行以及显示的警告.

  • Safaali,你应该解决问题,不要忽视. (7认同)
  • 看到你对PHP有一定的兴趣,Safaali帮自己一个忙,并考虑修复那个脚本. (2认同)

Seb*_*ski 6

我认为更好的解决方案是配置.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
Run Code Online (Sandbox Code Playgroud)


nav*_*vid 5

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

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Run Code Online (Sandbox Code Playgroud)

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