前言
xdebug是用于php的调试插件,可以让我们进行远程调试,在PHP代码进行调试的时候可以不用var_dump()
了。由于docker用起来比较方便,我之前就写过一个Dockerfile用于搭建xdebug环境,最近想做点代码审计,然后又把之前写的东西又改了改。
xdebug的工作原理
- IDE首先监听9000和9003端口,同时做好路径映射
- 浏览器访问服务器,并且在Cookie中携带
XDEBUG_SESSION=IDEKEY
- 服务器检测到Cookie时将debug信息转发到客户端的debug端口上进行调试
基于docker搭建xdebug调试环境
安装xdebug扩展
首先需要下载安装linux下可用的xdebug扩展:https://pecl.php.net/package/xdebug
然后在容器中执行pecl install xdebug-3.1.5.tgz
就可以安装好xdebug
xdebug配置文件
xdebug的配置文件如下
|
|
xdebug配置文件中需要有客户端的地址和端口,在docker中可以通过host.docker.internal
访问到宿主机。不过由于在Mac下无法通过这种方式访问宿主机,只能手动指定ip
打包成镜像
调试好Dockerfile之后我制作了e4stjun/xdebug3
镜像,通过执行docker run -p 8888:80 -v "c:\code:/var/www/html/" -d e4stjun/xdebug3
就能直接搭起来xdebug环境。然后再写个docker-compose.yaml,比如审计一些cms还需要mysql数据库,就可以再pull一个mysql的镜像,还有时候需要对apache配置文件进行修改也可以直接在宿主机修改,不需要进入容器内再编辑:
|
|
我也在自己的服务器上放了一份xdebug3fordocker可以自己下载。
使用方法
所以其实只需要将解压这份文件,将源码放进src文件夹中,然后docker-compose up -d
就能运行起来
PHPSTORM开启监听
需要用PHPSTORM再Debug Configuration处设置PHP Remote Debug,并且设置好目录映射以及IDEkey,主要注意圈出来的几个地方就行了:
Xdebug Helper插件
到这里想要开启debug还需要客户端在访问服务器的时候在Cookie中携带XDEBUG_SESSION=IDEKEY
,Xdebug Helper是Chrome中的一个插件,可以让我们在访问服务器的时候自动带上对应的Cookie:
在xdebug helper中还需要设置对应的IDE key:
调试
然后使用PHPSTORM在代码中下断点,然后开着xdebug helper访问服务器就可以开始调试了