【问题标题】:Remove warning messages in PHP删除 PHP 中的警告消息
【发布时间】:2010-12-31 13:11:01
【问题描述】:

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

如何删除/抑制/忽略这些警告消息?

【问题讨论】:

标签: php warnings error-reporting


【解决方案1】:

您确实应该修复导致警告的任何原因,但您可以使用error_reporting() 控制错误的可见性。要跳过警告消息,您可以使用以下内容:

error_reporting(E_ERROR | E_PARSE);

【讨论】:

  • E_ALL ^ E_WARNING,启用除警告之外的所有错误报告,似乎是error_reporting 的更好参数选择。
  • 一般我同意,在我的情况下生成警告消息是预期行为,因为它是我的单元测试的一部分。
  • “^”操作符是做什么的?
  • @NS ^ 是 xor(位翻转)运算符...在该示例中,E_ALL 设置了所有错误位(“on”),因此当您在它之后执行 ^ E_WARNING ,您正在翻转E_WARNING 的位,所以它“关闭”...
【解决方案2】:

你可以在你的函数调用前面加上一个@ 来隐藏所有的错误信息。

@yourFunctionHere();

【讨论】:

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

在启用所有其他错误报告的同时抑制警告:

error_reporting(E_ALL ^ E_WARNING); 

【讨论】:

    【解决方案4】:

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

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

    Error Reporting - PHP Manual

    【讨论】:

      【解决方案5】:

      如果您想在显示所有其他错误的同时抑制警告和其他一些错误类型(例如,通知),您可以这样做:

      error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
      

      【讨论】:

        【解决方案6】:

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

        在 Wordpress 中 hide Warnings and Notices 在 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 中隐藏日志时,这是最好的解决方案。谢谢!!
        【解决方案7】:

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

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

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

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

        【讨论】:

        • 就个人而言,我会改用ob_start()ob_end_clean()。这样,这些东西甚至不会被发送到浏览器(它在这里)。
        • 这就是为什么我包括了“某些情况”、“不应该隐藏警告”和“提醒我”。
        • 在否决我更多之前,请阅读我的回复。注意“第三方”、“妥协”和上面的评论。我添加了这个答案,以防其他人处于与我相同的情况,并且在那种特定情况下,这救了我,而所有其他答案都不会那么好。下次我会三思而后行。
        • 感谢您没有删除这个绝妙的主意。在我的系统上,我保存了从客户发回的所有错误和警告,当管理员登录时,他们会立即收到任何此类活动的警报,以便他们可以向维护人员提供建议。该网站是用于教育游戏的,所以如果一个小时左右出现任何问题,这并不是什么大问题。
        【解决方案8】:

        我在我的 php.ini 中这样做:

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

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

        【讨论】:

          【解决方案9】:

          我认为更好的解决方案是配置 .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
          

          【讨论】:

            【解决方案10】:

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

            如果您不知道如何操作,请编辑您的问题并向我们展示有问题的行和显示的警告。

            【讨论】:

            • Safaali,你应该解决问题,而不是忽视。
            • Safaali,鉴于您对 PHP 有一定的兴趣,请帮自己一个忙,并考虑修复该脚本。
            【解决方案11】:

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

            error_reporting(0);
            

            【讨论】:

            • 你的答案与接受的答案有什么区别?
            【解决方案12】:

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

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

            【讨论】:

              【解决方案13】:

              注意:这是为了抑制警告,而不是致命错误

              您可以使用 @ 运算符,这将隐藏除致命错误之外的所有警告,但请注意,添加 @ 运算符会增加脚本的执行时间

              例如@function_name();

              另一种方法是使用 .ini 配置文件并编辑 error_reporting 部分,如下编辑它将继续显示所有错误,但会抑制脚本中的任何警告

              error_reporting(E_ALL ^ E_WARNING);

              但是如果您需要在特定项目而不是整个服务器中抑制警告,那么下面的代码行就足够了

              ini_set('error_reporting', E_ALL ^ E_WARNING);

              【讨论】:

                猜你喜欢
                • 2021-01-16
                • 2011-08-08
                • 1970-01-01
                • 2018-01-06
                • 2016-01-25
                • 2015-06-28
                • 1970-01-01
                • 1970-01-01
                • 2019-08-07
                相关资源
                最近更新 更多