2011-12-15 42 views
8

我有一個簡單的自定義錯誤處理程序,它在錯誤日誌文件中寫入一些有用的調試信息。set_error_handler()不能爲FATAL錯誤工作

這是一切工作,但它不會被觸發致命錯誤。

有什麼辦法解決這個問題?

目前繞過這種情況下我已經註冊了關斷功能太多,檢查error_get_last()

+4

[`以下錯誤類型不能與用戶定義的函數處理:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,最E_STRICT的升高,其中的set_error_han dler()是called.`在文件中](HTTP: //us.php.net/set_error_handler) – animuson 2011-12-15 23:13:58

+1

這個問題錯過了一個鏈接:[PHP的:自定義錯誤處理程序 - 處理解析和致命錯誤](http://stackoverflow.com/q/1900208/367456)。 – hakre 2012-06-22 10:43:33

回答

16

不,那只是一個set_error_handler()限制;它不處理所有錯誤。

以下錯誤類型不能與用戶定義的函數來處理:E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING,大部分E_STRICT其中set_error_handler()被稱爲在文件中提出的。

register_shutdown_function()error_get_last()是一個體面的解決方法。

+0

我們無法通過這種方式獲取回溯... – Loenix 2016-01-12 17:05:14

4

只有很少的方法可以解決它,通過使用register_shutdown_function(),然後檢查該函數內是否發生錯誤。

PHP有log_errors是有原因的,你可以讓PHP日誌任何錯誤日誌或日誌文件而無需定製一行代碼。因此,根本不需要使用set_error_handler()用於此目的,除非需要例如一個堆棧跟蹤。

相關問題