PHP錯誤、異常處理與調(diào)試_第1頁
PHP錯誤、異常處理與調(diào)試_第2頁
PHP錯誤、異常處理與調(diào)試_第3頁
PHP錯誤、異常處理與調(diào)試_第4頁
PHP錯誤、異常處理與調(diào)試_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PHPPHP錯誤、異常處理與調(diào)試錯誤、異常處理與調(diào)試在程序開發(fā)中,難免會因為某種原因而產(chǎn)生錯誤。如何去避在程序開發(fā)中,難免會因為某種原因而產(chǎn)生錯誤。如何去避免、調(diào)試、修復(fù)錯誤以及對程序可能發(fā)生的異常的處理免、調(diào)試、修復(fù)錯誤以及對程序可能發(fā)生的異常的處理是一個程序員必備的能力。是一個程序員必備的能力。PHP提供了良好的錯誤提示提供了良好的錯誤提示,在進行程序調(diào)試可根據(jù)提示信息對錯誤進行排除。,在進行程序調(diào)試可根據(jù)提示信息對錯誤進行排除。8.1 PHP8.1 PHP錯誤類型錯誤類型在在PHP程序開發(fā)中,可能會產(chǎn)生很多種錯誤,通常會有以下程序開發(fā)中,可能會產(chǎn)生很多種錯誤,通常會有以下幾種錯誤。幾種錯

2、誤。語法錯誤:在程序中使用了錯誤的語法而導(dǎo)致的錯誤。語法錯誤:在程序中使用了錯誤的語法而導(dǎo)致的錯誤。語義錯誤:在程序中正確地使用了語義錯誤:在程序中正確地使用了PHP的語法,但是沒有任的語法,但是沒有任何意義,程序達不到預(yù)想的效果。何意義,程序達不到預(yù)想的效果。邏輯錯誤:在程序中使用的邏輯與實際上需要的邏輯不符。邏輯錯誤:在程序中使用的邏輯與實際上需要的邏輯不符。注釋錯誤:在程序中寫的注釋與該程序代碼的意義不符。注釋錯誤:在程序中寫的注釋與該程序代碼的意義不符。運行時錯誤:由于運行環(huán)境等原因而導(dǎo)致的錯誤。運行時錯誤:由于運行環(huán)境等原因而導(dǎo)致的錯誤。8.1.1 8.1.1 語法錯誤語法錯誤每一種

3、語言都有屬于自己的語法。在程序開發(fā)中如果使用了每一種語言都有屬于自己的語法。在程序開發(fā)中如果使用了錯誤的語法,就將導(dǎo)致產(chǎn)生一個語法錯誤。錯誤的語法,就將導(dǎo)致產(chǎn)生一個語法錯誤。8.1.2 8.1.2 語義錯誤語義錯誤語義錯誤是在使用了正確語法的基礎(chǔ)上,使用了錯誤的格式語義錯誤是在使用了正確語法的基礎(chǔ)上,使用了錯誤的格式而導(dǎo)致的。其代碼如下所示。而導(dǎo)致的。其代碼如下所示。8.1.3 8.1.3 邏輯錯誤邏輯錯誤邏輯錯誤對于邏輯錯誤對于PHP來講不是錯誤,因為語法、語義上沒有任來講不是錯誤,因為語法、語義上沒有任何問題。但是因為程序代碼存在著邏輯著問題,進而導(dǎo)何問題。但是因為程序代碼存在著邏輯著問題

4、,進而導(dǎo)致程序得不到所期望的結(jié)果。致程序得不到所期望的結(jié)果。8.1.4 8.1.4 注釋錯誤注釋錯誤注釋對于程序來講是必不可少的。因為在分布式開發(fā)中,隨注釋對于程序來講是必不可少的。因為在分布式開發(fā)中,隨時都有可能去讀其它程序員的代碼,如果沒有注釋,將時都有可能去讀其它程序員的代碼,如果沒有注釋,將會花費大量的時間讀懂別人的代碼。另外對于后期的維會花費大量的時間讀懂別人的代碼。另外對于后期的維護也是相當(dāng)困難的。對于注釋錯誤,比沒有更加可怕,護也是相當(dāng)困難的。對于注釋錯誤,比沒有更加可怕,因為開發(fā)人員往往會只看注釋不會再花時間去看代碼。因為開發(fā)人員往往會只看注釋不會再花時間去看代碼。8.1.5

