PHP的全局錯誤處理詳解__第1頁
PHP的全局錯誤處理詳解__第2頁
PHP的全局錯誤處理詳解__第3頁
PHP的全局錯誤處理詳解__第4頁
PHP的全局錯誤處理詳解__第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、PHP的全局錯誤處理詳解_ 本文目的 PHP的全局錯誤處理,在開發(fā)項目的時候很有用,可以關心開發(fā)者快速定位一些問題,提高工作效率。默認狀況下,全局錯誤會挺直輸出,但是最近開發(fā)時用法的一個框架庫對全局錯誤處理進行了設定,導致許多錯誤信息沒有輸出,在定位問題上有肯定的耗時。所以,討論了一下此庫的實現(xiàn),發(fā)覺它設定了error_reporting和set_error_handler,導致此現(xiàn)象。現(xiàn)在記錄一下這兩個函數(shù)的用法,作為備忘錄。 背景 PHP沒有類型檢測,開發(fā)人員比較簡單輸入錯誤單詞,引起致命錯誤,最終導致腳本停止執(zhí)行。假如這個時候,沒有得到任何錯誤消息,那么會是一件很苦痛的事情。你不得不從腳

2、本的第一行代碼開頭調(diào)試,在成千上萬行的代碼中不斷的print或者echo,直到定位到這個輸錯的單詞。然后,有不得不原路返回,將從前添加的print或echo全部刪除。這時一件及其枯燥乏味的工作。 一般狀況 正常狀況下,php會將致命錯誤挺直輸出,會將錯誤的出處(文件地址,行號)和緣由等輸出,這樣,開發(fā)著可以很便利的定位到問題。 但是有些時候,可能由于php.ini的設置問題,可能是第三方框架配置的問題,導致這些信息沒有輸出,那么此時,必需學會自己設置相關參數(shù),輸出這些錯誤信息,關心快速定位問題。 error_reporting error_reporting是一個php的全局配置參數(shù),在php

3、.ini中。用于配置錯誤輸出級別,參數(shù)是比特位,可以用來設置錯誤輸出的級別,下面是從php.ini中copy出來的信息: ; error_reporting is a bit-field. Or each number up to get desired error ; reporting level ; E_ALL - All errors and warnings (doesnt include E_STRICT) ; E_ERROR - fatal run-time errors ; E_RECOVERABLE_ERROR - almost fatal run-time errors ;

4、 E_WARNING - run-time warnings (non-fatal errors) ; E_PARSE - compile-time parse errors ; E_NOTICE - run-time notices (these are warnings which often result ; from a bug in your code, but its possible that it was ; intentional (e.g., using an uninitialized variable and ; relying on the fact its auto

5、matically initialized to an ; empty string) ; E_STRICT - run-time notices, enable to have PHP suggest changes ; to your code which will ensure the best interoperability ; and forward compatibility of your code ; E_CORE_ERROR - fatal errors that occur during PHPs initial startup ; E_CORE_WARNING - wa

6、rnings (non-fatal errors) that occur during PHPs ; initial startup ; E_COMPILE_ERROR - fatal compile-time errors ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) ; E_USER_ERROR - user-generated error message ; E_USER_WARNING - user-generated warning message ; E_USER_NOTICE - user-gener

7、ated notice message ; ; Examples: ; ; - Show all errors, except for notices and coding standards warnings ; ;error_reporting = E_ALL E_NOTICE ; ; - Show all errors, except for notices ; ;error_reporting = E_ALL E_NOTICE | E_STRICT ; ; - Show only errors ; ;error_reporting = E_COMPILE_ERROR|E_RECOVER

8、ABLE_ERROR|E_ERROR|E_CORE_ERROR ; ; - Show all errors except for notices and coding standards warnings ; error_reporting = E_ALL E_NOTICE 默認狀況下,php會輸出全部錯誤信息,除了notice。同樣,php標準函數(shù)中供應了名稱相同的函數(shù)error_reporting(int $level),用于在php腳本中,完成同樣的功能。這樣將不會影響其他程序。值得留意的是,$level為0的時候是關閉錯誤輸出,也就是任何錯誤都不會輸出。 set_error_handl

9、er php的默認錯誤處理是將消息輸出。但是,有時候需要定義一些其他操作,這時就需要自定義錯誤處理函數(shù)。php供應內(nèi)置函數(shù)set_error_handler可以關心我們注冊自己的錯誤處理函數(shù)。函數(shù)原型如下: mixed set_error_handler ( callback $error_handler , int $error_types = E_ALL | E_STRICT ) 值得留意的是,即使注冊了錯誤處理函數(shù),默認的行為仍舊會執(zhí)行,也就是錯誤消失時,仍舊會輸出錯誤信息,所以需要在程序中顯示的將錯誤級別設置為0,然后在注冊自己的的錯誤處理函數(shù)。這種方式,在生產(chǎn)環(huán)境下,尤其重要,由于即

10、時出錯,敏感內(nèi)部錯誤信息也不會暴露給潛在的惡意用戶。還有很重要的一點需要指出,自定義錯誤處理函數(shù)不能處理fatal error(比如編譯錯誤)。下面是一個用法自定義錯誤處理函數(shù)的列子: ?php error_reporting (0); function error_handler ($error_level, $error_message, $file, $line) $EXIT = FALSE; switch ($error_level) case E_NOTICE: case E_USER_NOTICE: $error_type = Notice; break; case E_WARNI

11、NG: case E_USER_WARNING: $error_type = Warning; break; case E_ERROR: case E_USER_ERROR: $error_type = Fatal Error; $EXIT = TRUE; break; default: $error_type = Unknown; $EXIT = TRUE; break; printf (%s: %s in %s on line %dn, $error_type, $error_message, $file, $line); if ($EXIT) die(); set_error_handler (error_handler); /new NonExist(); echo $novar; echo 3/0; trigger_error (Trigger a fatal error, E_USER_ERROR); new NonExist(); ? 執(zhí)行此腳本可以得到下面的輸出: Notice: Undefined variable: novar in /your/php_demo_file.php on line 40 Warning: Division by zero in /your/php_demo_file.php on line 41 Fatal E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論