315

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

486

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);
Sign up to request clarification or add additional context in comments.

4 Comments

E_ALL ^ E_WARNING, enabling all error reporting besides warnings, seems like a better choice of argument to error_reporting.
generally I agree, in my case generating the warning message was intended behaviour because it was part of my unit tests.
What does the "^" operator do?
@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"...
154

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

@yourFunctionHere();

13 Comments

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
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 @.
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.
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.
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
|
70

To suppress warnings while leaving all other error reporting enabled:

error_reporting(E_ALL ^ E_WARNING);

Comments

37

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

Comments

35

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

Comments

28

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 Comment

This is the best solution, when it comes to hide logs in Wordpress. Thank you!!
18

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.

Comments

13

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 Comments

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).
That's why I included "some situations", "warnings should not be suppressed" and "reminder to me".
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.
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.
9

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

1 Comment

Safaali, you ought to fix the problems, not ignore then.
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

Comments

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.