我正在使用register_shutdown_function来追踪致命错误:
function fatalErrorShutdownHandler()
{
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
mail('..., 'fatal error '.time(), $last_error['type'].' '.$last_error['message'].' '.$last_error['file'].' '.$last_error['line']);
}
}
register_shutdown_function('fatalErrorShutdownHandler');
一切都按预期工作,当发生致命错误时,我会收到一封电子邮件。
我有一个脚本,它使用大量内存(巨大的关联数组,explode
大块文本,array_combine
...),保持我的默认内存限制托管服务提供商(128M)产生此错误:
致命错误:第0行的“未知”中允许的内存大小为134217728个字节(尝试分配3438个字节)
我的第一个问题是:为什么有时PHP无法准确说出发生错误的行?
我暂时解决了增加内存限制的问题,但我真正想了解的是如何跟踪这种错误?当我收到“第0行”错误时fatalErrorShutdownHandler()
函数无法按预期工作,它会被执行但是error_get_last()返回NULL,所以我无法跟踪错误。