亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP的全局錯誤處理詳解

2024-05-04 23:45:13
字體:
來源:轉載
供稿:網友
php自有try{throw{}}catch{}異常/錯誤捕獲系統,難以在生產環境中運用;生產環境中,我們一般要求,一旦出現異常/錯誤,php立刻結束腳本,向訪客瀏覽器輸出出錯提示,并通過自定義函數向管理員發送消息
 

本文目的

PHP的全局錯誤處理,在開發項目的時候很有用,可以幫助開發者快速定位一些問題,提高工作效率。默認情況下,全局錯誤會直接輸出,但是最近開發時使用的一個框架庫對全局錯誤處理進行了設定,導致很多錯誤信息沒有輸出,在定位問題上有一定的耗時。所以,研究了一下此庫的實現,發現它設定了error_reporting和set_error_handler,導致此現象?,F在記錄一下這兩個函數的用法,作為備忘錄。

背景

PHP沒有類型檢測,開發人員比較容易輸入錯誤單詞,引起致命錯誤,最終導致腳本停止執行。如果這個時候,沒有得到任何錯誤消息,那么會是一件很痛苦的事情。你不得不從腳本的第一行代碼開始調試,在成千上萬行的代碼中不斷的print或者echo,直到定位到這個輸錯的單詞。然后,有不得不原路返回,將先前添加的print或echo全部刪除。這時一件及其枯燥乏味的工作。

一般情況

正常情況下,php會將致命錯誤直接輸出,會將錯誤的出處(文件地址,行號)和原因等輸出,這樣,開發著可以很方便的定位到問題。

但是有些時候,可能由于php.ini的設置問題,可能是第三方框架配置的問題,導致這些信息沒有輸出,那么此時,必須學會自己設置相關參數,輸出這些錯誤信息,幫助快速定位問題。

error_reporting

