在PHP5中记录致命/解析错误

时间:2010-05-05 11:24:49

标签: php fatal-error error-logging parse-error php-extension

我正在编写一个错误记录服务,该服务将集成到我的服务器上运行的网站上,这将通过电子邮件向我发送错误批次等。

所以我一直试图找出是否有办法处理致命错误和解析错误,但是不使用这些技巧来处理PHP代码(输出缓冲区,关闭函数)。我很乐意在我的PHP代码之外编写一些C代码或其他东西来处理它。如果可能的话,我还想发布重定向(我的网站使用输出缓冲,因此不应该发送任何标头)。

我很确定这可以通过PHP模块完成,但我从来没有写过,也不知道从哪里开始。

2 个答案:

答案 0 :(得分:3)

在PHP中无法捕获致命错误或解析错误。但..

在5.2中,他们添加了error_get_last()。您可以在关闭函数内调用它并执行日志记录。一个未经测试的5.3示例,用于在发生致命错误时触发邮件:

<?php
register_shutdown_function(function(){
    $err = error_get_last();
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
      && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) {
        error_log("Oh noes, a fatal: " . var_export($err, true), 1, 'fatals@example.com');
    }
});

(如果您不在5.3上,则需要使用回调,并且不能执行匿名功能。)

不幸的是,因为这是在关闭函数中处理的,所以可能已经发出了标题,并且您可能无法向用户提供任何有用的内容。这取决于应用程序的其余部分,因此它可能适合您。试试看吧!

答案 1 :(得分:1)

默认情况下,所有错误都会传递给Web服务器错误日志,但您可以通过指定自己文件via error_log setting的路径在php.ini中更改它。所以剩下要做的就是编写一些单独的脚本/应用程序来每天解析/发送数据/截断日志文件,并将其作为cron作业运行。