我在CakePHP中遇到一个奇怪的问题,在使用PHP 5.2时,我的AppExceptionRenderer
没有被触发致命和解析错误(E_ERROR
和E_PARSE
)。我的开发机器(PHP 5.5)上的完全相同的代码工作正常。
任何想法为什么?
答案 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();
}
也许有一天它可能会帮助其他人。 : - )