不少的非单纯PHP架构的网站系统中,PHP开发的Web系统,往往对特定的服务器环境有依赖,例如使用php开发某些面向开放平台的系统,或者带有支付接口功能的系统,都需要在真正的服务器环境上进行开发与调试。2011年中国PHP技术高峰论坛上,金山技术运营中心技术经理张宴老师介绍了PHP在金山游戏运营中的一些应用实践(传送门:2011中国PHP技术高峰论坛:PHP在金山游戏运营中的应用),在其中提到了PHP的开发团队,使用一致的Linux服务器作为开发调试平台,这样所有开发者可以使用一致的配置文件,也可以进行某些依赖于服务器的开发和测试。
文中张宴老师提到使用本地nginx服务器+远程fastcgi服务器,将本地的共享文件夹映射到远程服务器的模式,在具体实践中我稍作修改:
这样一来,开发者端只需要IDE环境和映射网络驱动器,在服务器端为其建立相应的SMB账号和以开发者IP命名的工作目录。例如开发者A的IP为192.168.137.101,那么他访问192.168.137.10开发服务器时,WebRoot为/home/192.168.137.101。
但是实践中发现这么做有个问题存在,即SMB服务器的读写速度太慢,由于工作区的代码副本包含SVN信息,所以SVN提交或者更新时,经常会出现超时失败的情况。后来研究Netbeans之后,发现其自带强大的远程开发调试功能。方案大致如下:
Netbeans中设置每次保存时,或者运行时将修改通过SSH的SFTP服务上传至测试服务器,开发者可以通过Xdebug进行调试。具体设置步骤如下所述:
配置Xdebug,首先我们来编译安装Xdebug:
wget http://xdebug.org/files/xdebug-2.1.4.tgz
tar xvf xdebug-2.1.4.tgz
cd xdebug-2.1.4
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
打开php.ini文件,为其增加Xdebug小节:
[xdebug]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9001
xdebug.remote_handler = dbgp
需要说明的是,与大多数推荐的Xdebug设置不同,配置中并没有制定remote_host,而是使用了connect_back方式。这样的设置可以允许多人同时进行调试。具体的说明请参考手册:http://xdebug.org/docs/all#communication
在Netbeans中设置与Xdebug通讯的端口:菜单 【工具】-【选项】
接下来以创建一个项目为实例说明。首先在工作区右键选择【新建项目】,打开新建项目对话框:
进行项目基本信息的设置:
设置测试运行模式:
设置远程开发主机:
点击【是】接受密钥:
测试连接成功:
返回继续设置远程开发主机:
完成设置:
到这里,一个可以进行远程调试的项目就建立完成了。接下来我们运行测试:
这时如果修改的文件没有被上传,将会提示上传相关文件:
调试已启动:
对于已经存在的项目,或者从SVN上检出的项目,设为远程调试,可以在项目上右键,选择【属性】,在【运行配置】中进行设置:
关于如何在Netbeans中直接使用SVN,我已经在之前的文章《使用NetBeans进行团队合作PHP项目开发》中进行了说明。想要快速上手Netbeans,还可以查看这篇文章《Netbeans常用快捷键搜集》。
在上传文件时会提示是否接受密钥,切换到“保存时上传”后,只有第一次会提示。