yii中的錯誤及異常處理
以下內容中,將異常和錯誤統稱為錯誤,如有必要會進行詳細區分說明。
yii_debug常量(預設為false, 可以在入口檔案中設定)對錯誤資訊的顯示有很重要的影響,debug模式下,錯誤的輸出是最詳細的。而程式一旦投入執行,則應將yii_debug修改為false。
無論是否處於debug模式,yii程式產生錯誤時均會將相關錯誤資訊進行記錄(錯誤級別為error, 分類為php)。不同之處是debug模式時會直接在web頁上顯示詳細資訊。
php錯誤的處理
當產生錯誤時,php會在日誌中記錄哪些資訊?
錯誤**(即php的e_error e_warning e_strict e_deprecated)
訊息內容(如 undefined vaiable $input)
產生錯誤的檔案路徑
產生錯誤的行號
額外的跟蹤回溯資訊(這是通過debug_backtrace實現的)
當前url
此時將產生乙個cerrorevent(幷包含$code,$message,$file,$line幾項關鍵引數),傳遞給cerrorhandler元件進行處理。具體是交給cerrorhandler::handleerror處理之。這個流程主要是將錯誤相關資訊進行整理,並以合適的方式進行顯示。
是否為debug模式(yii_debug==true),對錯誤資訊的顯示結果有極大影響。除錯模式下我們希望能顯示詳細的錯誤跟蹤資訊,而在生產模式下,我們希望給使用者顯示友好的頁面。所以,此處的錯誤顯示有所不同,下面區分說明之。
當處於除錯模式時,將直接渲染exception檢視展示錯誤。將按以下路徑搜尋:
protected/views/system/exception.php
yii_path/views/exception.php
顯然,預設情況下並沒有在應用程式中定義views/system目錄,故會使用系統框架自帶的視**件。最終包含的檔案將是yii框架中的views/exception.php。
從以上分析中可以得知,在除錯模式下如果我們要使用自定義異常頁面(一般這麼做的意義可能不大),則需要配置檔案protected/views/system/exception.php, 可使用的變數即$data。
當處於非除錯模式下時,會作如下處理:
1. 配置檔案中若為errorhandler元件定義了erroraction路由資訊,則直接執行之,否則執行第2步流程。
2. 嘗試載入error檢視,按以下路徑搜尋(第乙個搜尋到的檔案將被使用)
protected/views/system/zh_cn/error500.php
protected/views/system/error500.php
protected/views/system/zh_cn/error.php
protected/views/system/error.php
yii_path/views/zh_cn/error500.php
yii_path/views/error500.php
yii_path/views/zh_cn/error.php
y ii_path/views/error.php
異常的處理
根據前面的分析,異常的處理機制與錯誤處理機制類似,也會記錄日誌,級別是error, 分類為"exception.$exceptionclass", 若是chttpexception類異常,分類名稱則為exception.chttpexception.$status_code。如資料的異常分類稱為exception.cdbexception。
接下來將錯誤事件cexceptionevent交由errorhandler處理,所有錯誤資訊都由cexceptionevent物件傳遞而來。處理方法如下:
1. 如果是除錯模式,則按以下順序搜尋視**件,第乙個搜尋到的檔案將被使用
protected/views/system/exception.php
yii_path/views/exception.php
2. 如果是非除錯模式,並在配置檔案中為errorhandler元件定義了erroraction屬性路由,則執行之,否則進入第3步。
3. 按以下順序嘗試載入視**件,第乙個搜尋到的檔案將被使用
3. protected/views/system/zh_cn/error500.php
protected/views/system/error500.php
protected/views/system/zh_cn/error.php
protected/views/system/error.php
yii_path/views/zh_cn/error500.php
yii_path/views/error500.php
yii_path/views/zh_cn/error.php
y ii_path/views/error.php
使用流程圖描述,會更清楚一些:
從圖中可以看出,最容易的方式還是給errorhandler元件設定erroraction屬性指定錯誤發生的路由
一般而言,我們最關心的是生產模式下錯誤頁面的顯示問題,經過以上分析,有兩種方法可用:
1. 配置檔案中為errorhandler元件定義erroraction路由屬性(應該優先使用這個方式,以達到靈活配置目的)
2. 定義以下檔案中的任意乙個,實現自定義錯誤頁(不推薦)
protected/views/system/zh_cn/error500.php
protected/views/system/error500.php
protected/views/system/zh_cn/error.php
protected/views/system/error.php
第1種方式靈活可控,可以在控制器中指定視**件,靈活可控。
大小: 62.8 kb
鏈結
Yii中的錯誤及異常處理
yii中的錯誤及異常處理 以下內容中,將異常和錯誤統稱為錯誤,如有必要會進行詳細區分說明。yii debug常量 預設為false,可以在入口檔案中設定 對錯誤資訊的顯示有很重要的影響,debug模式下,錯誤的輸出是最詳細的。而程式一旦投入執行,則應將yii debug修改為false。無論是否處於...
Yii中的錯誤及異常處理
yii中的錯誤及異常處理 以下內容中,將異常和錯誤統稱為錯誤,如有必要會進行詳細區分說明。yii debug常量 預設為false,可以在入口檔案中設定 對錯誤資訊的顯示有很重要的影響,debug模式下,錯誤的輸出是最詳細的。而程式一旦投入執行,則應將yii debug修改為false。無論是否處於...
PHP 錯誤處理及異常處理
1.設定自己的錯誤處理函式 trigger error 捕捉使用者級別的錯誤。set error handler 使用者自定義錯誤處理函式。2.捕獲異常 捕獲異常當然用trycatch 當然 中使用的異常處理類是thinkphp中,throw exception 為thinkphp的丟擲異常函式 另...