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