Zend Framework - not all errors are shown

2019-02-26 04:05发布

问题:

In an action method, I have the following excerpt of code:

error_reporting(E_ALL);
ini_set('display_errors', '1');
Logger::log('test');

The Logger class is defined in this way:

class Logger {
    public static function log() {
        echo "test";
}

I deliberately forgot the closing brace of the function to demonstrate the problem. When the action is called, absolutely nothing is rendered on the screen. What type of error is this, and why is it not displayed, even though I configured PHP to show all errors, as shown above?

Of course, if I add the missing brace, everything is OK.

回答1:

You also have to enable display_startup_errors to show Fatal errors:

Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed. It's strongly recommended to keep display_startup_errors off, except for debugging.

Also see the Note for 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.

You can set both values in Zend Framework's application.ini. On a sidenote: if you set error_reporting(-1) it will report (!display) all errors, including E_STRICT and any future additions.



回答2:

I have exactly the same problem - I didn't manage to completely solve it, but I found out that all errors are correctly logged to a file, even though they are not displayed.

Just put this lines in your .htaccess/server config:

php_value       log_errors                      On
php_value       error_log                       "/path_to_logs/errors.log"