国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP錯(cuò)誤處理方法總結(jié)

2024-05-04 21:48:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在php中錯(cuò)誤處理的方法有很多,特別是到了php5之后還提供了專(zhuān)門(mén)的php處理類(lèi),下面我收藏了關(guān)于PHP錯(cuò)誤處理一些方法與程序分享給大家.

在程序中直接判斷,基本的錯(cuò)誤處理:使用 die() 函數(shù),第一個(gè)例子展示了一個(gè)打開(kāi)文本文件的簡(jiǎn)單腳本,代碼如下:

  1. <?php 
  2. $file=fopen("welcome.txt","r"); 
  3. ?> 

如果文件不存在,您會(huì)獲得類(lèi)似這樣的錯(cuò)誤:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:webfoldertest.php on line 2

更多詳細(xì)的,代碼如下:

  1. <?php 
  2.      
  3.     //打開(kāi)一個(gè)文件 未做任何處理 
  4.     //$fp =fopen("aa.txt","r"); 
  5.     //echo "OK"; 
  6.  
  7.     //處理:判斷文件是否存在 file_exists 
  8. /* 
  9.     if(!file_exists("aa.txt")){ 
  10.         echo "文件不存在"; 
  11.         //不存在就退出 
  12.         exit();  //退出后,下面面的代碼就不執(zhí)行了 
  13.     }else{ 
  14.         $fp =fopen("aa.txt","r"); 
  15.         //...操作完之后 關(guān)閉 
  16.         fclose($fp); 
  17.  
  18.     } 
  19.  
  20.     echo "OK"; 
  21. */ 
  22.     //PHP處理錯(cuò)誤的3種方法 
  23.  
  24.     //第一種:使用簡(jiǎn)單的die語(yǔ)句 
  25.  
  26. /*    if(!file_exists("aa.txt")){ 
  27.      
  28.         die("文件不存在。。。"); //不存在就直接退出 
  29.     }else{//開(kāi)源代碼Vevb.com 
  30.         $fp =fopen("aa.txt","r"); 
  31.         //...操作完之后 關(guān)閉 
  32.         fclose($fp); 
  33.  
  34.     } 
  35.  
  36.     echo "OK"; 
  37. */ 
  38.     //更簡(jiǎn)單的方式 
  39.     file_exists("aa.txt"or die("文件不存在"); 
  40.  
  41.  
  42. ?> 

第二種:錯(cuò)誤處理器 錯(cuò)誤級(jí)別 處理錯(cuò)誤方式,代碼如下:

  1. <?php 
  2.  
  3.     // 
  4.     /* 
  5.     使用error_function(error_level,error_message, 
  6.     error_file,error_line,error_context) 
  7.     該函數(shù)必須有能力處理至少兩個(gè)參數(shù) (error level 和 error message), 
  8.     但是可以接受最多五個(gè)參數(shù)(可選的:file, line-number 以及 error context): 
  9.  
  10.     */ 
  11.  
  12.     //改寫(xiě)set_error_handler方法 
  13.     //如果出現(xiàn) E_WARNING 這個(gè)錯(cuò)誤就調(diào)用my_error 處理方法 
  14.     set_error_handler("my_error",E_WARNING); 
  15.     set_error_handler("my_error2",E_USER_ERROR); 
  16.     //設(shè)置中國(guó)對(duì)應(yīng)的時(shí)區(qū) 
  17.     date_default_timezone_set('PRC'); 
  18.      
  19.     function my_error($errno,$errmes){ 
  20.          
  21.         echo "<font size='5' color='red' >$errno</font>"//輸出錯(cuò)誤報(bào)告級(jí)別 
  22.         echo "錯(cuò)誤信息是:".$errmes
  23.         exit(); 
  24.     } 
  25.  
  26.     function my_error2($errno,$errmes){ 
  27.          
  28.         //echo "錯(cuò)誤信息是:".$errno,$errmes; 
  29.         //exit(); 
  30.         //把錯(cuò)誤信息輸入到文本中保存已備查看 使用到error_log()函數(shù) 
  31.         $message ="錯(cuò)誤信息是:".$errno." ".$errmes
  32.         error_log(date("Y-m-d G:i:s")."---".$message."rn",3,"myerror.txt"); // rn 表示換行 
  33.     } 
  34.  
  35.     //打開(kāi)一個(gè)文件 未做任何處理 
  36.  
  37.     //$fp =fopen("aa.txt","r"); 
  38.     //echo "OK"; 
  39.  
  40.     //使用自定義錯(cuò)誤 要添加觸發(fā)器 這個(gè)trigger_error()函數(shù)來(lái)指定調(diào)用自定義的錯(cuò)誤 
  41.     $age=200; 
  42.     if($age>150){ 
  43.         //echo "年齡過(guò)大"; 
  44.         //調(diào)用觸發(fā)器 同時(shí)指定錯(cuò)誤級(jí)別 這里需要查看幫助文檔 
  45.         trigger_error("不好了出大問(wèn)題了",E_USER_ERROR); 
  46.         //exit(); 
  47.     } 
  48. ?> 

PHP 異常處理,PHP 5 提供了一種新的面向?qū)ο蟮腻e(cuò)誤處理方法