error_reporting是一個php的全局配置參數,在php.ini中。用于配置錯誤輸出級別,參數是比特位,可以用來設置錯誤輸出的級別,下面是從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 (doesn't include E_STRICT); E_ERROR - fatal run-time errors; E_RECOVERABLE_ERROR - almost fatal run-time errors; 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 it's possible that it was; intentional (e.g., using an uninitialized variable and; relying on the fact it's automatically 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 PHP's initial startup; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's; 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-generated 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_RECOVERABLE_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標準函數中提供了名稱相同的函數error_reporting(int $level),用于在php腳本中,完成同樣的功能。這樣將不會影響其他程序。值得注意的是,$level為0的時候是關閉錯誤輸出,也就是任何錯誤都不會輸出。

set_error_handler

php的默認錯誤處理是將消息輸出。但是,有時候需要定義一些其他操作,這時就需要自定義錯誤處理函數。php提供內置函數set_error_handler可以幫助我們注冊自己的錯誤處理函數。函數原型如下:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

值得注意的是,即使注冊了錯誤處理函數,默認的行為仍然會執行,也就是錯誤出現時,仍然會輸出錯誤信息,所以需要在程序中顯示的將錯誤級別設置為0,然后在注冊自己的的錯誤處理函數。這種方式,在生產環境下,尤其重要,因為即時出錯,敏感內部錯誤信息也不會暴露給潛在的惡意用戶。還有很重要的一點需要指出,自定義錯誤處理函數不能處理fatal error(比如編譯錯誤)。下面是一個使用自定義錯誤處理函數的列子:

<?phperror_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_WARNING:    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 %d/n", $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();?>

執行此腳本可以得到下面的輸出:

Notice: Undefined variable: novar in /your/php_demo_file.php on line 40Warning: Division by zero in /your/php_demo_file.php on line 41Fatal Error: Trigger a fatal error in /your/php_demo_file.php on line 42

可以看到,最后的“new NoExistClass()”的異常,沒有被自定義的錯誤處理函數捕獲。

最后,捎帶提一下,set_exception_handler注冊頂層的異常處理,在web一用中,可以設定一下,然后統一的跳轉到錯誤處理頁面。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文在线不卡视频| 4k岛国日韩精品**专区| 欧美国产日本在线| 国产日韩欧美在线观看| 亚洲视频网站在线观看| 亚洲欧美国产一区二区三区| 亚洲第一av网| 粉嫩老牛aⅴ一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久艹在线视频| 久久亚洲综合国产精品99麻豆精品福利| 一区二区福利视频| 91欧美激情另类亚洲| 少妇久久久久久| 国产精品69精品一区二区三区| 久久久最新网址| 久久福利网址导航| 日韩免费在线观看视频| 最近日韩中文字幕中文| 国产一区玩具在线观看| 欧美激情视频在线观看| 国产不卡在线观看| 国产91ⅴ在线精品免费观看| 91免费综合在线| 91在线观看免费高清| 精品国产户外野外| 日韩精品视频在线| 久久久久久久久久久av| 国产精品美乳一区二区免费| 色天天综合狠狠色| 欧美精品videossex性护士| 亚洲美女精品成人在线视频| 国产视频精品va久久久久久| 91在线|亚洲| 亚洲综合成人婷婷小说| 国产精品福利片| 亚洲综合中文字幕68页| 欧美裸体xxxx极品少妇| 欧美性xxxx极品高清hd直播| 国产精品久久久| 日韩成人性视频| 国产丝袜视频一区| 亚洲影院色在线观看免费| 国产精品亚发布| 亚洲成人精品av| 91精品国产高清久久久久久久久| 亚洲自拍偷拍色图| 国产精品jvid在线观看蜜臀| 日韩精品视频在线免费观看| 久久久国产影院| 欧美专区在线视频| 国产成人精品网站| 国产精品久久久久国产a级| 日韩欧美国产一区二区| 欧美精品久久久久| 神马久久桃色视频| 国产精品亚洲一区二区三区| 欧美激情精品久久久久久黑人| 亚洲成人av在线| 久久久久国产视频| 亚洲区中文字幕| 亚洲美腿欧美激情另类| 国模精品一区二区三区色天香| 久久精品国产99国产精品澳门| 国产成人综合久久| 精品视频在线播放色网色视频| 国产成人综合一区二区三区| 亚洲国产精品久久久久久| 欧美国产亚洲视频| 欧美极品美女电影一区| 成人福利在线观看| 中文字幕亚洲图片| 美女久久久久久久久久久| 欧美色视频日本高清在线观看| 最近日韩中文字幕中文| 按摩亚洲人久久| 亚州av一区二区| 亚洲人午夜精品免费| 日韩av免费观影| 国产精品福利在线| 亚洲一区二区免费在线| 欧美中文字幕在线播放| 久久精品国产精品| 亚洲区一区二区| 日韩经典中文字幕| 成人午夜在线影院| 国产成人精彩在线视频九色| 色婷婷成人综合| 欧美极品美女视频网站在线观看免费| 欧美自拍视频在线观看| 亚洲成年人在线| 97久久精品人人澡人人爽缅北| 欧美大奶子在线| 久久久久久尹人网香蕉| 成人午夜在线观看| 国产精品一区二区3区| 久久久综合免费视频| 色悠久久久久综合先锋影音下载| 久久91亚洲人成电影网站| 青青草成人在线| 国产精品视频网址| 国产精品一区二区av影院萌芽| 亚洲一区二区久久久久久久| 91亚洲国产成人久久精品网站| 国产精品美女主播| 日本精品视频在线播放| 亚州国产精品久久久| 中文字幕日韩欧美在线视频| 久久影院资源站| 成人在线观看视频网站| 国产日韩精品一区二区| 国产91九色视频| 欧美日韩国产一区二区三区| 日韩免费观看网站| 久久精品国产清自在天天线| 欧美国产乱视频| 亚洲人成电影网| 久久99久久99精品中文字幕| 国产成人aa精品一区在线播放| 欧美精品久久久久久久免费观看| 国产精品高清免费在线观看| 久久影视电视剧免费网站| 亚洲最大的免费| 国产69精品久久久久久| 日韩av在线免费看| 在线观看久久久久久| 亚洲综合中文字幕68页| 午夜精品久久久久久久男人的天堂| 国产xxx69麻豆国语对白| 亚洲精品黄网在线观看| 亚洲成人在线视频播放| 亚洲高清免费观看高清完整版| 日韩在线观看免费高清完整版| 午夜精品久久久久久99热| 98视频在线噜噜噜国产| 欧美日韩一区二区免费在线观看| zzijzzij亚洲日本成熟少妇| 高清在线视频日韩欧美| 亚洲深夜福利在线| 欧美怡红院视频一区二区三区| 日韩av免费一区| 亚洲色图欧美制服丝袜另类第一页| 国内成人精品视频| 久久久精品一区二区| 亚洲欧美自拍一区| 国产欧美日韩精品丝袜高跟鞋| 亚洲欧洲美洲在线综合| 欧美老女人www| 欧美日本高清视频| 欧美黄色性视频| 91高清在线免费观看| 成人天堂噜噜噜| 一区二区三区动漫| 精品免费在线观看| 欧美国产日本在线| 国产91露脸中文字幕在线| 日韩大陆欧美高清视频区| 免费97视频在线精品国自产拍| 国产激情综合五月久久| 国产91精品久久久久久久| 91免费看片网站| 性色av香蕉一区二区| 日韩精品一二三四区| 欧美日产国产成人免费图片|