display_errors is always set to On. It should honor the php.ini setting instead #3009

anonymous-piwik-user opened this Issue Mar 5, 2012 · 6 comments

2 participants


As put in evidence by the "security" plugin, display_errors is always on by default.

The line:
ini_set('display_errors', (!defined('PIWIK_DISPLAY_ERRORS') || PIWIK_DISPLAY_ERRORS) ? 1 : 0);

should be:
ini_set('display_errors', (defined('PIWIK_DISPLAY_ERRORS') && PIWIK_DISPLAY_ERRORS) ? 1 : 0);


It's a bit more complicated than that. In newer php versions, that line actually has no effect (ie can only be set in php.ini). And depending on the php version, it can be a non-boolean value (which PhpSecInfo doesn't recognize).

The fix is to remove the line, update the bootstrap.php docs, and fix PhpSecInfo detection.


From http://ca2.php.net/manual/en/errorfunc.configuration.php#ini.display-errors

Although display_errors may be set at runtime (with ini_set()), it won't have any affect if the script has fatal errors. This is because the desired runtime action does not get executed.


(In [5973]) refs #3009 - don't set display_errors in vain; updated online docs (re: bootstrap.php)


Haha... it's a bug in the php documentation.

I just tested:

<?php ini_set('display_errors', 1); require_once('nonexistent.php');


<?php ini_set('display_errors', 0); require_once('nonexistent.php');

And the latter DID suppress the fatal error.


(In [5974]) fixes #3009 - display_errors now defaults to disabled; leaving PhpSecInfo "as is" because ini_set("display_errors", "stderr") is still leaky


About the line:

<?php ini_set('display_errors', 0); require_once('nonexistent.php');

What you are probably seeing is a blank page. Which is neither a bug in the php doc nor in the php execution:
. the script is halted with a fatal error - you will find it in the error log
. no error message is printed to screen

More meaningful tests are:

<?php ini_set('display_errors', 0); require_once('nonexistent.php'); echo 'hi';


<?php require_once('nonexistent.php'); ini_set('display_errors', 0);

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment