資源描述:
《PHP程序員的優(yōu)化調(diào)試技術(shù)和技巧.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、PHP程序員的優(yōu)化調(diào)試技術(shù)和技巧 本文介紹調(diào)試PHP應(yīng)用程序的各種方法,包括在ApacheandPHP中打開(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è)有效卻很基本的調(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。PHPEcli
2、pse是一個(gè)Eclipse插件,能夠強(qiáng)調(diào)常見(jiàn)的語(yǔ)法錯(cuò)誤,可以與調(diào)試器結(jié)合起來(lái)用于設(shè)置斷點(diǎn)?! ≡O(shè)置 要學(xué)習(xí)本文描述的概念,需要PHP、Web服務(wù)器和Eclipse。調(diào)試器擴(kuò)展支持的PHP版本是V5.0.3?! ∥覀冃枰粋€(gè)Web服務(wù)器來(lái)解析用PHP創(chuàng)建的頁(yè)面并把它們顯示到瀏覽器。本文中使用的是Apache2。但是,任何Web服務(wù)器都可以滿足要求?! ∫帽疚闹薪榻B的一些調(diào)試技術(shù),需要安裝EclipseV3.1.1和插件PHPEclipseV1.1.8。由于Eclipse要求Java?技術(shù),所以還要下載它?! ∵€需要PHP的調(diào)試器擴(kuò)展模塊。安裝它略有些麻煩。請(qǐng)仔細(xì)跟隨安裝調(diào)試器擴(kuò)
3、展的操作說(shuō)明?,F(xiàn)在,先在php.ini文件中注釋掉那些要求裝入和配置PHP擴(kuò)展的行。在需要使用調(diào)試器的時(shí)候,再取消注釋?! ≌?qǐng)參閱參考資料獲得下載信息?,F(xiàn)在介紹出錯(cuò)消息?! 〕鲥e(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)?! ∫部梢杂贸鲥e(cuò)消息為自己服務(wù),因?yàn)樗鼈儠?huì)顯示拋出或生成錯(cuò)誤的正確代碼行。這樣,調(diào)試就變成在瀏覽器上查看生成的錯(cuò)誤所顯示的行號(hào),并在代碼中檢
4、查這一行。稍后,將會(huì)看到PHPEclipse插件通過(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è)置?! HP的錯(cuò)誤報(bào)告 php.ini文件中有許多配置設(shè)置。您應(yīng)當(dāng)已經(jīng)設(shè)置好自己的php.ini文件并把它放在合適的目錄中,就像在Linux上安裝PHP和Apache2的文檔說(shuō)明中所示的那樣(請(qǐng)參閱參考資料)。在調(diào)試PHP應(yīng)用程序時(shí),應(yīng)當(dāng)知道兩個(gè)配置變量。下面是這兩個(gè)變量及其默認(rèn)值: display_erro
5、rs=Off error_reporting=E_ALL 通過(guò)在php.ini文件中搜索它們,可以發(fā)現(xiàn)這兩個(gè)變量當(dāng)前的默認(rèn)值。display_errors變量的目的很明顯——它告訴PHP是否顯示錯(cuò)誤。默認(rèn)值是Off。但是,要讓開(kāi)發(fā)過(guò)程更加輕松,請(qǐng)把這個(gè)值設(shè)為On: display_errors=On error_reporting變量的默認(rèn)值是E_ALL。這個(gè)設(shè)置會(huì)顯示從不良編碼實(shí)踐到無(wú)害提示到出錯(cuò)的所有信息。E_ALL對(duì)于開(kāi)發(fā)過(guò)程來(lái)說(shuō)有點(diǎn)太細(xì),因?yàn)樗谄聊簧蠟橐恍┬∈拢ɡ缱兞课闯跏蓟┮诧@示提示,會(huì)搞糟瀏覽器的輸出。我只想看到錯(cuò)誤和不良編碼實(shí)踐,
6、但是不想看到無(wú)害的提示。所以,請(qǐng)用以下值代替error_reporting的默認(rèn)值: error_reporting=E_ALL&~E_NOTICE 重新啟動(dòng)Apache,就全部設(shè)置好了。接下來(lái),將學(xué)習(xí)如何在Apache上做同樣的事。服務(wù)器上的錯(cuò)誤報(bào)告依賴于Apache正在做的工作,在PHP中打開(kāi)錯(cuò)誤報(bào)告可能沒(méi)法工作,因?yàn)樵谟?jì)算機(jī)上可能有多個(gè)PHP版本。有時(shí)很難區(qū)分Apache正在使用哪個(gè)PHP版本,因?yàn)锳pache只能查看一個(gè)php.ini文件。不知道Apache正在使用哪個(gè)php.ini文件配置自己是一個(gè)安全問(wèn)題。但是,有一種方法可以在Apache中配置PHP變量,
7、從而保證設(shè)置了正確的出錯(cuò)級(jí)別。而且,最好知道如何在服務(wù)器端設(shè)置這些配置變量,以否決或搶占php.ini文件,從而提供更高級(jí)別的安全性。在配置Apache時(shí),應(yīng)該已經(jīng)接觸過(guò)/conf/httpd.conf中http.conf文件中的基本配置。要做在php.ini文件中已經(jīng)做過(guò)的事,請(qǐng)把下列各行添加到httpd.conf,覆蓋任何php.ini文件: php_flagdisplay_errorson php_valueerro