时下,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代码的运行状态。
【编辑推荐】