精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關于PHP的錯誤機制總結

開發 后端
PHP 的錯誤機制也是非常復雜的,做了幾年php,也沒有仔細總結過,現在就補上這一課。

[[189712]]

PHP 的錯誤機制也是非常復雜的,做了幾年php,也沒有仔細總結過,現在就補上這一課。

特別說明:文章的PHP版本使用5.5.32

PHP的錯誤級別

首先需要了解php有哪些錯誤。截至到php5.5,一共有16個錯誤級別

注意:嘗試下面的代碼的時候請確保打開error_log:

  1. error_reporting(E_ALL); 
  2.  
  3. ini_set('display_errors''On');  

E_ERROR

這種錯誤是致命錯誤,會在頁面顯示Fatal Error, 當出現這種錯誤的時候,程序就無法繼續執行下去了

錯誤示例:

  1. // Fatal error: Call to undefined function hpinfo() in /tmp/php/index.php on line 5 
  2.  
  3. hpinfo(); //E_ERROR  

注意,如果有未被捕獲的異常,也是會觸發這個級別的。

  1. // Fatal error: Uncaught exception 'Exception' with message 'test exception' in /tmp/php/index.php:5 Stack trace: #0 {main} thrown in /tmp/php/index.php on line 5 
  2.  
  3. throw new Exception("test exception");  

E_WARNING

這種錯誤只是警告,不會終止腳本,程序還會繼續進行,顯示的錯誤信息是Warning。比如include一個不存在的文件。 

  1. //Warning: include(a.php): failed to open stream: No such file or directory in /tmp/php/index.php on line 7 
  2.  
  3. //Warning: include(): Failed opening 'a.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php'in /tmp/php/index.php on line 7 
  4.  
  5. include("a.php"); //E_WARNING  

E_NOTICE

這種錯誤程度更為輕微一些,提示你這個地方不應該這么寫。這個也是運行時錯誤,這個錯誤的代碼可能在其他地方沒有問題,只是在當前上下文情況下出現了問題。

比如$b變量不存在,我們把它賦值給另外一個變量 

  1. //Notice: Undefined variable: b in /tmp/php/index.php on line 9 
  2.  
  3. $a = $b; //E_NOTICE  

E_PARSE

這個錯誤是編譯時候發生的,在編譯期發現語法錯誤,不能進行語法分析。

比如下面的z沒有設置為變量。

  1. // Parse error: syntax error, unexpected '=' in /tmp/php/index.php on line 20 
  2.  
  3. z=1; // E_PARSE  

E_STRICT

這個錯誤是PHP5之后引入的,你的代碼可以運行,但是不是PHP建議的寫法。

