2009-08-07 68 views
3

我不知道我使用的术语是否正确,但我所寻找的是类似于您使用zend服务器获得的东西。看看thisPHP错误包装?

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

+0

我很想知道,如果这样的事情存在的......虽然我自己也有点失望,因为我已经花了很多时间开发自己的... – Josh 2009-08-07 17:54:24

回答

3

我不会没有任何工具会自动为你做;但我认为这并不难,但我承认,这将需要你一些时间:-(

只是为了抛出一些笔记,我脑海中记录的最好的解决方案错误是:

  • set_error_handler
  • 代码的函数注册自己的错误处理,使得它记录错误+ GET/POST数据
    • 也许这能/会/应以某种形式进行的数据库或结构化文件(SQLite数据库,可能是:li ght,快速,易于使用,不依赖于外部数据库服务器,...),而不仅仅是纯文件;稍后将更容易处理。
  • 制定的 “报告” 应用......
    • 这将需要一些时间,但是,如你所说的东西...


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

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 
) 

在这种情况下,它是一个很丑陋的混乱......但你可能看到这一点;现在,你来建立在这得到正是你想要;-)


当然什么,现在,你还必须发展报告界面(用户方便,快捷,实用,和所有。 ..);这可能会是最长的部分到位:-(

而且,不幸的是,我不知道任何工具,可以帮助你......
(也许吧,如果你开始深化发展的东西,它可能会以开源方式发布?这可能会对其他人有用;-)我可能会对某些项目感兴趣,并且我确信我不是那个;-))

仍然,玩得开心!

+0

+1:非常彻底的回应。 – Josh 2009-08-07 19:33:06

+0

谢谢:-)(实际上,夫妇和我的同事的,在工作中,想过PHP缺乏这些类型的报告工具的事实......但是,不幸的是,我们没有建立一个很好的解决方案的时候..所以我们结束了一个包含数据的转储原始日志文件就像我前面转载)的例子;本来是很高兴有一个现有的解决方案,但^^ – 2009-08-07 19:35:44

2

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

我已经使用set_error_handler()set_exception_handler()为几个项目编写了测井功能。

我的处理程序类基本上做了_GET,_POST,_SERVER,_COOKIE,_SESSION等的print_r()和email/SMS me。大部分时间都能正常工作。我喜欢获取快速错误通知。 (所以我可以快速修复它)。

您已经突出显示了PHP社区工具中的缺陷。有人需要启动一个项目,记录错误并用一个漂亮的用户界面来解析/显示日志。嗯...