What are the reasons why PHP would echo errors, even with error_reporting(0)?
Asked Answered
M

8

11

What are some reasons why PHP would force errors to show, no matter what you tell it to disable?

I have tried

error_reporting(0);
ini_set('display_errors', 0); 

with no luck.

Mufti answered 16/9, 2008 at 23:21 Comment(3)
I don't know this answer, but if possible it may help if you provide an example of an error that was displayed with reporting turned off.Boric
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /usr/home/johnq/public_html/dev.php on line 11 the only PHP in dev.php is this: <?php error_reporting(0); echo "test" $test = "123"; ?>Mufti
Without that error message, it might have taken you a lot longer to realize that your script wasn't running simply because of a missing semicolon.Looseleaf
A
15

Note the caveat in the manual at http://uk.php.net/error_reporting:

Most of E_STRICT errors are evaluated at the compile time thus such errors are not reported in the file where error_reporting is enhanced to include E_STRICT errors (and vice versa).

If your underlying system is configured to report E_STRICT errors, these may be output before your code is even considered. Don't forget, error_reporting/ini_set are runtime evaluations, and anything performed in a "before-run" phase will not see their effects.


Based on your comment that your error is...

Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /usr/home/REDACTED/public_html/dev.php on line 11

Then the same general concept applies. Your code is never run, as it is syntactically invalid (you forgot a ';'). Therefore, your change of error reporting is never encountered.

Fixing this requires a change of the system level error reporting. For example, on Apache you may be able to place...

php_value error_reporting 0

in a .htaccess file to suppress them all, but this is system configuration dependent.

Pragmatically, don't write files with syntax errors :)

Attach answered 16/9, 2008 at 23:26 Comment(0)
B
3

To prevent errors from displaying you can

  • Write in a .htaccess: php_flag display_errors 0
  • Split your code in separate modules where the main (parent) PHP file only sets the error_logging and then include() the other files.
Bulgarian answered 18/9, 2008 at 13:6 Comment(0)
G
1

Use phpinfo to find the loaded php.ini and edit it to hide errors. It overrides what you put in your script.

Guff answered 2/1, 2011 at 15:52 Comment(0)
U
1

Is set_error_handler() used anywhere in your script? This overrides error_reporting(0).

Uncial answered 10/6, 2013 at 8:34 Comment(0)
W
0

Use log_errors for them to be logged instead of displayed.

Waverley answered 16/9, 2008 at 23:33 Comment(1)
<?php ini_set('error_log','/error_log'); ini_set('log_errors',TRUE); echo "test" $test = "123"; ?> Still causes the same error, unfortunately. I'm looking for a way to do this without modifying php.ini. Is that possible?Mufti
B
0

If the setting is specified in Apache using php_admin_value, it can't be changed in .htaccess or at runtime.

See: How to change configuration settings

Bartolommeo answered 18/9, 2008 at 21:25 Comment(0)
R
0

Pragmatically, don't write files with syntax errors :)

To ensure there's no syntax errors in your file, run the following:

php -l YOUR_FILE_HERE.php

This will output something like this:

PHP Parse error:  syntax error, unexpected '}' in Connection.class.php on line 31
Rm answered 7/12, 2015 at 15:50 Comment(0)
O
0

Just add the below code in your index.php file:

ini_set('display_errors', False);
Oleum answered 16/12, 2017 at 10:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.