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

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論