真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

php數(shù)據(jù)異常處理 php異常處理方法

PHP5中的異常處理詳解[1]

    首先是try catch

創(chuàng)新互聯(lián)公司是網站建設專家,致力于互聯(lián)網品牌建設與網絡營銷,專業(yè)領域包括成都網站設計、網站建設、電商網站制作開發(fā)、小程序開發(fā)、微信營銷、系統(tǒng)平臺開發(fā),與其他網站設計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結合了恒基網絡品牌建設經驗和互聯(lián)網整合營銷的理念,并將策略和執(zhí)行緊密結合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網品牌整合方案!

〈?php??? $path = D:\\\\in txt ;??? try //檢測異常??? {??? file_open($path);??? }??? catch(Exception $e) //捕獲異常??? {??? echo $e 〉getMessage();??? }

function file_open($path)??? {??? if(!file_exists($path)) //如果文件無法找到 拋出異常對象??? {??? throw new Exception( 文件無法找到 );??? }

if(!fopen($path r )) //如果文件無法打開 拋出異常對象??? {??? throw new Exception( 文件無法打開 );??? }??? }??? ?〉

注意用$e 〉getMessage()輸出異常信息

輸出異常完整信息

〈?php??? $path = D:\\\\in txt ;

try??? {??? file_open($path); //嘗試打開文件??? }??? catch(Exception $e)??? {??? echo 異常信息 $e 〉getMessage() \\n ; //返回用戶自定義的異常信息??? echo 異常代碼 $e 〉getCode() \\n ; //返回用戶自定義的異常代碼??? echo 文件名 $e 〉getFile() \\n ; //返回發(fā)生異常的PHP程序文件名??? echo 異常代碼所在行 $e 〉getLine() \\n ; //返回發(fā)生異常的代碼所在行的行號??? echo 傳遞路線 ;??? print_r($e 〉getTrace()); //以數(shù)組形式返回跟蹤異常每一步傳遞的路線??? echo $e 〉getTraceAsString(); //返回格式化成字符串的getTrace函數(shù)信息??? }

function file_open($path)??? {??? if(!file_exists($path)) //如果文件不存在 則拋出錯誤??? {??? throw new Exception( 文件無法找到 );??? }

if(!fopen($path r ))??? {??? throw new Exception( 文件無法打開 );??? }??? }??? ?〉

3 擴展異常 即自定義異常

〈?php??? class FileExistsException extends Exception{} //用于處理文件不存在異常的類??? class FileOpenException extends Exception{} //用于處理文件不可讀異常的類

$path = D:\\\\in txt ;

try??? {??? file_open($path);??? }??? catch(FileExistsException $e) //如果產生FileExistsException異常則提示用戶確認文件位置??? {??? echo 程序在運行過程中發(fā)生了異常 $e 〉getMessage() \\n ;??? echo 請確認文件位置 ;??? }??? catch(FileOpenException $e) //如果產生FileOpenException異常則提示用戶確認文件的可讀性??? {??? echo 程序在運行過程中發(fā)生了異常 $e 〉getMessage() \\n ;??? echo 請確認文件的可讀性 ;??? }??? catch(Exception $e)??? {??? echo [未知異常] ;??? echo 異常信息 $e 〉getMessage() \\n ; //返回用戶自定義的異常信息??? echo 異常代碼 $e 〉getCode() \\n ; //返回用戶自定義的異常代碼??? echo 文件名 $e 〉getFile() \\n ; //返回發(fā)生異常的PHP程序文件名??? echo 異常代碼所在行 $e 〉getLine() \\n ; //返回發(fā)生異常的代碼所在行的行號??? echo 傳遞路線 ;??? print_r($e 〉getTrace()); //以數(shù)組形式返回跟蹤異常每一步傳遞的路線??? echo $e 〉getTraceAsString(); //返回格式化成字符串的getTrace函數(shù)信息??? }

function file_open($path)??? {??? if(!file_exists($path))??? {??? throw new FileExistsException( 文件無法找到 ); //拋出FileExistsException異常對象??? }

if(!fopen($path r ))??? {??? throw new FileOpenException( 文件無法打開 ); //拋出FileOpenException異常對象

lishixinzhi/Article/program/PHP/201311/21471

thinkphp前端顯示網絡異常

THINKPHP作為國內比較出色的PHP框架,近年發(fā)展還是比較迅速,目前最新版本已經到TP5.1,安全性能等都有不少提升,使用的程序員也越來越多,所以THINKPHP制作的網站也越來越多,今天,方維網絡就來分析THINKPHP網站打不開的原因有哪些?當你的網站打不開時,方便你排查問題!

一、服務器掛了。如果網站打不開的表現(xiàn)是網絡連接錯誤,沒有輸出任何錯誤信息,那么很可能就是服務器網絡出問題或者服務器死機了。

二、數(shù)據(jù)庫掛了。一般會提示錯誤信息,如果沒有屏蔽錯誤,會直接顯示數(shù)據(jù)庫連接錯誤。

三、網站空間滿了。不管是nginx還是apache,或是THINKPHP本身,都會產生很多日志文件,當硬盤不夠大的時候,THINKPHP無法生成緩存文件,導致網站打不開出錯。這種問題很簡單,就是從服務器刪除占用比較大的日志文件或者對服務器進行擴容。

四、apache、nginx或者是IIS掛了,這個可以進服務器查看,可以重啟下。

五、網站文件被篡改,一般是網站密碼泄露或者網站已經被黑客攻破的情況。這種可以通過FTP軟件查看網站文件的修改日期來判斷。

六、程序本身有問題,如存在死循環(huán)等BUG,這個就需要程序員去調試分析,這種出現(xiàn)概率比較低,因為一般早期就可發(fā)現(xiàn)。

七、訪問量太大,服務器無法應付,這種情況應該升級服務器,或者 使用負載均衡分服務器部署,當然也可以使用一些緩存來緩解。

八、服務器網絡和本地網絡出現(xiàn)故障,如在國內訪問國外服務器的網站,速度非常慢導致網站打不開。

九、服務器放在國外,然后服務器IP被國內屏蔽導致打不開,這種只能換服務器了。

THINKPHP網站打不開的原因很多,但最常見的就是:硬盤已滿或者服務器出故障。

深圳方維網絡專注于網站定制,定制各類品牌官網、商城、平臺、旅游網站和小程序等,歡迎有需求客戶咨詢。

如何處理 PHP 的錯誤與異常

首先要知道什么是PHP異常?

異常(Exception)用于在指定的錯誤發(fā)生時改變腳本的正常流程。

PHP 5 提供了一種新的面向對象的錯誤處理方法。

異常處理用于在指定的錯誤(異常)情況發(fā)生時改變腳本的正常流程。這種情況稱為異常。

當異常被觸發(fā)時,通常會發(fā)生:

當前代碼狀態(tài)被保存

代碼執(zhí)行被切換到預定義的異常處理器函數(shù)

根據(jù)情況,處理器也許會從保存的代碼狀態(tài)重新開始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本

我們將展示不同的錯誤處理方法:

異常的基本使用

創(chuàng)建自定義的異常處理器

多個異常

重新拋出異常

設置頂層異常處理器

異常的基本使用

當異常被拋出時,其后的代碼不會繼續(xù)執(zhí)行,PHP 會嘗試查找匹配的 “catch” 代碼塊。

如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那么將發(fā)生一個嚴重的錯誤(致命錯誤),并且輸出 “Uncaught Exception” (未捕獲異常)的錯誤消息。

讓我們嘗試拋出一個異常,同時不去捕獲它:

復制代碼代碼如下:

?php

//create function with an exceptionfunction

checkNum($number) {

if($number1) {

throw new Exception(”Value must be 1 or below”);

} return true;

}

//trigger

exceptioncheckNum(2);

?

上面的代碼會獲得類似這樣的一個錯誤:

Fatal error: Uncaught exception ‘Exception' with message ‘Value must be 1 or below' in C:\webfolder\test.php:6 Stack trace: #0 C:\webfolder\test.php(12): checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Try, throw 和 catch

要避免上面例子出現(xiàn)的錯誤,我們需要創(chuàng)建適當?shù)拇a來處理異常。

處理處理程序應當包括:

Try - 使用異常的函數(shù)應該位于 “try” 代碼塊內。如果沒有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行。但是如果異常被觸發(fā),會拋出一個異常。

Throw - 這里規(guī)定如何觸發(fā)異常。每一個 “throw” 必須對應至少一個 “catch”

Catch - “catch” 代碼塊會捕獲異常,并創(chuàng)建一個包含異常信息的對象

讓我們觸發(fā)一個異常:

?php//創(chuàng)建可拋出一個異常的函數(shù)function checkNum($number) { if($number1) { throw new Exception(”Value must be 1 or below”); } return true; }//在 “try” 代碼塊中觸發(fā)異常try { checkNum(2); //If the exception is thrown, this text will not be shown echo ‘If you see this, the number is 1 or below'; }//捕獲異常catch(Exception $e) { echo ‘Message: ‘ .$e-getMessage(); }?

上面代碼將獲得類似這樣一個錯誤:

Message: Value must be 1 or below

例子解釋:

上面的代碼拋出了一個異常,并捕獲了它:

創(chuàng)建 checkNum() 函數(shù)。它檢測數(shù)字是否大于 1。如果是,則拋出一個異常。

在 “try” 代碼塊中調用 checkNum() 函數(shù)。

checkNum() 函數(shù)中的異常被拋出

“catch” 代碼塊接收到該異常,并創(chuàng)建一個包含異常信息的對象 ($e)。

通過從這個 exception 對象調用 $e-getMessage(),輸出來自該異常的錯誤消息

不過,為了遵循“每個 throw 必須對應一個 catch”的原則,可以設置一個頂層的異常處理器來處理漏掉的錯誤。

創(chuàng)建一個自定義的 Exception 類

創(chuàng)建自定義的異常處理程序非常簡單。我們簡單地創(chuàng)建了一個專門的類,當 PHP 中發(fā)生異常時,可調用其函數(shù)。該類必須是 exception 類的一個擴展。

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

我們開始創(chuàng)建 exception 類:

復制代碼代碼如下:

?php

class customException extends Exception {

public function errorMessage() {

//error message

$errorMsg = ‘Error on line ‘.$this-getLine().' in ‘.$this-getFile() .': b'.$this-getMessage().'/b is not a valid E-Mail address'; return $errorMsg;

}

}

$email = “someone@example…com”;try {

//check if

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {

//throw exception if email is not valid throw

new customException($email);

}

}catch (customException $e)

{

//display custom message

echo $e-errorMessage();

}?

這個新的類是舊的 exception 類的副本,外加 errorMessage() 函數(shù)。正因為它是舊類的副本,因此它從舊類繼承了屬性和方法,我們可以使用 exception 類的方法,比如 getLine() 、 getFile() 以及 getMessage()。

例子解釋:

上面的代碼拋出了一個異常,并通過一個自定義的 exception 類來捕獲它:

customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。

創(chuàng)建 errorMessage() 函數(shù)。如果 e-mail 地址不合法,則該函數(shù)返回一條錯誤消息

把 $email 變量設置為不合法的 e-mail 地址字符串

執(zhí)行 “try” 代碼塊,由于 e-mail 地址不合法,因此拋出一個異常

“catch” 代碼塊捕獲異常,并顯示錯誤消息

多個異常

可以為一段腳本使用多個異常,來檢測多種情況。

可以使用多個 if..else 代碼塊,或一個 switch 代碼塊,或者嵌套多個異常。這些異常能夠使用不同的 exception 類,并返回不同的錯誤消息:

復制代碼代碼如下:

?php

class customException extends Exception{public function errorMessage(){

//error

message$errorMsg = ‘Error on line ‘.$this-getLine().' in ‘.$this-getFile().': b'.$this-getMessage().'/b is not a valid E-Mail address';

return $errorMsg;

}

}

$email = “someone@example點抗 ”;try {

//check if

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {

//throw exception if email is not valid throw new

customException($email);

}

//check for “example” in mail address

if(strpos($email, “example”) !== FALSE) { throw new Exception(”$email is an example e-mail”); } }catch (customException $e) { echo $e-errorMessage(); }catch(Exception $e) { echo $e-getMessage(); }?

例子解釋:

上面的代碼測試了兩種條件,如何任何條件不成立,則拋出一個異常:

customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。

創(chuàng)建 errorMessage() 函數(shù)。如果 e-mail 地址不合法,則該函數(shù)返回一個錯誤消息。

執(zhí)行 “try” 代碼塊,在第一個條件下,不會拋出異常。

由于 e-mail 含有字符串 “example”,第二個條件會觸發(fā)異常。

“catch” 代碼塊會捕獲異常,并顯示恰當?shù)腻e誤消息

如果沒有捕獲 customException,緊緊捕獲了 base exception,則在那里處理異常。

重新拋出異常

有時,當異常被拋出時,您也許希望以不同于標準的方式對它進行處理??梢栽谝粋€ “catch” 代碼塊中再次拋出異常。

腳本應該對用戶隱藏系統(tǒng)錯誤。對程序員來說,系統(tǒng)錯誤也許很重要,但是用戶對它們并不感興趣。為了讓用戶更容易使用,您可以再次拋出帶有對用戶比較友好的消息的異常:

復制代碼代碼如下:

?php

class customException extends Exception { public function errorMessage() {

//error message

$errorMsg = $this-getMessage().' is not a valid E-Mail address.'; return $errorMsg; } }$email = “someone@example點抗 ”;try { try {

//check for “example” in mail address

if(strpos($email, “example”) !== FALSE) {

//throw exception if email is not valid throw new

Exception($email); } } catch(Exception $e) {

//re-throw exception throw new

customException($email); } }catch (customException $e) {

//display custom message

echo $e-errorMessage(); }

?

例子解釋:

上面的代碼檢測在郵件地址中是否含有字符串 “example”。如果有,則再次拋出異常:

customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。

創(chuàng)建 errorMessage() 函數(shù)。如果 e-mail 地址不合法,則該函數(shù)返回一個錯誤消息。

把 $email 變量設置為一個有效的郵件地址,但含有字符串 “example”。

“try” 代碼塊包含另一個 “try” 代碼塊,這樣就可以再次拋出異常。

由于 e-mail 包含字符串 “example”,因此觸發(fā)異常。

“catch” 捕獲到該異常,并重新拋出 “customException”。

捕獲到 “customException”,并顯示一條錯誤消息。

如果在其目前的 “try” 代碼塊中異常沒有被捕獲,則它將在更高層級上查找 catch 代碼塊。

設置頂層異常處理器 (Top Level Exception Handler)

set_exception_handler() 函數(shù)可設置處理所有未捕獲異常的用戶定義函數(shù)。

復制代碼代碼如下:

?php

function myException($exception){

echo “bException:/b ” , $exception-getMessage();

}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');

?

以上代碼的輸出應該類似這樣:

Exception: Uncaught Exception occurred

在上面的代碼中,不存在 “catch” 代碼塊,而是觸發(fā)頂層的異常處理程序。應該使用此函數(shù)來捕獲所有未被捕獲的異常。

異常的規(guī)則

需要進行異常處理的代碼應該放入 try 代碼塊內,以便捕獲潛在的異常。

每個 try 或 throw 代碼塊必須至少擁有一個對應的 catch 代碼塊。

使用多個 catch 代碼塊可以捕獲不同種類的異常。

可以在 try 代碼塊內的 catch 代碼塊中再次拋出(re-thrown)異常。

簡而言之:如果拋出了異常,就必須捕獲它。


分享文章:php數(shù)據(jù)異常處理 php異常處理方法
當前鏈接:http://weahome.cn/article/ddgesde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部