2013-10-22 122 views
0

我遇到了...刺激,我猜...在我使用的應用程序中使用自定義錯誤處理程序,我希望這裏有人能提供一些見解。自定義PHP錯誤處理

作爲我們網站數據聚合的一部分,自定義蜘蛛和解析器是在我們的代碼庫之外的基礎上建立的。它們存儲在數據庫中,並通過齒輪過程中的eval運行。

設置了一個自定義錯誤處理程序,在出現錯誤時插入正在運行的公司的ID號(例如,如果在正則表達式中忘記了分隔符,或者當我還沒有分隔符時,我的咖啡)。大多數情況下,這個錯誤處理程序很好。

但是,我注意到如果在eval'd代碼中有一個未終止的註釋,那麼錯誤處理程序不會被使用,所以php錯誤日誌不包含具有該問題的公司的ID號。

我們處理下面的錯誤類型的處理器

  • E_WARNING
  • E_USER_WARNING
  • E_ERROR
  • E_USER_ERROR

日誌狀態註釋字符串錯誤是 '警告' ,所以我不知道爲什麼自定義hanlder沒有被調用。

有什麼想法?

+0

你使用'的set_error_han dler()'處理錯誤? –

+0

只是好奇,你可以在所有代碼的末尾添加'/ **/\ n'嗎?這將強制終止評論。 – cwallenpoole

+0

未終止的評論並不是唯一引起奇怪問題的事情,但它是最容易解釋的。 – Lisa

回答

1

按照documentation你不能使用E_ERROR自定義功能error_handler()

The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

+0

因此,如果它被作爲警告放在日誌中,我猜這是一個核心或編譯警告?有沒有辦法說出它是什麼? – Lisa

+1

對不起,因爲我在我的所有機器上安裝了'xdebug',而且我的錯誤如下所示:'PHP Parse error:syntax error,unexpected')',期待'('in ... on line 38,'with a堆棧跟蹤您可以嘗試從以下問題實現解決方案:http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error – nietonfir