5、8.1.5 運行時錯誤運行時錯誤運行時錯誤與程序代碼無關(guān),它是由腳本運行的環(huán)境等因素運行時錯誤與程序代碼無關(guān),它是由腳本運行的環(huán)境等因素造成的。比如說在造成的。比如說在Linux系統(tǒng)中,文件權(quán)限不對等而引發(fā)系統(tǒng)中,文件權(quán)限不對等而引發(fā)的錯誤。的錯誤。8.2 8.2 錯誤處理錯誤處理不管是程序引發(fā)的錯誤,還是環(huán)境因素引發(fā)的錯誤,默認(rèn)情不管是程序引發(fā)的錯誤,還是環(huán)境因素引發(fā)的錯誤,默認(rèn)情況下,況下,PHP都會給出提示信息。這些提示信息包含有服都會給出提示信息。這些提示信息包含有服務(wù)器的運行環(huán)境信息。在實際的務(wù)器的運行環(huán)境信息。在實際的Web環(huán)境中,將這些信環(huán)境中,將這些信息顯示出來,必然給服務(wù)器帶

6、來安全隱患。因此,必須息顯示出來,必然給服務(wù)器帶來安全隱患。因此,必須對可能出現(xiàn)的錯誤進行相應(yīng)的處理。對可能出現(xiàn)的錯誤進行相應(yīng)的處理。8.2.1 8.2.1 錯誤級別錯誤級別PHP中的錯誤是通過一個錯誤級別進行劃分的。從最基本的中的錯誤是通過一個錯誤級別進行劃分的。從最基本的通告到最嚴(yán)重的錯誤,這個錯誤級別標(biāo)識著所產(chǎn)生的錯通告到最嚴(yán)重的錯誤,這個錯誤級別標(biāo)識著所產(chǎn)生的錯誤的嚴(yán)重性。誤的嚴(yán)重性。8.2.2 php.ini8.2.2 php.ini對錯誤處理的設(shè)置對錯誤處理的設(shè)置在前面的章節(jié)中曾講到了在前面的章節(jié)中曾講到了php.ini文件,文件,PHP的環(huán)境幾乎都的環(huán)境幾乎都是在這個文件中進行設(shè)

7、置。這里有兩項關(guān)于錯誤處理的是在這個文件中進行設(shè)置。這里有兩項關(guān)于錯誤處理的設(shè)置:一個是設(shè)置:一個是display_errors,另一個是,另一個是error_reporting。前一變量是用來告訴。前一變量是用來告訴PHP是否顯示錯是否顯示錯誤,它的默認(rèn)值為誤,它的默認(rèn)值為Off,也即不顯示錯誤信息,如果設(shè)置,也即不顯示錯誤信息,如果設(shè)置為為true,將顯示錯誤信息。后一變量是告知,將顯示錯誤信息。后一變量是告知PHP如何顯示如何顯示提示信息,默認(rèn)值為提示信息,默認(rèn)值為E_ALL & E_NOTICE,即顯示除,即顯示除注意信息外的所有提示信息。注意信息外的所有提示信息。8.2.3

8、8.2.3 錯誤處理錯誤處理在程序中,因各種原因可能導(dǎo)致的錯誤,在程序中,因各種原因可能導(dǎo)致的錯誤,PHP都會給出相應(yīng)都會給出相應(yīng)的提示信息。而對于錯誤信息的處理,除了可采用直接的提示信息。而對于錯誤信息的處理,除了可采用直接在在php.ini文件中進行設(shè)置的方法外,還可以直接在程序文件中進行設(shè)置的方法外,還可以直接在程序中進行設(shè)置。中進行設(shè)置。1錯誤信息的隱藏錯誤信息的隱藏2錯誤信息的定制錯誤信息的定制3超時錯誤的處理超時錯誤的處理8.3 PHP8.3 PHP異常異常在實際的系統(tǒng)運行中,有可能存在一些不可預(yù)知的錯誤。比在實際的系統(tǒng)運行中,有可能存在一些不可預(yù)知的錯誤。比如說文件權(quán)限不對、文件

9、不存在等,雖然可以采用前面如說文件權(quán)限不對、文件不存在等,雖然可以采用前面所講的使用所講的使用if語句進行錯誤檢測。但是,語句進行錯誤檢測。但是,PHP提供了一種提供了一種更好的異常處理方法,它能更好的解決因環(huán)境等因素而更好的異常處理方法,它能更好的解決因環(huán)境等因素而引發(fā)的異常。引發(fā)的異常。8.3.1 8.3.1 異常處理原理異常處理原理在在PHP中,異常處理是使用其關(guān)鍵字中,異常處理是使用其關(guān)鍵字try、catch和和throw來來實現(xiàn)的。將需要進行異常處理的代碼放入實現(xiàn)的。將需要進行異常處理的代碼放入try代碼塊內(nèi),代碼塊內(nèi),以便捕獲可能存在的異常。每一個以便捕獲可能存在的異常。每一個tr

