为什么我不能用PHP 5.2处理CakePHP 2.x中的致命错误?

时间:2014-10-23 09:07:09

标签: php cakephp error-handling cakephp-2.0

我在CakePHP中遇到一个奇怪的问题,在使用PHP 5.2时,我的AppExceptionRenderer没有被触发致命和解析错误(E_ERRORE_PARSE)。我的开发机器(PHP 5.5)上的完全相同的代码工作正常。

任何想法为什么?

1 个答案:

答案 0 :(得分:2)

我最终将其跟踪到PHP 5.2中似乎是一个错误,其中对new SplFileInfo()的调用奇怪地重置了error_get_last()内通常存在的致命错误信息。

我的解决方法是通过在App::shutdown()次来电之上移动_checkFatalError()来调整Cake的默认Cache::write()功能。

结果就是这个......

public static function shutdown() {
    // For some weird reason on PHP 5.2 the SplFileInfo call made in Cache::write 
    // resets error_get_last() which means we can't trap fatal/parse errors.  
    // Small workaround is to check for errors *before* doing the caching thing
    self::_checkFatalError();

    if (self::$_cacheChange) {
        Cache::write('file_map', array_filter(self::$_map), '_cake_core_');
    }
    if (self::$_objectCacheChange) {
        Cache::write('object_map', self::$_objects, '_cake_core_');
    }
    // self::_checkFatalError();
}

也许有一天它可能会帮助其他人。 : - )