php優秀框架codeigniter學習系列——異常和錯誤處理機制

  這篇介紹下CI框架的異常和錯誤處理機制。php

  在入口文件index.php中,根據設置的環境參數設置error_reporting的範圍,和是否顯示錯誤。框架

 

  在CI初始化程序CodeIgniter.php中,設置自定義的錯誤處理方法,自定義的異常處理方法,自定義的php停止處理方法。函數

1     set_error_handler('_error_handler');
2     set_exception_handler('_exception_handler');
3     register_shutdown_function('_shutdown_handler');

  _error_handler,_exception_handler,_shutdown_handler均在system/core/Common.php中定義。spa

  _error_handler

  當php程序出錯時,_error_handler會捕獲這個錯誤。獲得的錯誤信息包括錯誤級別,錯誤信息,出錯文件地址,出錯行數。對於E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR級別的錯誤,會設置http請求返回code爲500。對於error_reporting()爲0(多是生產環境也多是函數前加有忽略錯誤標誌@)的或者錯誤級別沒有在index.php中設置的,直接返回。不然會記錄錯誤日誌。若是設置了display_errors能夠展現錯誤,則顯示錯誤信息給用戶看到。日誌

  值得一提的是,官方文檔有說明。如下級別的錯誤不能由用戶定義的函數來處理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING。程序一般會直接拋出一個錯誤信息。不管是否開啓error_reporting,都不能記錄到日誌中。code

  _exception_handler

  用於捕獲異常。經常由throw new exception("string...")觸發。它也會調用日誌處理類來記錄日誌。它和_error_handler傳遞給日誌處理類的日誌類別參數都是error。若是設置了display_errors能夠展現錯誤,則顯示相關異常信息給用戶看到。blog

  _shutdown_handler

  程序執行停止時候(無論有沒有錯誤),會調用這個方法。該方法會去程序運行中出現的錯誤,若是有,傳遞給_error_handler函數處理。文檔

  

  除了這三個異常捕獲的函數。CI框架還提供了主動拋出錯誤頁面的函數。在system/core/Common.php中定義了show_error,show_404。string

  show_error能夠設置錯誤信息,設置Http狀態碼,出錯顯示模版等。it

  show_404能夠設置404錯誤顯示模板,是否記錄日誌等。

相關文章
相關標籤/搜索