《PHP》課件-第5章 錯(cuò)誤處理及調(diào)試_第1頁(yè)
《PHP》課件-第5章 錯(cuò)誤處理及調(diào)試_第2頁(yè)
《PHP》課件-第5章 錯(cuò)誤處理及調(diào)試_第3頁(yè)
《PHP》課件-第5章 錯(cuò)誤處理及調(diào)試_第4頁(yè)
《PHP》課件-第5章 錯(cuò)誤處理及調(diào)試_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章錯(cuò)誤處理及調(diào)試錯(cuò)誤類(lèi)型與級(jí)別手動(dòng)觸發(fā)錯(cuò)誤處理錯(cuò)誤調(diào)試工具目錄如何處理錯(cuò)誤5.25.1錯(cuò)誤處理概述PHP的調(diào)試工具5.35.1錯(cuò)誤處理概述常見(jiàn)的錯(cuò)誤類(lèi)型在PHP中,錯(cuò)誤用于指出語(yǔ)法、環(huán)境或編程問(wèn)題。根據(jù)錯(cuò)誤出現(xiàn)在編程過(guò)程中的不同環(huán)節(jié),大致可以分為以下4類(lèi)。邏輯錯(cuò)誤語(yǔ)法錯(cuò)誤環(huán)境錯(cuò)誤運(yùn)行錯(cuò)誤5.1錯(cuò)誤處理概述常見(jiàn)的錯(cuò)誤類(lèi)型語(yǔ)法錯(cuò)誤:是指編寫(xiě)的代碼不符合PHP的編寫(xiě)規(guī)范。特點(diǎn):語(yǔ)法錯(cuò)誤最常見(jiàn),也最容易修復(fù)例如:遺漏了一個(gè)分號(hào),就會(huì)顯示錯(cuò)誤信息。這類(lèi)錯(cuò)誤會(huì)阻止PHP腳本執(zhí)行,通常發(fā)生在程序開(kāi)發(fā)時(shí),可以通過(guò)錯(cuò)誤報(bào)告進(jìn)行修復(fù),再重新運(yùn)行檢查。5.1錯(cuò)誤處理概述常見(jiàn)的錯(cuò)誤類(lèi)型運(yùn)行錯(cuò)誤:一般不會(huì)阻止PHP腳本的執(zhí)行,但會(huì)導(dǎo)致程序出現(xiàn)潛在的問(wèn)題。例如:在一個(gè)腳本中定義了兩次同名常量,PHP通常會(huì)在第二次定義時(shí)提示一條錯(cuò)誤信息。雖然PHP腳本繼續(xù)執(zhí)行,但第二次定義常量的操作沒(méi)有執(zhí)行成功。5.1錯(cuò)誤處理概述常見(jiàn)的錯(cuò)誤類(lèi)型邏輯錯(cuò)誤:最讓人頭疼,不但不會(huì)阻止PHP腳本的執(zhí)行,也不會(huì)顯示出錯(cuò)誤信息例如:在if語(yǔ)句中判斷兩個(gè)變量的值是否相等,如果錯(cuò)把比較運(yùn)算符“==”寫(xiě)成賦值運(yùn)算符“=”就是一種邏輯錯(cuò)誤,很難被發(fā)現(xiàn)。5.1錯(cuò)誤處理概述常見(jiàn)的錯(cuò)誤類(lèi)型環(huán)境錯(cuò)誤:是由于PHP開(kāi)發(fā)環(huán)境配置的問(wèn)題引起的代碼報(bào)錯(cuò)例如:用mb_strlen()這個(gè)函數(shù)時(shí),如果PHP環(huán)境中沒(méi)有啟用mbstring擴(kuò)展,就會(huì)導(dǎo)致程序出錯(cuò)。5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別PHP中的每個(gè)錯(cuò)誤都有一個(gè)錯(cuò)誤級(jí)別與之關(guān)聯(lián),用于表示當(dāng)前錯(cuò)誤的等級(jí)。例如Error、Warning、Notice等錯(cuò)誤。PHP采用常量的形式來(lái)表示錯(cuò)誤級(jí)別,每個(gè)錯(cuò)誤級(jí)別都是一個(gè)整型。5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別級(jí)別常量值描述E_ERROR1致命的運(yùn)行時(shí)錯(cuò)誤,這類(lèi)錯(cuò)誤不可恢復(fù),會(huì)導(dǎo)致腳本停止運(yùn)行E_WARNING2運(yùn)行時(shí)警告,僅提示信息,但是腳本不會(huì)停止運(yùn)行E_PARSE4編譯時(shí)語(yǔ)法解析錯(cuò)誤,說(shuō)明代碼存在語(yǔ)法錯(cuò)誤,無(wú)法執(zhí)行E_NOTICE8運(yùn)行時(shí)通知,表示腳本遇到可能會(huì)表現(xiàn)為錯(cuò)誤的情況E_CORE_ERROR16類(lèi)似E_ERROR,是由PHP引擎核心產(chǎn)生的E_CORE_WARNING32類(lèi)似E_WARNING,是由PHP引擎核心產(chǎn)生的E_COMPILE_ERROR64類(lèi)似E_ERROR,是由Zend腳本引擎產(chǎn)生的5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別級(jí)別常量值描述E_COMPILE_WARNING128類(lèi)似E_WARNING,是由Zend腳本引擎產(chǎn)生的E_USER_ERROR256類(lèi)似E_ERROR,由用戶在代碼中使用trigger_error()產(chǎn)生的E_USER_WARNING512類(lèi)似E_WARNING,由用戶在代碼中使用trigger_error()產(chǎn)生的E_USER_NOTICE1024類(lèi)似E_NOTICE,由用戶在代碼中使用trigger_error()產(chǎn)生的E_STRICT2048嚴(yán)格語(yǔ)法檢查,確保代碼具有互用性和向前兼容性E_DEPRECATED8192運(yùn)行時(shí)通知,對(duì)未來(lái)版本中可能無(wú)法正常工作的代碼給出警告E_ALL32767表示所有的錯(cuò)誤和警告信息(在PHP5.4之前不包括E_STRICT)5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別//①使用未定義的變量echo$var; //提示信息“Notice:Undefinedvariable...”//②使用未定義的常量echoPI; //提示信息“Notice:Useofundefinedconstant...”//③訪問(wèn)不存在的數(shù)組元素$arr=array();echo$arr['age']; //提示信息“Notice:Undefinedindex:age...”①Notice(E_NOTICE)遇到Notice提示信息通常是代碼不嚴(yán)謹(jǐn)造成的,不會(huì)影響腳本繼續(xù)運(yùn)行。5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別//①除法運(yùn)算時(shí),除數(shù)為0echo5/0; //提示信息“Warning:Divisionbyzero...”//②使用include包含不存在的文件include'1234'; //提示信息“Warning:include():Failedopening...”②Warning(E_WARNING)除法運(yùn)算前,可以使用if判斷除數(shù)是否為0,若為0則拒絕執(zhí)行除法運(yùn)算使用include前,先用is_file()函數(shù)判斷該文件是否存在,防止錯(cuò)誤發(fā)生Warning錯(cuò)誤級(jí)別相比Notice更嚴(yán)重一些,不會(huì)影響腳本繼續(xù)執(zhí)行。5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別display();//Fatalerror:UncaughtError:Calltoundefinedfunction...echo'test';//前一行發(fā)生錯(cuò)誤,此行代碼不會(huì)執(zhí)行③Fatalerror(E_ERROR)Fatalerror是一種致命錯(cuò)誤,在運(yùn)行時(shí)發(fā)生。一旦發(fā)生該錯(cuò)誤,PHP腳本會(huì)立即停止執(zhí)行。例如,調(diào)用未定義的函數(shù)時(shí)就會(huì)發(fā)生致命錯(cuò)誤,示例代碼如下。5.1錯(cuò)誤處理概述錯(cuò)誤級(jí)別//①除法運(yùn)算時(shí),除數(shù)為0echo5/0; //提示信息“Warning:Divisionbyzero...”//②使用include包含不存在的文件include'1234'; //提示信息“Warning:include():Failedopening...”④Parseerror(E_PARSE)Parseerror是語(yǔ)法解析錯(cuò)誤,當(dāng)腳本存在語(yǔ)法錯(cuò)誤時(shí),無(wú)法解析成功,就會(huì)發(fā)生此錯(cuò)誤。遇到此錯(cuò)誤說(shuō)明腳本沒(méi)有執(zhí)行。對(duì)于這類(lèi)錯(cuò)誤,可以借助代碼編輯器的語(yǔ)法高亮和檢查功能,以提醒開(kāi)發(fā)人員避免語(yǔ)法出錯(cuò)。5.1錯(cuò)誤處理概述手動(dòng)觸發(fā)錯(cuò)誤E_ERROR、E_NOTICE、E_WARNING等錯(cuò)誤都是由PHP解釋器自動(dòng)觸發(fā)的PHP解釋器自動(dòng)觸發(fā)的錯(cuò)誤外,還可以根據(jù)不同的需求自定義錯(cuò)誤,它們可以用于協(xié)助調(diào)試,或在發(fā)布給其他人的代碼中生成不推薦使用的通知等5.1錯(cuò)誤處理概述手動(dòng)觸發(fā)錯(cuò)誤PHP的內(nèi)置函數(shù)trigger_error()可以觸發(fā)錯(cuò)誤,該函數(shù)聲明如下:booltrigger_error(string$error_msg[,int$error_type=E_USER_NOTICE])第1個(gè)參數(shù)是錯(cuò)誤信息內(nèi)容第2個(gè)參數(shù)是錯(cuò)誤類(lèi)別,默認(rèn)為E_UESR_NOTICE具體案例請(qǐng)參考教材5.2如何處理錯(cuò)誤顯示錯(cuò)誤報(bào)告在實(shí)際開(kāi)發(fā)過(guò)程中,不可避免的會(huì)出現(xiàn)各種各樣的錯(cuò)誤,為了提高開(kāi)發(fā)效率,PHP語(yǔ)言提供了顯示錯(cuò)誤的機(jī)制,該機(jī)制可以控制是否顯示錯(cuò)誤以及顯示錯(cuò)誤的級(jí)別等。在默認(rèn)情況下,會(huì)將所有的錯(cuò)誤顯示在輸出結(jié)果中。5.2如何處理錯(cuò)誤顯示錯(cuò)誤報(bào)告——修改配置文件直接配置php.ini文件來(lái)顯示錯(cuò)誤報(bào)告。error_reporting=E_ALL&~E_NOTICEdisplay_errors=Onerror_reporting用于設(shè)置報(bào)告的錯(cuò)誤級(jí)別display_errors用于設(shè)置是否顯示錯(cuò)誤信息第1行代碼中E_ALL&~E_NOTICE表示報(bào)告除E_NOTICE之外的所有級(jí)別的錯(cuò)誤第2行表示將錯(cuò)誤報(bào)告顯示在輸出結(jié)果中5.2如何處理錯(cuò)誤顯示錯(cuò)誤報(bào)告——error_reporting()和ini_set()函數(shù)通過(guò)PHP提供的error_reporting()和ini_set()函數(shù)來(lái)實(shí)現(xiàn)顯示錯(cuò)誤報(bào)告。error_reporting(E_ALL&~E_NOTICE);ini_set('display_errors',1);ini_set()函數(shù)用來(lái)設(shè)置php.ini中指定選項(xiàng)的值,僅在本腳本周期內(nèi)有效error_reporting()函數(shù)用于設(shè)置錯(cuò)誤級(jí)別若要獲取php.ini中的指定選項(xiàng)值,可以使用ini_get()函數(shù)進(jìn)行獲取具體案例請(qǐng)參考教材5.2如何處理錯(cuò)誤記錄錯(cuò)誤日志思考:網(wǎng)站已經(jīng)上線或者正在運(yùn)行,錯(cuò)誤顯示出來(lái)會(huì)影響用戶體驗(yàn),這時(shí)如何將這些錯(cuò)誤記錄下來(lái),為后期解決這些錯(cuò)誤提供幫助?答案:錯(cuò)誤日志功能實(shí)現(xiàn)方式:一通過(guò)配置文件來(lái)記錄錯(cuò)誤日志信息,二通過(guò)error_log()函數(shù)來(lái)記錄錯(cuò)誤日志信息。5.2如何處理錯(cuò)誤記錄錯(cuò)誤日志——修改配置文件通過(guò)修改php.ini配置文件,可以直接設(shè)置記錄錯(cuò)誤日志的相關(guān)配置項(xiàng)error_reporting=E_ALLlog_error=Onerror_log=C:\web\php_errors.logerror_reporting用于設(shè)置顯示錯(cuò)誤級(jí)別E_ALL表示顯示所有錯(cuò)誤log_error用于設(shè)置是否記錄日志error_log用于指定日志寫(xiě)入的文件路徑5.2如何處理錯(cuò)誤記錄錯(cuò)誤日志——error_log()函數(shù)error_log()函數(shù)用于將錯(cuò)誤記錄到指定的日志文件中//將錯(cuò)誤信息發(fā)送到php.ini中的error_log配置的日志中error_log('errormessagea');//將錯(cuò)誤信息發(fā)送到指定日志文件中error_log('errormessageb',3,'C:/web/php.log');第2個(gè)參數(shù)用于指定將錯(cuò)誤信息發(fā)送到何處,當(dāng)省略時(shí)默認(rèn)為php.ini中的error_log配置的日志中,此處設(shè)置為3,表示發(fā)送到指定的日志文件中。第3個(gè)參數(shù)的設(shè)置取決于第2個(gè)參數(shù),此處表示日志文件的路徑5.2如何處理錯(cuò)誤自定義錯(cuò)誤處理器當(dāng)一個(gè)錯(cuò)誤發(fā)生時(shí),PHP會(huì)采取默認(rèn)方式進(jìn)行處理。當(dāng)需要更改錯(cuò)誤處理方式時(shí),可以在PHP腳本中設(shè)置一個(gè)自定義錯(cuò)誤處理器,實(shí)現(xiàn)在錯(cuò)誤發(fā)生時(shí)自動(dòng)調(diào)用一個(gè)函數(shù)進(jìn)行處理。5.2如何處理錯(cuò)誤自定義錯(cuò)誤處理器自定義錯(cuò)誤處理器是通過(guò)set_error_handler()函數(shù)來(lái)實(shí)現(xiàn)的,其函數(shù)聲明如下:mixedset_error_handler(callable$error_handler[,int$error_types=E_ALL|E_STRICT])callable表示參數(shù)$error_handler為回調(diào)函數(shù)類(lèi)型$error_handler是必選參數(shù),用于指定發(fā)生錯(cuò)誤時(shí)運(yùn)行的函數(shù)$error_types用于指定處理錯(cuò)誤的級(jí)別類(lèi)型5.2如何處理錯(cuò)誤自定義錯(cuò)誤處理器$error_handler回調(diào)函數(shù)的參數(shù)必須符合錯(cuò)誤處理器函數(shù)的原型functionhandler(int$errno,string$errstr[,string$errfile[,int$errline[,array $errcontext]]]);參數(shù)$errno表示錯(cuò)誤級(jí)別$errstr表示錯(cuò)誤說(shuō)明$errcontext表示在觸發(fā)錯(cuò)誤的范圍內(nèi)存在的所有變量的數(shù)組。其中前兩個(gè)參數(shù)是必選參數(shù)。$errfile表示發(fā)生錯(cuò)誤代碼的文件名稱(chēng)$errline表示錯(cuò)誤發(fā)生的代碼行的行號(hào)具體案例請(qǐng)參考教材5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境NetBeans是一個(gè)開(kāi)放源代碼、跨平臺(tái)的開(kāi)發(fā)工具,在官方網(wǎng)站可以獲取軟件的下載地址。本書(shū)基于NetBeansIDEforPHP8.2版本進(jìn)行講解,該版本包含了HTML5、JavaScript、PHP三個(gè)主要功能。5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——在NetBeans中新建項(xiàng)目NetBeans以項(xiàng)目的形式來(lái)管理代碼。執(zhí)行【文件】-【新建項(xiàng)目】可以創(chuàng)建一個(gè)新項(xiàng)目。5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——在NetBeans中新建項(xiàng)目在對(duì)話框中選擇“PHP應(yīng)用程序”,然后單擊【下一步】按鈕,配置項(xiàng)目信息5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——在NetBeans中新建項(xiàng)目“項(xiàng)目名稱(chēng)”可以隨意填寫(xiě)“源文件夾”表示項(xiàng)目源代碼的存放位置,選擇Apache默認(rèn)站點(diǎn)目錄即可“PHP版本”用于語(yǔ)法檢查和代碼提示,如果考慮項(xiàng)目代碼的向下兼容性,就選擇一個(gè)早期的版本5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——在NetBeans中新建項(xiàng)目在完成配置信息后,單擊【下一步】按鈕進(jìn)入運(yùn)行配置頁(yè)面將項(xiàng)目URL配置為“http://localhost/”,然后單擊【完成】按鈕完成項(xiàng)目創(chuàng)建。5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——實(shí)時(shí)語(yǔ)法檢查NetBeans編碼時(shí)可實(shí)時(shí)語(yǔ)法檢查,幫助開(kāi)發(fā)人員及時(shí)發(fā)現(xiàn)問(wèn)題,提高工作效率。當(dāng)代碼出現(xiàn)語(yǔ)法錯(cuò)誤時(shí),NetBeans會(huì)使用紅色的波浪線進(jìn)行提示當(dāng)代碼正確時(shí),提示就會(huì)消失5.3PHP的調(diào)試工具NetBeans集成開(kāi)發(fā)環(huán)境——查找

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論