

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PHP程序員的優(yōu)化調(diào)試技術(shù)和技巧程序員的優(yōu)化調(diào)試技術(shù)和技巧本文介紹調(diào)試PHP應(yīng)用程序的各種方法,包括在ApachePHP中打開(kāi)錯(cuò)誤報(bào)告,以及通過(guò)在一個(gè)簡(jiǎn)單的PHP腳本中放置策略性的print語(yǔ)句,找到更困難的bug的源頭。還會(huì)介紹用于Eclipse的PHPEclipse插件,這是一個(gè)靈活的開(kāi)發(fā)環(huán)境,具有實(shí)時(shí)語(yǔ)法解析能力,還會(huì)介紹PHPEclipse的DBG調(diào)試器擴(kuò)展。簡(jiǎn)介有許多PHP調(diào)試技術(shù)可以在編碼的時(shí)候節(jié)約大量時(shí)間。一個(gè)有效卻很基本
2、的調(diào)試技術(shù)就是打開(kāi)錯(cuò)誤報(bào)告。另一個(gè)略微高級(jí)一點(diǎn)的技術(shù)包括使用print語(yǔ)句,通過(guò)顯示在屏幕上實(shí)際出現(xiàn)的內(nèi)容,有助于精確地找出更難發(fā)現(xiàn)的bug。PHPEclipse是一個(gè)Eclipse插件,能夠強(qiáng)調(diào)常見(jiàn)的語(yǔ)法錯(cuò)誤,可以與調(diào)試器結(jié)合起來(lái)用于設(shè)置斷點(diǎn)。設(shè)置要學(xué)習(xí)本文描述的概念,需要PHP、Web服務(wù)器和Eclipse。調(diào)試器擴(kuò)展支持的PHP版本是V5.0.3。我們需要一個(gè)Web服務(wù)器來(lái)解析用PHP創(chuàng)建的頁(yè)面并把它們顯示到瀏覽器。本文中使用的是
3、Apache2。但是,任何Web服務(wù)器都可以滿(mǎn)足要求。要利用本文中介紹的一些調(diào)試技術(shù),需要安裝EclipseV3.1.1和插件PHPEclipseV1.1.8。由于Eclipse要求Java技術(shù),所以還要下載它。還需要PHP的調(diào)試器擴(kuò)展模塊。安裝它略有些麻煩。請(qǐng)仔細(xì)跟隨安裝調(diào)試器擴(kuò)展的操作說(shuō)明?,F(xiàn)在,先在php.ini文件中注釋掉那些要求裝入和配置PHP擴(kuò)展的行。在需要使用調(diào)試器的時(shí)候,再取消注釋。請(qǐng)參閱參考資料獲得下載信息?,F(xiàn)在介紹出
4、錯(cuò)消息。出錯(cuò)消息出錯(cuò)消息是作為開(kāi)發(fā)人員的第一道防線。誰(shuí)都不想在一臺(tái)沒(méi)有配置成顯示出錯(cuò)消息的服務(wù)器上用PHP開(kāi)發(fā)代碼。但是,請(qǐng)記住,當(dāng)代碼調(diào)試完成,準(zhǔn)備運(yùn)行的時(shí)候,應(yīng)當(dāng)確保關(guān)閉了錯(cuò)誤報(bào)告,因?yàn)椴幌M军c(diǎn)的訪問(wèn)者看到出錯(cuò)消息,因?yàn)檫@會(huì)給他們提供足夠的信息來(lái)利用站點(diǎn)的弱點(diǎn)并黑掉站點(diǎn)。也可以用出錯(cuò)消息為自己服務(wù),因?yàn)樗鼈儠?huì)顯示拋出或生成錯(cuò)誤的正確代碼行。這樣,調(diào)試就變成在瀏覽器上查看生成的錯(cuò)誤所顯示的行號(hào),并在代碼中檢查這一行。稍后,將會(huì)看到P
5、HPEclipse插件通過(guò)即時(shí)地給語(yǔ)法錯(cuò)誤加下劃線并在保存文件時(shí)用紅色“x”標(biāo)注語(yǔ)法錯(cuò)誤,可在開(kāi)發(fā)和調(diào)試過(guò)程中提供極大的幫助。先來(lái)看如何在php.ini文件中開(kāi)啟錯(cuò)誤報(bào)告并設(shè)置錯(cuò)誤報(bào)告的級(jí)別。然后將學(xué)習(xí)如何在Apache的配置文件中覆蓋這些設(shè)置。PHP的錯(cuò)誤報(bào)告php.ini文件中有許多配置設(shè)置。您應(yīng)當(dāng)已經(jīng)設(shè)置好自己的php.ini文件并把它放在合適的目錄中,就像在Linux上安裝PHP和Apache2的文檔說(shuō)明中所示的那樣(請(qǐng)參閱參考
6、資料)。在調(diào)試PHP應(yīng)用程序時(shí),應(yīng)當(dāng)知道兩個(gè)配置變量。下面是這兩個(gè)變量及其默認(rèn)值:display_errs=Offerr_repting=E_ALL通過(guò)在php.ini文件中搜索它們,可以發(fā)現(xiàn)這兩個(gè)變量當(dāng)前的默認(rèn)值。display_errs變量的目的很明顯——它告訴PHP是否顯示錯(cuò)誤。默認(rèn)值是Off。但是,要讓開(kāi)發(fā)過(guò)程介紹print語(yǔ)句因?yàn)閼?yīng)用程序中的功能性bug不會(huì)產(chǎn)生錯(cuò)誤,所以在所有調(diào)試策略中,關(guān)于如何正確地放置和使用print或d
7、ie語(yǔ)句來(lái)調(diào)試PHP應(yīng)用程序的知識(shí)是一種很好的資產(chǎn)??梢杂胮rint語(yǔ)句在代碼中縮小對(duì)問(wèn)題語(yǔ)句的定位,這些語(yǔ)句在語(yǔ)法上沒(méi)有錯(cuò)誤,也不是bug,但是從代碼的功能上看是bug。這些是最難發(fā)現(xiàn)和調(diào)試的bug,因?yàn)樗鼈儾粫?huì)拋出錯(cuò)誤。惟一知道的就是在瀏覽器上顯示的內(nèi)容不是想要的內(nèi)容,或者想要保存在數(shù)據(jù)庫(kù)中的內(nèi)容根本沒(méi)有保存。假設(shè)正在處理通過(guò)GET請(qǐng)求發(fā)送過(guò)來(lái)的表單數(shù)據(jù),想向?yàn)g覽器顯示信息,但是出于某種原因,數(shù)據(jù)沒(méi)有正確地提交,或者不能正確地從GE
8、T請(qǐng)求中讀出。要調(diào)試這類(lèi)問(wèn)題,重要的是用print()或die()語(yǔ)句知道變量的值是什么。die()語(yǔ)句會(huì)中止程序執(zhí)行,并在Web瀏覽器上顯示文本。如果不想注釋掉代碼,而且只想顯示到出錯(cuò)之前的信息和出錯(cuò)信息,不想顯示后面的信息,那么die()語(yǔ)句特別有用。讓我們?cè)赑HP中用print語(yǔ)句來(lái)測(cè)試這個(gè)概念使用print語(yǔ)句進(jìn)行調(diào)試在我作程序員的那些時(shí)候,當(dāng)我在Linux上開(kāi)發(fā)應(yīng)用程序時(shí),沒(méi)有方便的GUI可以告訴我bug在哪,我迅速地發(fā)現(xiàn)我在
9、程序中放的print語(yǔ)句越多,我在應(yīng)用程序中把bug的范圍縮小到一行的機(jī)會(huì)越大。請(qǐng)創(chuàng)建另一個(gè)PHP文件test2.php,并像清單2所示的那樣定義它。清單2.顯示通過(guò)GET提交的所有變量“)feach($_GETas$key=$i)print(“$key=$j“)if($_GET[Submit]==“SendGETRequest“)$j=“done!“Name:Email:您可能會(huì)非常容易地發(fā)現(xiàn)清單2中的bug!您很棒!但請(qǐng)注意這是一個(gè)
10、非常簡(jiǎn)單的腳本,只是作為使用print語(yǔ)句進(jìn)行調(diào)試而展示的一個(gè)例子而已。這個(gè)腳本只是提取GET請(qǐng)求中的所有變量,如果有,就把它們顯示在瀏覽器上。還提供了一個(gè)表單,用GET請(qǐng)求向服務(wù)器發(fā)送變量以進(jìn)行測(cè)試。請(qǐng)看輸出,如圖2所示。圖2.test2.php的輸出現(xiàn)在單擊SendGETRequest按鈕,請(qǐng)注意只有$_GET請(qǐng)求的鍵顯示在瀏覽器上,而正確的值都沒(méi)顯示??梢栽谘h(huán)中放一個(gè)print語(yǔ)句,檢驗(yàn)在feach循環(huán)中每個(gè)元素中是否確實(shí)存在數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論