如果異常沒(méi)有被捕獲,而且又沒(méi)用使用 set_exception_handler() 作相應(yīng)的處理的話,那么將發(fā)生一個(gè)嚴(yán)重的錯(cuò)誤(致命錯(cuò)誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯(cuò)誤消息.

讓我們嘗試拋出一個(gè)異常,同時(shí)不去捕獲它,代碼如下:

  1. <?php 
  2. //create function with an exception 
  3. function checkNum($number
  4.  { 
  5.  if($number>1) 
  6.   { 
  7.   throw new Exception("Value must be 1 or below"); 
  8.   } 
  9.  return true; 
  10.  } 
  11.  
  12. //trigger exception 
  13. checkNum(2); 
  14. ?> 

上面的代碼會(huì)獲得類(lèi)似這樣的一個(gè)錯(cuò)誤:

Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in C:webfoldertest.php:6 Stack trace: #0 C:webfoldertest.php(12): checkNum(28) #1 {main} thrown in C:webfoldertest.php on line 6Try, throw 和 catch

要避免上面例子出現(xiàn)的錯(cuò)誤,我們需要?jiǎng)?chuàng)建適當(dāng)?shù)拇a來(lái)處理異常.

處理處理程序應(yīng)當(dāng)包括:

1.Try - 使用異常的函數(shù)應(yīng)該位于 "try" 代碼塊內(nèi),如果沒(méi)有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行,但是如果異常被觸發(fā),會(huì)拋出一個(gè)異常。

2.Throw - 這里規(guī)定如何觸發(fā)異常,每一個(gè) "throw" 必須對(duì)應(yīng)至少一個(gè) "catch"

3.Catch - "catch" 代碼塊會(huì)捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對(duì)象.

讓我們觸發(fā)一個(gè)異常,代碼如下:

  1. <?php 
  2. //創(chuàng)建可拋出一個(gè)異常的函數(shù) 
  3. function checkNum($number
  4.  { 
  5.  if($number>1) 
  6.   { 
  7.   throw new Exception("Value must be 1 or below"); 
  8.   } 
  9.  return true; 
  10.  } 
  11.  
  12. //在 "try" 代碼塊中觸發(fā)異常 
  13. try 
  14.  { 
  15.  checkNum(2); 
  16.  //If the exception is thrown, this text will not be shown 
  17.  echo 'If you see this, the number is 1 or below'
  18.  } 
  19.  
  20. //捕獲異常 
  21. catch(Exception $e
  22.  { 
  23.  echo 'Message: ' .$e->getMessage(); 
  24.  } 
  25. ?> 

上面代碼將獲得類(lèi)似這樣一個(gè)錯(cuò)誤:Message: Value must be 1 or below

創(chuàng)建一個(gè)自定義的 Exception 類(lèi),創(chuàng)建自定義的異常處理程序非常簡(jiǎn)單,我們簡(jiǎn)單地創(chuàng)建了一個(gè)專(zhuān)門(mén)的類(lèi),當(dāng) PHP 中發(fā)生異常時(shí),可調(diào)用其函數(shù),該類(lèi)必須是 exception 類(lèi)的一個(gè)擴(kuò)展.

這個(gè)自定義的 exception 類(lèi)繼承了 PHP 的 exception 類(lèi)的所有屬性,您可向其添加自定義的函數(shù).

我們開(kāi)始創(chuàng)建 exception 類(lèi),代碼如下:

  1. <?php 
  2. class customException extends Exception 
  3.  { 
  4.  public function errorMessage() 
  5.   { 
  6.   //error message 
  7.   $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() 
  8.   .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'
  9.   return $errorMsg
  10.   } 
  11.  } 
  12.  
  13. $email = "someone@example...com"
  14.  
  15. try 
  16.  { 
  17.  //check if  
  18.  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
  19.   { 
  20.   //throw exception if email is not valid 
  21.   throw new customException($email); 
  22.   } 
  23.  } 
  24.  
  25. catch (customException $e
  26.  { 
  27.  //display custom message 
  28.  echo $e->errorMessage(); 
  29.  } 
  30. ?> 

這個(gè)新的類(lèi)是舊的 exception 類(lèi)的副本,外加 errorMessage() 函數(shù),正因?yàn)樗桥f類(lèi)的副本,因此它從舊類(lèi)繼承了屬性和方法,我們可以使用 exception 類(lèi)的方法,比如 getLine() 、 getFile() 以及 getMessage().

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 双辽市| 明光市| 灵璧县| 玛多县| 忻城县| 青海省| 高雄县| 伊宁县| 怀宁县| 肃北| 习水县| 河南省| 民丰县| 社旗县| 汶上县| 渝北区| 米泉市| 若羌县| 张家口市| 沈丘县| 上高县| 黄梅县| 嘉善县| 土默特右旗| 仲巴县| 察隅县| 玉树县| 柘荣县| 江津市| 乐亭县| 仪陇县| 长子县| 邵武市| 广宁县| 罗甸县| 多伦县| 岢岚县| 黄骅市| 特克斯县| 山阳县| 凤冈县|