10、y語句必須至少有一語句必須至少有一個個catch語句與之對應(yīng),語句與之對應(yīng),catch語句用于捕獲異常。使用語句用于捕獲異常。使用多個多個catch語句可以捕獲不同的類所產(chǎn)生的異常。語句可以捕獲不同的類所產(chǎn)生的異常。throw語句用于拋出異常。語句用于拋出異常。8.3.2 8.3.2 異常處理異常處理前面已講到,異常處理是由關(guān)鍵字前面已講到,異常處理是由關(guān)鍵字try、catch和和throw實現(xiàn)實現(xiàn)的。的。1異常類異常類Excetion2設(shè)置異常處理函數(shù)設(shè)置異常處理函數(shù)set_exception_handler3完整的異常信息完整的異常信息8.3.3 8.3.3 擴展的異常處理類擴展的異常處理

11、類通常,在應(yīng)用中可能存在著各種異常。如果所有異常都使用通常,在應(yīng)用中可能存在著各種異常。如果所有異常都使用同一個異常類或者異常處理函數(shù)去獲取異常,將不利于同一個異常類或者異常處理函數(shù)去獲取異常,將不利于問題的解決。為此,通常是根據(jù)異常的類型不同而定義問題的解決。為此,通常是根據(jù)異常的類型不同而定義不同的自定義異常處理類。這些自定義異常處理類都是不同的自定義異常處理類。這些自定義異常處理類都是繼承自繼承自PHP自帶的異常處理類自帶的異常處理類Exception。8.3.4 8.3.4 異常的傳遞與重擲異常的傳遞與重擲在進行實際應(yīng)用中的流程處理時,有可能觸發(fā)到異常,但卻在進行實際應(yīng)用中的流程處理時

12、,有可能觸發(fā)到異常,但卻無法馬上執(zhí)行,希望暫時忽略處理異常,在適當(dāng)?shù)臅r候無法馬上執(zhí)行,希望暫時忽略處理異常,在適當(dāng)?shù)臅r候再處理異常。對于這種情況有一種方案,將處理異常的再處理異常。對于這種情況有一種方案,將處理異常的責(zé)任交回調(diào)用當(dāng)前方法的代碼,然后在上一層責(zé)任交回調(diào)用當(dāng)前方法的代碼,然后在上一層catch語句語句中再次拋出異常。使異常沿著方法的調(diào)用鏈向上傳遞,中再次拋出異常。使異常沿著方法的調(diào)用鏈向上傳遞,這就叫異常的重擲。這就叫異常的重擲。8.4 PHP8.4 PHP程序的調(diào)試程序的調(diào)試在在PHP的程序開發(fā)中,不可避免的會對程序進行調(diào)試。要進的程序開發(fā)中,不可避免的會對程序進行調(diào)試。要進行調(diào)

13、試,首先必須打開錯誤報告,再由相應(yīng)的語句輸出行調(diào)試,首先必須打開錯誤報告,再由相應(yīng)的語句輸出信息至屏幕,并根據(jù)這些信息找出并修復(fù)程序中可能存信息至屏幕,并根據(jù)這些信息找出并修復(fù)程序中可能存在的錯誤。在的錯誤。8.4.1 8.4.1 打開錯誤報告打開錯誤報告在前面的章節(jié)已講到了在前面的章節(jié)已講到了PHP的配置文件的配置文件php.ini,要能夠顯,要能夠顯示錯誤信息需要將修改該文件兩變量的值。但在實際的示錯誤信息需要將修改該文件兩變量的值。但在實際的應(yīng)用中,所開發(fā)的程序可能會進行移植。如果每一次移應(yīng)用中,所開發(fā)的程序可能會進行移植。如果每一次移植都去修改植都去修改PHP配置文件配置文件php.i

14、ni,勢必非常麻煩。,勢必非常麻煩。PHP提供了另一種不需要直接修改配置文件而達到修改該變提供了另一種不需要直接修改配置文件而達到修改該變量值的方法,那就是使用函數(shù)量值的方法,那就是使用函數(shù)ini_set實現(xiàn)配置文件變量實現(xiàn)配置文件變量值的修改。該函數(shù)語法格式如下所示。值的修改。該函數(shù)語法格式如下所示。string ini_set(string $varname, string $newvalue)8.4.2 8.4.2 使用使用ECHOECHO進行調(diào)試進行調(diào)試在開發(fā)中,當(dāng)程序出現(xiàn)警告或錯誤時,打開錯誤報告查看錯在開發(fā)中,當(dāng)程序出現(xiàn)警告或錯誤時,打開錯誤報告查看錯誤信息是很好的方式調(diào)試方式。但

