使用register_shutdown_function跟踪“线路0上的错误”,在PHP中跟踪致命错误

时间:2015-10-24 17:15:10

标签: php error-handling fatal-error

我正在使用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,所以我无法跟踪错误。

0 个答案:

没有答案