304

I have some PHP code. When I run it, a warning message appears.

How can I remove/suppress/ignore these warning messages?

1

11 Answers 11

475

You really should fix whatever's causing the warning, but you can control visibility of errors with error_reporting(). To skip warning messages, you could use something like:

error_reporting(E_ERROR | E_PARSE);
5
  • 83
    E_ALL ^ E_WARNING, enabling all error reporting besides warnings, seems like a better choice of argument to error_reporting.
    – Mark Amery
    Aug 25, 2014 at 19:54
  • 1
    generally I agree, in my case generating the warning message was intended behaviour because it was part of my unit tests.
    – pgee70
    Oct 3, 2017 at 10:15
  • 1
    What does the "^" operator do?
    – N S
    Jan 20, 2021 at 20:23
  • 4
    @NS The ^ is the xor (bit flipping) operator... In that example, as E_ALL have all errors bit set ("on") so when you do ^ E_WARNING after it, you are flipping the bit of E_WARNING, so its "off"...
    – caiovisk
    Nov 9, 2021 at 2:58
  • this works for me. Thanks!
    – Jamie
    Dec 19, 2023 at 7:01
149

You can put an @ in front of your function call to suppress all error messages.

@yourFunctionHere();
12
  • 7
    This just hides the error, it's still happening. Errors make PHP slow down so it's best to fix the error if at all possible. Using @ even slows down the code when there is not an error. vega.rd.no/articles/php-performance-error-suppression
    – dprevite
    Jan 1, 2010 at 2:31
  • 65
    Sometimes (unfortunately) you really don't have a choice. For example, the PHP function parse_url() generates Warnings for "severely malformed" URLs - which is arguably a bug since the function returns false in this case. So you must either tolerate these PHP warnings in your program output (may be unacceptable for parser/validator applications), suppress the Warnings somehow, or work around the broken PHP behavior by writing your own parser/validator for URLs. In this case, I choose the @.
    – Peter
    Dec 11, 2012 at 20:14
  • 1
    IMPORTANT: Use this method iff (1) you can't fix the problem that generates the warning nor (2) hide your warnings from end users via php error_reporting... Hiding warnings from your developers is NOT a solution. Jun 26, 2014 at 11:42
  • 5
    Let me explain why this is critical. Some functions like dns_get_record will throw warnings. Your code may compensate for the warning but it still throws them. Turning error reporting off works on the production server, but not on the devel server. If you are generating XML content, the warning will cause the browser not to render because the server is sending malformed XML caused by the warning. Sometimes you want that on devel, but not for something caused by a temporary DNS lookup failure you already compensate for. Feb 19, 2015 at 21:39
  • 2
    Let me explain why this is useful, when instead of all warning messages, it is you who wants to handle the warning as an error and generate your own error message
    – Daniel N.
    Jun 7, 2015 at 2:39
65

To suppress warnings while leaving all other error reporting enabled:

error_reporting(E_ALL ^ E_WARNING); 
36

If you don't want to show warnings as well as errors use

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

Error Reporting - PHP Manual

0
32

If you want to suppress the warnings and some other error types (for example, notices) while displaying all other errors, you can do:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
24

in Core Php to hide warning message set error_reporting(0) at top of common include file or individual file.

In Wordpress hide Warnings and Notices add following code in wp-config.php file

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);
1
  • This is the best solution, when it comes to hide logs in Wordpress. Thank you!!
    – Neo Morina
    May 20, 2020 at 7:49
14

I do it as follows in my php.ini:

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

This logs only fatal errors and no warnings.

0
11

Not exactly answering the question, but I think this is a better compromise in some situations:

I had a warning message as a result of a printf() statement in a third-party library. I knew exactly what the cause was - a temporary work-around while the third-party fixed their code. I agree that warnings should not be suppressed, but I could not demonstrate my work to a client with the warning message popping up on screen. My solution:

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

Warning was still in page source as a reminder to me, but invisible to the client.

4
  • 5
    Personally, I'd use ob_start() and ob_end_clean() instead. This way the stuff doesn't even get sent to the browser (which it does here).
    – h2ooooooo
    Dec 30, 2012 at 20:07
  • 6
    That's why I included "some situations", "warnings should not be suppressed" and "reminder to me".
    – DaveWalley
    Dec 30, 2012 at 20:10
  • 2
    Before down-voting me more, please read my reply. Note "third-party", "compromise" and the comment above. I added this answer in case someone else is in the same situation I was in, and in that specific situation, this saved me whereas all other answers would not have been as good. Next time I will think twice about being helpful.
    – DaveWalley
    Sep 17, 2014 at 14:49
  • Thank you for not removing this brilliant idea. On my system, I save all the errors and warnings, sent back from the clients and when an admin logs in, they are immediately alerted to any such activity so that they can advise the maintenance crew. The site is for educational games so it's not a biggie if anything goes wrong for an hour or so.
    – cneeds
    Nov 5, 2017 at 1:44
8

I think that better solution is configuration of .htaccess In that way you dont have to alter code of application. Here are directives for 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
8

You could suppress the warning using error_reporting but the much better way is to fix your script in the first place.

1
  • 8
    Safaali, you ought to fix the problems, not ignore then.
    – Sampson
    Jan 1, 2010 at 0:45
2

There is already answer with Error Control Operator but it lacks of explanation. You can use @ operator with every expression and it hides errors (except of Fatal Errors).

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

For debugging it's fast and perfect method. But you should never ever use it on production nor permanent include in your local version. It will give you a lot of unnecessary irritation.

You should consider instead:

1. Error reporting settings as mentioned in accepted answer.

error_reporting(E_ERROR | E_PARSE);

or from PHP INI settings

ini_set('display_errors','Off');

2. Catching exceptions

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.