PHP错误包装?

时间:2009-08-07 17:35:29

标签: php

我不知道我使用的术语是否正确,但我正在寻找的是类似于你使用zend服务器的东西。看看this

看起来像是一个错误,它会将请求与堆栈跟踪和函数参数以及其他一些信息一起转储。它允许您在一个漂亮的界面中查看它。我知道这并不难让你自己,因为你总是可以做错误回调,但如果这样的事情存在(免费),我宁愿使用它而不是重新发明轮子。

2 个答案:

答案 0 :(得分:3)

我不会自动为你做任何工具;但是我觉得......不难发展......但我承认,这需要你花一些时间: - (

只是提出几点说明,我想到的记录错误的最佳解决方案是:

  • 使用set_error_handler
  • 注册您自己的错误处理程序
  • 对函数进行编码,以便记录错误+ GET / POST数据
    • 也许/可能/应该在某种数据库或结构化文件(一个SQLite数据库)中完成:轻巧,快速,易于使用,不依赖于外部数据库服务器,。 ..),而不仅仅是纯文件;以后会更容易处理。
  • 开发“报告”应用程序......
    • 这就是需要一些时间的事情,正如你所说的那样......


使用手册页上给出的示例,可能会这样:首先,声明您的错误处理函数:

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $str = '';
    switch ($errno) {
        case E_USER_ERROR:
            $str .= "<b>My ERROR</b> [$errno] $errstr<br />\n";
            $str .= "  Fatal error on line $errline in file $errfile";
            $str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            break;
        case E_USER_WARNING:
            $str .= "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;
        case E_USER_NOTICE:
            $str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;
        default:
            $str .= "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }
    $str .= print_r($_GET, true);

    $str .= "\n";
    file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND);

    /* Don't execute PHP internal error handler */
    return true;
}

它获取错误信息,准备一些依赖于错误类型的特定错误消息,并将所有这些和$_GET转储放到文件中。
(当然,您的网络服务器必须能够创建/写入该文件)


然后,您注册该处理程序:

$old_error_handler = set_error_handler("myErrorHandler");


最后,只是为了测试,你会触发一些错误:

trigger_error("test of E_USER_ERROR", E_USER_ERROR);
trigger_error("test of E_USER_WARNING", E_USER_WARNING);
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE);


现在,只要您使用以下内容调用页面:http://tests/temp/temp.php?a=10&test=glop&hello=world;你会得到一个包含这个的错误日志:

$ cat log.txt
<b>My ERROR</b> [256] test of E_USER_ERROR<br />
  Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My WARNING</b> [512] test of E_USER_WARNING<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

在这种情况下,这是一个相当难看的混乱...但你可能会看到这一点;现在,由你来建立这个以获得你想要的东西; - )


当然,现在,您还必须开发报告界面(用户友好,快速,可用,以及所有......);这可能是最长的部分: - (

而且,不幸的是,我不知道任何可以帮助你的工具......
(也许,如果你开始开发一些东西,它可以作为开源发布?这可能对其他人有用;-)我可能对一些项目感兴趣,我相信我不是一个;-))

仍然,玩得开心!

答案 1 :(得分:2)

我不知道有任何解析和显示PHP错误日志的免费工具。

我使用set_error_handler()set_exception_handler()为几个项目编写了日志记录功能。

我的处理程序类基本上执行_GET,_POST,_SERVER,_COOKIE,_SESSION等的print_r()和电子邮件/短信我。大多数时候工作正常。我喜欢收到快速错误通知。 (所以我可以快速解决它)。

您已经突出了PHP社区工具的一个空白。有人需要启动一个项目来记录错误,并使用一个很好的UI来解析/显示日志。嗯...