比如在函數形參傳遞++符號

  1. // Strict Standards: Only variables should be passed by reference in /tmp/php/index.php on line 17 
  2.  
  3. function change (&$var) { 
  4.  
  5. $var += 10; 
  6.  
  7.  
  8. $var = 1; 
  9.  
  10. change(++$var); 
  11.  
  12. // E_STRICT  

E_RECOVERABLE_ERROR

這個級別其實是ERROR級別的,但是它是期望被捕獲的,如果沒有被錯誤處理捕獲,表現和E_ERROR是一樣的。

經常出現在形參定義了類型,但調用的時候傳入了錯誤類型。它的錯誤提醒也比E_ERROR的fatal error前面多了一個Catachable的字樣。

  1. //Catchable fatal error: Argument 1 passed to testCall() must be an instance of A, instance of B given, called in /tmp/php/index.php on line 37 and defined in /tmp/php/index.php on line 33 
  2.  
  3. class A { 
  4.  
  5.  
  6. class B { 
  7.  
  8.  
  9. function testCall(A $a) { 
  10.  
  11.  
  12. $b = new B(); 
  13.  
  14. testCall($b);  

E_DEPRECATED

這個錯誤表示你用了一個舊版本的函數,而這個函數后期版本可能被禁用或者不維護了。

比如curl的CURLOPT_POSTFIELDS使用@FILENAME來上傳文件的方法

  1. // Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in /tmp/php/index.php on line 42 
  2.  
  3. $ch = curl_init("http://www.remotesite.com/upload.php"); 
  4.  
  5. curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'"test"));  

E_CORE_ERROR, E_CORE_WARNING

這兩個錯誤是由PHP的引擎產生的,在PHP初始化過程中發生。

E_COMPILE_ERROR, E_COMPILE_WARNING

這兩個錯誤是由PHP引擎產生的,在編譯過程中發生。

E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED,

這些錯誤都是用戶制造的,使用trigger_error,這里就相當于一個口子給用戶觸發出各種錯誤類型。這個是一個很好逃避try catch異常的方式。

  1. trigger_error("Cannot divide by zero", E_USER_ERROR); 
  2.  
  3. // E_USER_ERROR 
  4.  
  5. // E_USER_WARING 
  6.  
  7. // E_USER_NOTICE 
  8.  
  9. // E_USER_DEPRECATED  

E_ALL

E_STRICT出外的所有錯誤和警告信息。

錯誤控制

php中有很多配置和參數是可以控制錯誤,以及錯誤的日志顯示的。***步,我們需要了解的是php中的有關錯誤的配置有哪些?

我們按照php+php-fpm的模型來說,會影響php錯誤顯示的其實是有兩個配置文件,一個是php本身的配置文件php.ini,另外一個是php-fpm的配置文件,php-fpm.conf。

php.ini中的配置

  1. error_reporting = E_ALL // 報告錯誤級別,什么級別的 
  2.  
  3. error_log = /tmp/php_errors.log // php中的錯誤顯示的日志位置 
  4.  
  5. display_errors = On // 是否把錯誤展示在輸出上,這個輸出可能是頁面,也可能是stdout 
  6.  
  7. display_startup_errors = On // 是否把啟動過程的錯誤信息顯示在頁面上,記得上面說的有幾個Core類型的錯誤是啟動時候發生的,這個就是控制這些錯誤是否顯示頁面的。 
  8.  
  9. log_errors = On // 是否要記錄錯誤日志 
  10.  
  11. log_errors_max_len = 1024 // 錯誤日志的***長度 
  12.  
  13. ignore_repeated_errors = Off // 是否忽略重復的錯誤 
  14.  
  15. track_errors = Off // 是否使用全局變量$php_errormsg來記錄***一個錯誤 
  16.  
  17. xmlrpc_errors = 0 //是否使用XML-RPC的錯誤信息格式記錄錯誤 
  18.  
  19. xmlrpc_error_number = 0 // 用作 XML-RPC faultCode 元素的值。 
  20.  
  21. html_errors = On // 是否把輸出中的函數等信息變為HTML鏈接 
  22.  
  23. docref_root = http://manual/en/ // 如果html_errors開啟了,這個鏈接的根路徑是什么 
  24.  
  25. fastcgi.logging = 0 // 是否把php錯誤拋出到fastcgi中 

 

我們經常會被問到,error_reporting和display_errors有什么區別呢?這兩個函數是完全不一樣的。

PHP默認是會在日志和標準輸出(如果是fpm模式標準輸出就是頁面)

error_reporting的參數是錯誤級別。表示什么樣子的級別才應該觸發錯誤。如果我們告訴PHP,所有錯誤級別都不需要觸發錯誤,那么,不管是日志,還是頁面,都不會顯示這個錯誤,就相當于什么都沒有發生。

display_errors是控制是否要在標準輸出展示錯誤信息

log_errors則是控制是否要在日志中記錄錯誤信息。

error_log是顯示錯誤日志的位置,這個在php-fpm中往往會被重寫,于是往往會發現的是cli和fpm的錯誤日志竟然不是在同一個文件中。

ignore_repeated_errors這個標記控制的是如果有重復的日志,那么就只會記錄一條,比如下面的程序:

  1. error_reporting(E_ALL); 
  2.  
  3. ini_set('ignore_repeated_errors', 1); 
  4.  
  5. ini_set('ignore_repeated_source', 1); 
  6.  
  7. $a = $c; $a = $c; //E_NOTICE 
  8.  
  9. //Notice: Undefined variable: c in /tmp/php/index.php on line 20 

 

本來會出現兩次NOTICE的,但是現在,只會出現一次了…

track_errors開啟會把***一個錯誤信息存儲到變量里面去,這個可能在對記日志的時候會有一些用處吧。不過我覺得真是沒啥用…

html_errors 和 docref_root 兩個是個挺有人性化的配置,配置了這兩個參數以后,我們返回的錯誤信息中如果有一些在文檔中有的信息,就會變成鏈接形式。

  1. error_reporting(E_ALL); 
  2.  
  3. ini_set('html_errors', 1); 
  4.  
  5. ini_set('docref_root'"https://secure.php.net/manual/zh/"); 
  6.  
  7. include("a2.php"); //E_WARNING  

能讓你快速定位到我們出現錯誤的地方。是不是很人性~

php-fpm中的配置

  1. error_log = /var/log/php-fpm/error.log // php-fpm自身的日志 
  2.  
  3. log_level = notice // php-fpm自身的日志記錄級別 
  4.  
  5. php_flag[display_errors] = off // 覆蓋php.ini中的某個配置變量,可被程序中的ini_set覆蓋 
  6.  
  7. php_value[display_errors] = off // 同php_flag 
  8.  
  9. php_admin_value[error_log] = /tmp/www-error.log // 覆蓋php.ini中的某個配置變量,不可被程序中的ini_set覆蓋 
  10.  
  11. php_admin_flag[log_errors] = on // 同php_admin_value 
  12.  
  13. catch_workers_output = yes // 是否抓取fpmworker的輸出 
  14.  
  15. request_slowlog_timeout = 0 // 慢日志時長 
  16.  
  17. slowlog = /var/log/php-fpm/www-slow.log // 慢日志記錄  

php-fpm的配置中也有一個error_log配置,這個很經常會和php.ini中的error_log配置弄混。但他們記錄的東西是不一樣的,php-fpm的error_log只記錄php-fpm本身的日志,比如fpm啟動,關閉。

而php.ini中的error_log是記錄php程序本身的錯誤日志。

那么在php-fpm中要覆蓋php.ini中的error_log配置,就需要使用到下面幾個函數:

  • php_flag
  • php_value
  • php_admin_flag
  • php_admin_value

這四個函數admin的兩個函數說明這個變量設置完之后,不能在代碼中使用ini_set把這個變量重新賦值了。而php_flag/value就仍然以php代碼中的ini_set為準。

slowlog是fpm記錄的,可以使用request_slowlog_timeout設置判斷慢日志的時長。

總結

我們經常弄混的就是日志問題,以及某些級別的日志為何沒有記錄到日志中。最主要的是要看error_log,display_errors, log_errors這三個配置,只是在看配置的時候,我們還要注意區分php.ini里面的配置是什么,php-fpm.ini里面的配置是什么。

好吧,我覺得弄懂這些配置,基本就沒有php日志記錄不了的WTF的問題了。 

責任編輯:龐桂玉 來源: 程序源
相關推薦

2018-08-16 15:00:38

編程語言PHP錯誤機制

2016-12-01 09:57:24

PHP錯誤機制

2015-09-09 10:20:00

php緩存技術

2009-11-18 18:24:26

PHP模板

2009-12-09 13:11:03

PHP框架常見錯誤

2009-11-18 11:30:26

PHP數組排序

2009-11-23 15:22:16

2015-10-09 13:54:14

切面編程錯誤處理機制

2010-08-05 13:58:33

NFS故障

2009-11-23 17:56:44

PHP緩存機制

2024-08-13 15:46:57

2013-07-03 11:28:47

2009-11-27 11:19:11

PHP打印函數

2018-07-12 11:44:38

數據庫MySQL變量分類

2017-10-23 14:14:26

HadoopHadoop HAQJM

2011-07-10 00:02:39

PHP

2011-08-24 16:59:59

LuaModule

2009-11-09 17:55:13

WCF緩存

2009-12-01 12:50:21

PHP字符處理函數

2009-12-01 18:47:19

PHP代碼轉義
點贊
收藏

51CTO技術棧公眾號

成人精品久久av网站| 亚洲精品在线电影| 天天在线免费视频| 天天干视频在线观看| 日韩不卡一区二区三区| 久久成人在线视频| 亚洲精品成人无码熟妇在线| 狠狠久久综合| 亚洲成人一区二区| 性欧美大战久久久久久久免费观看 | 久久成人一区二区| 国产熟妇久久777777| 欧美第一在线视频| 欧美最猛黑人xxxxx猛交| 奇米777四色影视在线看| 国产中文字幕在线视频| 风流少妇一区二区| 国产欧美在线播放| 亚洲婷婷综合网| 韩国欧美一区| 久久精品国产亚洲精品2020| 一卡二卡三卡四卡| av男人一区| 宅男在线国产精品| 三级a在线观看| 牛牛精品一区二区| 亚洲综合色区另类av| 在线一区亚洲| 国产视频在线看| 91在线国产福利| 超碰97在线资源| 国产乱叫456在线| 欧美亚洲免费| 69视频在线播放| 久久午夜无码鲁丝片午夜精品| 99成人在线视频| 国产亚洲一区二区精品| 四虎影成人精品a片| 精品少妇一区| 亚洲的天堂在线中文字幕| 永久av免费在线观看| 亚洲欧美专区| 欧美日韩免费一区二区三区 | 久久婷婷综合国产| 中文精品久久| 欧美精品免费在线观看| 成人午夜免费影院| 日韩欧美三级| 日韩在线中文字| 美女三级黄色片| 五月天久久网站| 久久久黄色av| 男女免费视频网站| 自拍日韩欧美| 欧美黑人一区二区三区| 久久国产一级片| 亚洲国产国产亚洲一二三| 欧美精品久久久久久久久| 激情视频在线播放| 在线看片一区| 97视频色精品| 日韩熟女一区二区| 日韩福利电影在线| 国产自摸综合网| 国产偷人妻精品一区二区在线| 韩国成人精品a∨在线观看| 91牛牛免费视频| 精品国自产拍在线观看| 成人avav在线| 日韩精品久久久免费观看| www亚洲人| 亚洲精品视频一区二区| 中文字幕一区二区三区四区五区| caoporm免费视频在线| 亚洲一区二区欧美| 国产av无码专区亚洲精品| 国产极品嫩模在线观看91精品| 欧美日韩三级一区二区| 精品人妻一区二区三| julia中文字幕一区二区99在线| 日韩精品欧美激情| 亚洲天堂av中文字幕| 欧美一区亚洲| 欧美在线一区二区三区四| 日本熟妇一区二区三区| 韩国一区二区在线观看| 久久99九九| 国产激情在线| 欧美视频在线观看免费| 九九九九九国产| 女同一区二区三区| 久久精品国产清自在天天线 | 久久av最新网址| 成人免费午夜电影| 伦理片一区二区三区| 亚洲欧美日韩小说| 无码aⅴ精品一区二区三区浪潮| 国产原创一区| 亚洲精品在线看| 紧身裙女教师波多野结衣| 国产精品毛片在线| 亚洲999一在线观看www| 成在在线免费视频| 亚洲国产一二三| 成人黄色一级大片| 久久av综合| 久久久亚洲精选| 中文字幕第315页| av电影一区二区| 懂色av粉嫩av蜜臀av| 伊人久久综合一区二区| 日韩女同互慰一区二区| 中国美女黄色一级片| 国产模特精品视频久久久久| 91手机在线播放| 秋霞a级毛片在线看| 日韩欧美精品网址| 催眠调教后宫乱淫校园| 欧美激情在线| 91视频-88av| 在线看黄色av| 欧美影院一区二区三区| 波多野结衣av在线免费观看| 黑人一区二区| 国产91色在线|亚洲| 麻豆影院在线观看| 欧美日韩国产美| 一级二级黄色片| 久久裸体视频| 欧美日韩亚洲一区二区三区在线观看 | 高h震动喷水双性1v1| 最新国产成人在线观看| 一区二区三区视频网| 国产探花在线精品| 欧美在线国产精品| 神马一区二区三区| 午夜视黄欧洲亚洲| 大桥未久恸哭の女教师| 亚洲国产高清一区二区三区| 国产精品中出一区二区三区| 白白色在线观看| 日韩免费观看高清完整版 | 欧美~级网站不卡| 国产欧美日韩高清| av免费观看一区二区| 色噜噜狠狠成人中文综合| 国产特黄级aaaaa片免| 国产日韩欧美高清免费| 久久免费99精品久久久久久| av中文在线资源库| 亚洲成在人线av| 久久精品美女视频| 成人国产一区二区三区精品| 国产精品自拍合集| 给我免费播放日韩视频| 久久久人成影片一区二区三区观看 | 亚洲国产精品久久91精品| 青青草偷拍视频| 国产.精品.日韩.另类.中文.在线.播放| 青青青在线观看视频| japanese色系久久精品| 2021国产精品视频| 欧美美女色图| 欧美午夜精品电影| 欧美激情精品久久久久久免费| 久久99热99| 日韩精品手机在线观看| av成人男女| 日韩美女在线播放| www.黄在线观看| 日韩一区二区高清| 日本熟女一区二区| 久久夜色精品国产噜噜av| 欧美伦理视频在线观看| 欧美r级电影| 成人午夜电影免费在线观看| 18aaaa精品欧美大片h| 亚洲精品小视频| 国产精品无码天天爽视频| 一区二区三区不卡视频| 一二三不卡视频| 久久99久久精品欧美| 男女裸体影院高潮| 香蕉国产成人午夜av影院| 国产精品第一视频| 中文字幕免费高清电视剧网站在线观看 | 国内精久久久久久久久久人| 黄色片在线看| 91精品欧美一区二区三区综合在| 国产主播在线播放| 国产亚洲一区二区在线观看| 国产成人强伦免费视频网站| 国产日韩欧美一区二区三区在线观看| 水蜜桃亚洲精品| 伊人久久影院| 国产精品成av人在线视午夜片 | 男女av在线| 日韩一区二区三区四区| 69亚洲精品久久久蜜桃小说| 亚洲精品国产一区二区三区四区在线| 艳妇乳肉亭妇荡乳av| 国内不卡的二区三区中文字幕| 国产精品无码av在线播放| 色综合色综合| 精品视频一区二区三区四区| 青青久久精品| 欧美一级在线播放| 啪啪免费视频一区| 中文字幕精品一区久久久久 | 婷婷精品久久久久久久久久不卡| 777午夜精品福利在线观看| 免费黄网站在线播放| 亚洲欧美在线看| 亚洲第一免费视频| 欧美日韩精品综合在线| 丁香六月婷婷综合| 亚洲韩国精品一区| 91精品一区二区三区蜜桃| 久久久久久久精| 中文字幕免费高清视频| 国产一区999| 男女污污的视频| 国产精品毛片在线| 亚洲人成无码网站久久99热国产| 99久久精品费精品国产风间由美| 麻豆av一区二区| 第四色中文综合网| 96pao国产成视频永久免费| 国产经典一区| 国产精品视频免费在线观看| 少妇在线看www| 午夜精品久久久久久久久久久久 | 成人女性视频| 日本不卡久久| 免费观看久久av| 久久精品美女| 精品国内亚洲2022精品成人| 国产精品一区二区三区免费| 一区二区中文字幕在线观看| 99九九电视剧免费观看| 精品一区二区三区中文字幕在线| 成人免费淫片aa视频免费| 欧美成人福利| 91九色国产在线| 欧美成人黄色| 国产日韩欧美夫妻视频在线观看| 素人啪啪色综合| 国产精品欧美日韩久久| 91精品美女| 国产日本欧美一区| 国产亚洲观看| 亚洲最大av网| 99精品中文字幕在线不卡| 国产福利久久精品| 国内精品偷拍| 欧美高清性xxxxhdvideosex| 蜜桃国内精品久久久久软件9| 免费一区二区三区在在线视频| 欧美成人一区在线观看| 免费精品视频一区| gogogo高清在线观看一区二区| 日韩福利视频| 午夜片欧美伦| 亚洲精品国产suv一区88| 影音先锋久久| 久久久免费视频网站| 蜜臀精品久久久久久蜜臀| 三上悠亚在线一区| 国产精品18久久久久| youjizz.com日本| 91麻豆精品秘密| 大胸美女被爆操| 亚洲尤物视频在线| 婷婷激情五月网| 欧美亚洲图片小说| 99热这里只有精品1| 精品蜜桃在线看| 国产在线观看精品一区| 日韩中文在线观看| 大黄网站在线观看| 人体精品一二三区| www久久久| 欧美不卡三区| 亚州av乱码久久精品蜜桃| 日本一本中文字幕| 日韩精品一区第一页| 亚洲欧美日韩一二三区| 91丨porny丨国产| 亚洲欧美综合7777色婷婷| 亚洲成人激情av| 中文字幕乱码人妻无码久久| 欧美v亚洲v综合ⅴ国产v| 亚洲人视频在线观看| 久久精品福利视频| 三妻四妾完整版在线观看电视剧 | 欧美黑人狂野猛交老妇| 欧美成人ⅴideosxxxxx| 91麻豆蜜桃| 日韩精品网站| 女人天堂av手机在线| 狠狠久久亚洲欧美| 午夜在线观看一区| 精品久久久视频| 国产片高清在线观看| 亚洲人成五月天| 国产精品186在线观看在线播放| 国产精品视频自在线| 久久久伦理片| 国产欧美123| 麻豆国产精品官网| 在线免费观看成年人视频| 一区二区三区欧美视频| 97国产成人无码精品久久久| 日韩精品在线免费观看视频| 日本小视频在线免费观看| 国产在线观看91精品一区| 天堂在线精品| 国产精品久久中文字幕| 国产剧情一区二区三区| 久久免费手机视频| 91国产免费看| 蜜桃成人在线视频| 97精品国产aⅴ7777| 亚洲精品影片| 日日噜噜夜夜狠狠久久丁香五月| 青青草伊人久久| 色一情一交一乱一区二区三区| 午夜精品福利久久久| 精品国精品国产自在久不卡| 久久精品国产欧美激情| www.久久| 亚洲乱码一区二区三区| 日韩精品欧美精品| a级大片在线观看| 日韩欧美在线观看视频| 亚洲色图 校园春色| 高清欧美一区二区三区| 一区二区三区在线免费看| 国内外成人激情免费视频| 久久成人免费网| 黄色一级片中国| 欧美一级日韩一级| 制服丝袜中文字幕在线| 亚洲最大激情中文字幕| 你懂的国产精品| 永久看看免费大片| 一区二区三区日本| 成人毛片在线免费观看| 欧美国产日本高清在线| 超碰成人福利| 黄色激情在线视频| 成人精品免费看| 九九热国产视频| 亚洲欧美中文字幕在线一区| 天然素人一区二区视频| 亚洲午夜精品一区二区| 九色综合狠狠综合久久| 久热这里有精品| 精品国产乱码久久久久久闺蜜 | 国产精品久久久久av免费| 精品欧美久久| 欧美高清精品一区二区| 亚洲国产精品麻豆| 嫩草在线播放| 国产精品男人爽免费视频1| 91精品啪在线观看国产81旧版| 无套白嫩进入乌克兰美女| 一个色综合av| 日韩av高清在线| 国产美女精彩久久| 亚洲国产精品久久久久蝴蝶传媒| 国偷自产av一区二区三区麻豆| 五月婷婷综合网| 成年人视频网站在线| 9a蜜桃久久久久久免费| 香蕉久久久久久久av网站| 91麻豆精品久久毛片一级| 欧美精品一区二区精品网| 国产不卡网站| 热这里只有精品| av一区二区三区| 中文字幕乱码在线观看| 国内成人精品视频| 色综合蜜月久久综合网| 久久黄色一级视频| 在线视频欧美区| 18视频在线观看网站| 欧美国产二区| 国产一区二区精品久久99| 精品国产一区二区三区四| 久久精品一本久久99精品| 欧美1区2区3区4区| 91精品999| 欧美在线观看一二区| 日韩电影免费观看| 四虎影视永久免费在线观看一区二区三区| 国产精品一卡二| 欧美一级做a爰片免费视频| 欧美激情videos| 色偷偷综合网|