利用PDT在Eclipse中調(diào)試PHP應(yīng)用實(shí)例
時(shí)下,Eclipse作為最流行的集成開(kāi)發(fā)環(huán)境之一,廣受開(kāi)發(fā)者尤其是Java開(kāi)發(fā)者的青睞,51CTO也為讀者們做過(guò)一次“Eclipse到底是個(gè)什么玩意”的連載。在連載中51CTO除了介紹Eclipse對(duì)Java開(kāi)發(fā)的支持,在第二部當(dāng)中還提到Eclipse提供了PHP Development Toolkit(以下簡(jiǎn)稱(chēng)PDT),幫助使用Eclipse的開(kāi)發(fā)者進(jìn)行PHP應(yīng)用的開(kāi)發(fā),但在PDT中,調(diào)試PHP應(yīng)用,尤其是聯(lián)機(jī)調(diào)試PHP應(yīng)用卻并不容易,碰巧在sMash開(kāi)發(fā)過(guò)程中找到了一些聯(lián)機(jī)調(diào)試的方法,在這里分享給大家。
準(zhǔn)備工作
要通過(guò)Eclipse開(kāi)發(fā)調(diào)試PHP應(yīng)用,當(dāng)然Eclipse的開(kāi)發(fā)環(huán)境是少不了的,在這里可以下載到Eclipse for PHP Developers。另外,如果采用sMash進(jìn)行PHP的開(kāi)發(fā)調(diào)試,需要先下載WebSphere sMash DE 并解壓到sMash的安裝目錄。以下是下載地址http://www.projectzero.org/sMash/1.1.x/download/然后,在Eclipse中通過(guò)以下站點(diǎn),更新WebSphere sMash feature for PDT 2.0.x https://www.projectzero.org/zero/indy.dev/latest/update/zero.eclipse.php/
安裝WebSphere sMash feature for PDT 2.0.x后,需要在Eclipse的preference中(點(diǎn)擊菜單Window -> Preferences便可進(jìn)入)指定WebSphere sMash的安裝目錄(如圖中的E:\apps\zero)
#p#
通過(guò)sMash進(jìn)行調(diào)試
WebSphere sMash是一套Web應(yīng)用程序的開(kāi)發(fā)和運(yùn)行環(huán)境,sMash中攜帶的P8運(yùn)行時(shí)能支持PHP應(yīng)用程序的運(yùn)行,同時(shí)sMash為Eclipse提供的sMash開(kāi)發(fā)環(huán)境也能很好的支持PHP應(yīng)用程序的開(kāi)發(fā)調(diào)試。我認(rèn)為通過(guò)sMash開(kāi)發(fā)調(diào)試PHP應(yīng)用能帶來(lái)三個(gè)好處:
PHP項(xiàng)目直接依賴(lài)于sMash運(yùn)行環(huán)境,啟動(dòng)PHP項(xiàng)目就啟動(dòng)了sMash的Web服務(wù)器,不再需要應(yīng)用部署的過(guò)程。
P8運(yùn)行時(shí)自身攜帶PHP調(diào)試器,無(wú)需擴(kuò)展就能支持PHP應(yīng)用的聯(lián)機(jī)調(diào)試。同時(shí)P8支持最新的Java運(yùn)行時(shí),PHP開(kāi)發(fā)者不僅能調(diào)用PHP擴(kuò)展庫(kù)中提供的功能也能方便地調(diào)用Java類(lèi)庫(kù)中的豐富功能。
sMash項(xiàng)目以組件化的方式組織項(xiàng)目依賴(lài),能以組建化的方式開(kāi)發(fā)PHP應(yīng)用,同時(shí),由于sMash已在多個(gè)公共云和私有云服務(wù)上提供鏡像,可以將PHP等腳本開(kāi)發(fā)應(yīng)用引入云計(jì)算。
不過(guò),因?yàn)镻8運(yùn)行時(shí)并非支持所有的PHP擴(kuò)展,所以一些非常用的PHP擴(kuò)展庫(kù)可能無(wú)法再sMash上運(yùn)行。
要在sMash上調(diào)試PHP應(yīng)用,首先需要在Eclipse中新建一個(gè)WebSphere sMash PHP application項(xiàng)目,第一次創(chuàng)建sMash PHP項(xiàng)目時(shí),由于sMash需要從遠(yuǎn)程的repository中下載p8 php runtime,所以需要等待一段時(shí)間。
完成項(xiàng)目創(chuàng)建后可以看到如下目錄結(jié)構(gòu)
config/php.ini中可以配置p8運(yùn)行時(shí)的PHP擴(kuò)展庫(kù)
所有的PHP頁(yè)面都應(yīng)存放在public目錄下,public目錄下的所有文件都可以按照web url的方式在sMash應(yīng)用服務(wù)器上進(jìn)行訪問(wèn)。
在public目錄下,可以創(chuàng)建一個(gè)演示用的php頁(yè)面helloworld.php,文件內(nèi)容如下:
- <html>
- <body>
- <form method="POST">
- <label>Name:</label>
- <input type="text" name="name"></input>
- <input type="submit" name="submit" value="Submit"></input>
- </form>
- <p>
- <?php
- if(isset($_POST['submit']))
- {
- $name = $_POST['name'];
- if(!empty($name)){
- echo "Hello $name! ";
- }else{
- echo "Hello World! ";
- }
- }
- echo "Welcome to WebSphere sMash.";
- ?>
- </p>
- </body>
- </html>
雙擊php代碼段的第一行設(shè)置斷點(diǎn),右鍵單擊php項(xiàng)目testphp,選擇Debug As -> WebSphere sMash Application,就可以啟動(dòng)sMash服務(wù)器,并在sMash上調(diào)試該應(yīng)用程序。
#p#
按照默認(rèn)設(shè)置,sMash會(huì)監(jiān)聽(tīng)8080端口上的請(qǐng)求,并轉(zhuǎn)發(fā)給testphp進(jìn)行處理。可以通過(guò)http://localhost:8080/helloworld.php 來(lái)訪問(wèn)上文新建的php頁(yè)面。在訪問(wèn)頁(yè)面的同時(shí),Eclipse會(huì)進(jìn)入sMash的Debug Perspective,由此就可以像在eclipse中調(diào)試Java Application一樣調(diào)試sMash PHP應(yīng)用程序,所有的運(yùn)行狀態(tài)都會(huì)反映在Debug Perspective中的各個(gè)視圖中。Debug視圖中可以看到PHP調(diào)用的Stack Trace以及運(yùn)行的線程,Variables視圖中羅列了當(dāng)前運(yùn)行狀況下的變量信息,PHP編輯器中是當(dāng)前運(yùn)行的代碼信息。
通過(guò)xdebug進(jìn)行調(diào)試
由于PHP.net上提供的PHP運(yùn)行時(shí)沒(méi)有調(diào)試功能,因此如果需要在此運(yùn)行時(shí)上調(diào)試PHP應(yīng)用,則需要通過(guò)第三方擴(kuò)展庫(kù)進(jìn)行。Eclipse for PHP Developers集成對(duì)xdebug的支持,因此推薦在php.net提供的運(yùn)行時(shí)上安裝xdebug然后通過(guò)eclipse進(jìn)行調(diào)試。當(dāng)然如果還沒(méi)有安裝php.net運(yùn)行時(shí),必須先安裝Apache HTTP Server和php.net提供的PHP運(yùn)行時(shí)。
要安裝xdebug擴(kuò)展,需要先獲取php運(yùn)行時(shí)的信息。創(chuàng)建一個(gè)test.php文件,內(nèi)容如下:
- <?php phpinfo();?>
將test.php放在php運(yùn)行時(shí)所在的http服務(wù)器上,訪問(wèn)test.php頁(yè)面可以得到php運(yùn)行時(shí)的信息。
復(fù)制頁(yè)面,并將信息粘貼至此URL http://xdebug.org/find-binary.php 頁(yè)面中的文本框。點(diǎn)擊Analyse my phpinfo() output。就可以獲得根據(jù)php運(yùn)行時(shí)信息所生成的安裝指南,根據(jù)安裝指南,下載xdebug并設(shè)置完成php.ini,重啟http服務(wù)器,xdebug就可以運(yùn)作了。
用xdebug調(diào)試需要新建PHP項(xiàng)目。
#p#
創(chuàng)建完項(xiàng)目就可以在項(xiàng)目中,新建PHP頁(yè)面并設(shè)置斷點(diǎn)。通過(guò)右鍵點(diǎn)擊PHP文件,選擇Debug As -> Debug Configuration就可以開(kāi)始配置調(diào)試器
新建一個(gè)PHP Web Page類(lèi)別的配置,選擇XDebug作為調(diào)試器,并選擇服務(wù)器,圖中的Default PHP Web Server是localhost。選擇需要調(diào)試的php頁(yè)面和在服務(wù)器端的位置。點(diǎn)擊Debug,就可以通過(guò)訪問(wèn)在服務(wù)器上的php頁(yè)面開(kāi)始調(diào)試。因?yàn)镋clipse沒(méi)有PHP頁(yè)面的部署功能,因此需要開(kāi)發(fā)者自己復(fù)制項(xiàng)目中的PHP頁(yè)面到服務(wù)器端,并且確保服務(wù)器端的頁(yè)面和Eclipse項(xiàng)目中的PHP頁(yè)面的一致性。
下圖就是Eclipse中的PHP Debug Perspective,其中的各個(gè)視圖顯示PHP代碼的運(yùn)行狀態(tài)。
【編輯推薦】