15、是,當(dāng)程序沒有語法誤信息是很好的方式調(diào)試方式。但是,當(dāng)程序沒有語法錯誤時,程序由于某種原因而不得到期望的結(jié)果,采用錯誤時,程序由于某種原因而不得到期望的結(jié)果,采用查看錯誤報告的方式就不能進行調(diào)試了。此時就需要查查看錯誤報告的方式就不能進行調(diào)試了。此時就需要查看中間變量的值,一步步進行跟蹤調(diào)試??粗虚g變量的值,一步步進行跟蹤調(diào)試。8.4.3 8.4.3 使用使用DIEDIE進行調(diào)試進行調(diào)試對于一些邏輯相對簡單的程序,可首先粗略地判斷錯誤出在對于一些邏輯相對簡單的程序,可首先粗略地判斷錯誤出在哪一段,再從該段輸出相關(guān)變量的值,根據(jù)輸出的變量哪一段,再從該段輸出相關(guān)變量的值,根據(jù)輸出的變量值一步步找

16、出程序中存在的問題。但是對于一些邏輯復(fù)值一步步找出程序中存在的問題。但是對于一些邏輯復(fù)雜的程序而言,采用這種方式已足以滿足要求。此時可雜的程序而言,采用這種方式已足以滿足要求。此時可使用使用die()語句進行調(diào)試,語句進行調(diào)試,die()語句會中止程序執(zhí)行,并語句會中止程序執(zhí)行,并在瀏覽器上顯示文本。如果不想注釋掉代碼,而且只想在瀏覽器上顯示文本。如果不想注釋掉代碼,而且只想顯示到出錯之前的信息和出錯信息,不想顯示后面的信顯示到出錯之前的信息和出錯信息,不想顯示后面的信息,那么息,那么die()語句特別有用。語句特別有用。8.5 8.5 使用使用ZendStudioZendStudio進行調(diào)試

17、進行調(diào)試前面講到了直接在程序中輸出中間變量的值或輸出錯誤信息前面講到了直接在程序中輸出中間變量的值或輸出錯誤信息的方式進行的方式進行PHP程序的調(diào)試。其實除了這種直接的方式程序的調(diào)試。其實除了這種直接的方式以外,還可以借助于第三方的工具進行調(diào)試。例如以外,還可以借助于第三方的工具進行調(diào)試。例如PHPEclipse、ZendStudio等專業(yè)的等專業(yè)的IDE開發(fā)工具,都具開發(fā)工具,都具有實時調(diào)試的功能。這一節(jié)將對有實時調(diào)試的功能。這一節(jié)將對Eclipse+ZendStudio這這一組合開發(fā)工具進行調(diào)試作詳細(xì)的介紹。一組合開發(fā)工具進行調(diào)試作詳細(xì)的介紹。8.5.1 8.5.1 使用使用Eclipse

18、Eclipse開發(fā)開發(fā)PHPPHP的優(yōu)點的優(yōu)點Eclipse平臺是一個開放的平臺,免費、開源,用戶可以獲平臺是一個開放的平臺,免費、開源,用戶可以獲取。它支持多種語言,喜歡中文件界面的讀者可下載相取。它支持多種語言,喜歡中文件界面的讀者可下載相應(yīng)的中文語言包??缙脚_,支持多種操作系統(tǒng),例如應(yīng)的中文語言包??缙脚_,支持多種操作系統(tǒng),例如Windows、Linux、Mac等??烧剐院茫x者需要某項等??烧剐院?,讀者需要某項功能,可下載相應(yīng)的擴展包即可。安裝方便,只需要將功能,可下載相應(yīng)的擴展包即可。安裝方便,只需要將相應(yīng)的文件解壓至文件夾即可,省去了安裝的步驟。相應(yīng)的文件解壓至文件夾即可,省去了安裝的步驟。8.5.2 Eclipse8.5.2 Eclipse和和ZendStudioZendStudio的安裝的安裝對于對于Eclipse和和ZendStudio的安裝,讀者參考以下順序依次的安裝,讀者參考以下順序依次下載安裝。下載安裝。8.5.3 Zend8.5.3 Zend Debugger Debugger的安裝的安裝本書以本書以xampp為實例進行安裝。從網(wǎng)上下載為實例進行安裝。從網(wǎng)上下載xampp壓縮包壓縮包,解壓至盤符的根目錄即可,一定要解壓至盤符的

溫馨提示

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

評論

0/150

提交評論