写过php的人都知道,php比较难调试。我们使用的ios client,如果用print的方式打log,会非常痛苦。这两天我调研了下,如果远程监听apache端口来实现php代码的调试。
- 安装zend studio
下载zend studio工具,并激活。
- 安装配置xdebug工具
xdebug我理解的是远程监听apache的某个debug端口,当有http请求时,zend studio会监听并捕捉到相应的请求。
/Applications/XAMPP/xamppfiles/bin/phpize-5.3.1
CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure --enable-xdebug --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config-5.3.1
make&make install
- 复制生成的so文件
我使用的是如下路径,具体哪个路径我觉得并不重要,只需要apache找得到相应的模块即可。
/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/xdebug.so
- 修改php.ini
添加如下配置
zend_extension=/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.auto_trace=0
xdebug.trace_enable_trigger=1
xdebug.show_exception_trace=0
xdebug.remote_enable=1
xdebug.collect_vars=1
xdebug.collect_return=1
xdebug.collect_params=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
配置完毕重启apache服务器。
- 触发debug
我们的客户端不是web浏览器,我们的客户端是ios client。为了触发进入php服务器代码所设置的断点,我们需要在每个http请求的url中加入如下关键参数。
XDEBUG_SESSION_START=ECLIPSE_DBGP
比如你的请求url是
http://127.0.0.1/index.php?param1=value1
加入参数后的请求url应该是
http://127.0.0.1/index.php?XDEBUG_SESSION_START=ECLIPSE_DBGP¶m1=value1