2009-08-07 69 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社區工具中的缺陷。有人需要啓動一個項目,記錄錯誤並用一個漂亮的用戶界面來解析/顯示日誌。嗯...