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

下載本文檔

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

文檔簡介

1、 PHP第5章 錯誤處理及調(diào)試錯誤類型與級別手動觸發(fā)錯誤處理錯誤調(diào)試工具 目錄如何處理錯誤5.1錯誤處理概述PHP的調(diào)試工具5.35.3 5.1 錯誤處理概述1.常見的錯誤類型在PHP中,錯誤錯誤用于指出語法、環(huán)境或編程問題。根據(jù)錯誤出現(xiàn)在編程過程中的不同環(huán)節(jié),大致可以分為以下4類類。邏輯錯誤語法錯誤環(huán)境錯誤運行錯誤 5.1 錯誤處理概述1.常見的錯誤類型語法錯誤語法錯誤:是指編寫的代碼不符合PHP的編寫規(guī)范。特點特點:語法錯誤最常見,也最容易修復(fù)例如例如:遺漏了一個分號,就會顯示錯誤信息。這類錯誤會阻止PHP腳本執(zhí)行,通常發(fā)生在程序開發(fā)時,可以通過錯誤報告進行修復(fù),再重新運

2、行檢查。 5.1 錯誤處理概述1.常見的錯誤類型運行錯誤運行錯誤:一般不會阻止PHP腳本的執(zhí)行,但會導(dǎo)致程序出現(xiàn)潛在的問題。例如例如:在一個腳本中定義了兩次同名常量,PHP通常會在第二次定義時提示一條錯誤信息。雖然PHP腳本繼續(xù)執(zhí)行,但第二次定義常量的操作沒有執(zhí)行成功。 5.1 錯誤處理概述1.常見的錯誤類型邏輯錯誤邏輯錯誤:最讓人頭疼,不但不會阻止PHP腳本的執(zhí)行,也不會顯示出錯誤信息例如例如:在if語句中判斷兩個變量的值是否相等,如果錯把比較運算符“=”寫成賦值運算符“=”就是一種邏輯錯誤,很難被發(fā)現(xiàn)。 5.1 錯誤處理概述1.常見的錯誤類型環(huán)境錯誤環(huán)境錯誤:是由于PHP開發(fā)環(huán)境配置的問題

3、引起的代碼報錯例如例如:用mb_strlen()這個函數(shù)時,如果PHP環(huán)境中沒有啟用mbstring擴展,就會導(dǎo)致程序出錯。 5.1 錯誤處理概述2.錯誤級別l PHP中的每個錯誤每個錯誤都有一個錯誤級別錯誤級別與之關(guān)聯(lián),用于表示當(dāng)前錯誤的等級錯誤的等級。l 例如Error、Warning、Notice等錯誤。l PHP采用常量常量的形式來表示錯誤級別,每個錯誤級別都是一個整型。 5.1 錯誤處理概述2.錯誤級別級別常量級別常量值值描述描述E_ERROR1致命的運行時錯誤,這類錯誤不可恢復(fù),會導(dǎo)致腳本停止運行E_WARNING2運行時警告,僅提示信息,但是腳本不會停止運行E_PARSE4編譯時

