PHP:由*致命*错误突然终止请求的影响

时间:2011-03-30 22:02:08

标签: php fatal-error

我遇到了一个奇怪的情况。

我的应用程序将大量跟踪日志记录到文件中。 (我不确切知道如何使用我的框架记录器。虽然可以检查一下)

问题是,当应用程序被致命错误(仅致命)终止时[例如 - “致命错误:在非对象上调用成员函数someFunction()”,I最终没有日志,甚至是在我的脚本执行期间应该更早记录的日志。

(是的,我试图刷新日志,这也没有帮助。看起来像致命错误导致应用程序终止,不知何故取消写入在应用程序的早期点完成的文件。

这里有什么想法?

谢谢

2 个答案:

答案 0 :(得分:3)

致命错误是......好...... 致命:它会停止执行脚本,这不会做任何应该完成的事情。


在您的情况下,我认为您的日志框架会记录到内存中 - 并且只有在完成请求处理时才会将此内存中日志写入文件。
一些日志记录机制可以做到这一点,以避免在生成响应期间的不同点上多次写入文件(这意味着保持文件锁定,以避免并发问题;或者打开 - 关闭 - 重新打开-reclosing -... it)

当您收到致命错误时,不会调用应在响应生成结束时执行的正常操作 - 因此,内存中的日志不会写入文件。

现在,唯一可以确定的方法是查看框架的日志记录; - )

答案 1 :(得分:0)

显然,Pascal提到的致命错误的死亡率并非100%致命。

以下允许我将日志记录在致命错误上:

function correctShutdown()
{
   logger->flush();
}

register_shutdown_function('correctShutdown');