Troubleshooting PHP Not Reporting Errors
You've enabled PHP error reporting so that you may troubleshoot PHP code, but for some reason, no errors are being reported. Why?
On the phpinfo.php
page, you see the following local values, which are correct:
display_errors On display_startup_errors On error_log php_error.log error_reporting E_ALL
To diagnose the issue, let's create a test script called test.php
and add the following lines:
<?php echo zzzzzxzzzzxd('test'); ?>
Since the faked function zzzzzxzzzzxd
doesn't exit at all, visiting http://youdomain.com/test.php
should trigger a fatal error. However, there is no output of any error on the web browser, nor on the local VirtualHost PHP error logs. Why not?
Check phpinfo.php
again. We see error_log's global value is 32767
, while the local value is E_ALL
. Check the global php.ini
and you will find that error_reporting is set to E_ALL
. This is because you have a local override set in .htaccess as php_value error_reporting E_ALL
.
The error reporting syntax in the .htaccess php_value override is incorrect. If it is set in php.ini, it should be error_reporting = E_ALL
, but if it is an override in the Apache conf or .htaccess, error_reporting
should be an integer, and not ASCII characters. Such incorrect syntax will lead to a 500
error for the site.
The corrrect override syntax should be:
php_value error_reporting 32767
Here 32767
in Apache conf or .htaccess is equivalent to E_ALL
in php.ini. After the above change, PHP error reporting should work fine and PHP should report a fatal error for test.php
in both the browser and the error log.