4、語法解析錯誤,說明代碼存在語法錯誤,無法執(zhí)行E_NOTICE8運行時通知,表示腳本遇到可能會表現(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 錯誤處理概述2.錯誤級別級別常量級別常量值值描述描述E_COMPILE_WARNING128類似E_WARNING,是由Zend腳本引擎產(chǎn)生的E_USER_ERROR256類似E_ERROR,由用戶在代碼中使用trigger_error()產(chǎn)生的E_

5、USER_WARNING512類似E_WARNING,由用戶在代碼中使用trigger_error()產(chǎn)生的E_USER_NOTICE1024類似E_NOTICE,由用戶在代碼中使用trigger_error()產(chǎn)生的E_STRICT2048嚴格語法檢查,確保代碼具有互用性和向前兼容性E_DEPRECATED8192運行時通知,對未來版本中可能無法正常工作的代碼給出警告E_ALL32767表示所有的錯誤和警告信息(在PHP 5.4之前不包括E_STRICT) 5.1 錯誤處理概述2.錯誤級別/ 使用未定義的變量使用未定義的變量echo $var;/ 提示信息提示信息“Notice: Undef

6、ined variable.”/ 使用未定義的常量使用未定義的常量echo PI;/ 提示信息提示信息“Notice: Use of undefined constant.”/ 訪問不存在的數(shù)組元素訪問不存在的數(shù)組元素$arr = array();echo $arrage; / 提示信息提示信息“Notice: Undefined index: age.” Notice(E_NOTICE)遇到遇到Notice提示信息通常是代碼不嚴謹造成的,不會影響腳本繼續(xù)運行。提示信息通常是代碼不嚴謹造成的,不會影響腳本繼續(xù)運行。 5.1 錯誤處理概述2.錯誤級別/ 除法運算時,除數(shù)為除法運算時,除數(shù)為0ec

7、ho 5 / 0;/ 提示信息提示信息“Warning: Division by zero.”/ 使用使用include包含不存在的文件包含不存在的文件include 1234;/ 提示信息提示信息“Warning: include(): Failed opening.” Warning(E_WARNING) 除法運算前,可以使用if判斷除數(shù)是否為0,若為0則拒絕執(zhí)行除法運算 使用include前,先用is_file()函數(shù)判斷該文件是否存在,防止錯誤發(fā)生Warning錯誤級別錯誤級別相比Notice更嚴重一些,不會影響腳本繼續(xù)執(zhí)行。 5.1 錯誤處理概述2.錯誤級別display(); /

8、Fatal error: Uncaught Error: Call to undefined function.echo test; / 前一行發(fā)生錯誤,此行代碼不會執(zhí)行前一行發(fā)生錯誤,此行代碼不會執(zhí)行 Fatal error(E_ERROR)Fatal error是一種致命錯誤,在運行時發(fā)生。一旦發(fā)生該錯誤,PHP腳本會立即停止執(zhí)行。例如,調(diào)用未定義的函數(shù)時就會發(fā)生致命錯誤,示例代碼如下。 5.1 錯誤處理概述2.錯誤級別/ 除法運算時,除數(shù)為除法運算時,除數(shù)為0echo 5 / 0;/ 提示信息提示信息“Warning: Division by zero.”/ 使用使用include包含不

9、存在的文件包含不存在的文件include 1234;/ 提示信息提示信息“Warning: include(): Failed opening.” Parse error(E_PARSE)Parse error是語法解析錯誤,當(dāng)腳本存在語法錯誤時,無法解析成功,就會發(fā)生此錯誤。遇到此錯誤說明腳本沒有執(zhí)行。對于這類錯誤,可以借助代碼編輯器的語法高亮和檢查功能,以提醒開發(fā)人員避免語法出錯。 5.1 錯誤處理概述3.手動觸發(fā)錯誤l E_ERROR、E_NOTICE、E_WARNING等錯誤都是由PHP解釋器自動觸發(fā)的l PHP解釋器自動觸發(fā)的錯誤外,還可以根據(jù)不同的需求自定義錯誤,它們可以用于協(xié)助調(diào)

10、試,或在發(fā)布給其他人的代碼中生成不推薦使用的通知等 5.1 錯誤處理概述3.手動觸發(fā)錯誤PHP的內(nèi)置函數(shù)trigger_error()可以觸發(fā)錯誤,該函數(shù)聲明如下:bool trigger_error ( string $error_msg , int $error_type = E_USER_NOTICE ) 第1個參數(shù)是錯誤信息內(nèi)容 第2個參數(shù)是錯誤類別,默認為E_UESR_NOTICE具體案例請參考教材 5.2 如何處理錯誤1.顯示錯誤報告在實際開發(fā)過程中,不可避免的會出現(xiàn)各種各樣的錯誤,為了提高開發(fā)效率,PHP語言提供了顯示錯誤的機制顯示錯誤的機制,該機制可以控制可以控制是否顯示錯誤以

11、及顯示錯誤的級別等。在默認情況下,會將所有的錯誤顯示在輸出結(jié)果中。 5.2 如何處理錯誤1.顯示錯誤報告修改配置文件直接配置php.ini文件來顯示錯誤報告。error_reporting = E_ALL & E_NOTICEdisplay_errors = On error_reporting用于設(shè)置報告的錯誤級別 display_errors用于設(shè)置是否顯示錯誤信息 第1行代碼中E_ALL & E_NOTICE表示報告除E_NOTICE之外的所有級別的錯誤 第2行表示將錯誤報告顯示在輸出結(jié)果中 5.2 如何處理錯誤1.顯示錯誤報告error_reporting()和ini_

12、set()函數(shù)通過PHP提供的error_reporting()和和ini_set()函數(shù)函數(shù)來實現(xiàn)顯示錯誤報告。error_reporting(E_ALL & E_NOTICE);ini_set(display_errors, 1); ini_set()函數(shù)用來設(shè)置php.ini中指定選項的值,僅在本腳本周期內(nèi)有效 error_reporting()函數(shù)用于設(shè)置錯誤級別 若要獲取php.ini中的指定選項值,可以使用ini_get()函數(shù)進行獲取具體案例請參考教材 5.2 如何處理錯誤2.記錄錯誤日志思考思考:網(wǎng)站已經(jīng)上線或者正在運行,錯誤顯示出來會影響用戶體驗,這時如何將這些錯誤記

13、錄下來,為后期解決這些錯誤提供幫助?答案答案:錯誤日志功能實現(xiàn)方式實現(xiàn)方式:一通過配置文件來記錄錯誤日志信息,二通過error_log()函數(shù)來記錄錯誤日志信息。 5.2 如何處理錯誤2.記錄錯誤日志修改配置文件通過修改修改php.ini配置文件配置文件,可以直接設(shè)置記錄錯誤日志的相關(guān)配置項error_reporting = E_ALLlog_error = Onerror_log = C:webphp_errors.log error_reporting用于設(shè)置顯示錯誤級別 E_ALL表示顯示所有錯誤 log_error用于設(shè)置是否記錄日志 error_log用于指定日志寫入的文件路徑 5.

14、2 如何處理錯誤2.記錄錯誤日志error_log()函數(shù)error_log()函數(shù)函數(shù)用于將錯誤記錄到指定的日志文件中/ 將錯誤信息發(fā)送到將錯誤信息發(fā)送到php.ini中的中的error_log配置的日志中配置的日志中error_log(error message a);/ 將錯誤信息發(fā)送到指定日志文件中將錯誤信息發(fā)送到指定日志文件中error_log(error message b, 3, C:/web/php.log); 第2個參數(shù)用于指定將錯誤信息發(fā)送到何處,當(dāng)省略時默認為php.ini中的error_log配置的日志中,此處設(shè)置為3,表示發(fā)送到指定的日志文件中。 第3個參數(shù)的設(shè)置取決

15、于第2個參數(shù),此處表示日志文件的路徑 5.2 如何處理錯誤3.自定義錯誤處理器當(dāng)一個錯誤發(fā)生時,PHP會采取默認方式進行處理。當(dāng)需要更改錯誤處理方式時,可以在PHP腳本中設(shè)置一個自定義錯誤處理器自定義錯誤處理器,實現(xiàn)在錯誤發(fā)生時自動調(diào)用一個函數(shù)進行處理。 5.2 如何處理錯誤3.自定義錯誤處理器自定義錯誤處理器是通過set_error_handler()函數(shù)函數(shù)來實現(xiàn)的,其函數(shù)聲明如下:mixed set_error_handler( callable $error_handler , int $error_types = E_ALL | E_STRICT ) callable表示參數(shù)$err

16、or_handler為回調(diào)函數(shù)類型 $error_handler是必選參數(shù),用于指定發(fā)生錯誤時運行的函數(shù) $error_types用于指定處理錯誤的級別類型 5.2 如何處理錯誤3.自定義錯誤處理器$error_handler回調(diào)函數(shù)回調(diào)函數(shù)的參數(shù)必須符合錯誤處理器函數(shù)的原型function handler( int $errno , string $errstr , string $errfile , int $errline , array $errcontext ); 參數(shù)$errno表示錯誤級別 $errstr表示錯誤說明 $errcontext表示在觸發(fā)錯誤的范圍內(nèi)存在的所有變量的數(shù)

17、組。其中前兩個參數(shù)是必選參數(shù)。$errfile表示發(fā)生錯誤代碼的文件名稱$errline表示錯誤發(fā)生的代碼行的行號具體案例請參考教材 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境NetBeans是一個開放源代碼、跨平臺的開發(fā)工具,在官方網(wǎng)站可以獲取軟件的下載地址。本書基于NetBeans IDE for PHP 8.2版本進行講解,該版本包含了HTML5、JavaScript、PHP三個主要功能。 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境在NetBeans中新建項目Net

18、Beans以項目的形式來管理代碼。執(zhí)行【文件文件】-【新建項目新建項目】可以創(chuàng)建一個新項目創(chuàng)建一個新項目。 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境在NetBeans中新建項目在對話框中選擇“PHP應(yīng)用程序應(yīng)用程序”,然后單擊【下一步】按鈕,配置項目信息 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境在NetBeans中新建項目 “項目名稱項目名稱”可以隨意填寫 “源文件夾源文件夾”表示項目源代碼的存放位置,選擇Apache默認站點目錄即可 “PHP版本版本”用于語法檢查和代碼提示,如果考慮項目代碼的向下兼容性,就選擇一個早期的版本 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境在NetBeans中新建項目在完成配置信息后,單擊【下一步下一步】按鈕進入運行配置頁面將項目URL配置為“http:/localhost/”,然后單擊【完成】按鈕完成項目創(chuàng)建。 5.3 PHP的調(diào)試工具1.NetBeans集成開發(fā)環(huán)境實時語法檢查NetBeans編碼時可實時語法檢查語法檢查,幫助開發(fā)人員及時發(fā)現(xiàn)問題,提高工作效率。 當(dāng)代碼出現(xiàn)語法錯誤時,NetBeans會使用紅色的波浪線進行提示 當(dāng)代碼正確時,提示就會消失 5.3 PHP的調(diào)試工具1.NetB

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論