Re: Error recovery - fatal errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



You can register a shutdown function that gets called even in the case of a
fatal error. We use something like this:

    public function init() {
        register_shutdown_function(array('Bootstrap', 'fatalErrorCatcher'));
        ...
    }

    public function fatalErrorCatcher() {
        $error = error_get_last();
        if( $error && (
                $error['type'] === E_ERROR ||
                $error['type'] === E_COMPILE_ERROR ||
                $error['type'] === E_CORE_ERROR ||
                $error['type'] === E_PARSE
            )) {
            // kill the buffer content, it's broken anyway
            while(ob_get_level()) {
                ob_end_clean();
            }
            // log error to a file
            ...
            // issue 500 and dump out a static "site is broken oh noes!"
page
            header('HTTP/1.1 500 Internal Server Error');
            echo file_get_contents('fail-whale.html');
        }
    }

In catchFatalError() we check the last error to see if it's truly fatal. Our
general error-handler has already handled all other error types, and this
since function gets called no matter how the PHP process shutsdown, you
don't want to issue a 500 for a successful request. :)

David

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux