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





























