Docker环境下使用PHPStorm+Xdebug调试PHP
一、 环境说明
本教程使用的Mac,Mac OS和Window环境设置有区别,请根据实际情况做适当修改
本机IP:172.16.127.33
测试域名:dev.squirrel.com
php版本: 7.3
Docker版本信息
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:18:17 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.1
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:17:52 2019
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: v1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
二、安装Xdebug,并运行PHP7.3的docker镜像启动调试项目
PHP运行环境可以自己根据实际情况安装,务必要安装xdebug模块。这里提供下已经编译好的PHP5.6、PHP7.2、PHP7.3的Docker镜像,所有提供的docker镜像已安装好xdebug模块。
# 5.6
docker push ponycool/php-dev-5.6:1.0
# 7.2
docker push ponycool/php-dev-7.2:1.0
# 7.3
docker push ponycool/php-dev-7.3:1.0
如果有兴趣也可以去DockerHub上自行查看
注意: 必须安装xdebug模块
三、配置xdebug
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so"
xdebug.remote_enable = on
xdebug.remote_port=9000
xdebug.remote_handler = "dbgp"
;开发机IP地址
xdebug.remote_host = docker.for.mac.localhost
xdebug.remote_log=/tmp/php/xdebug/remote.log
xdebug.profiler_enable = on
xdebug.profiler_enable_trigger = on
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "/tmp/php/xdebug/xdebug_profiler"
;设置的函数调用监测信息的输出路径
xdebug.trace_output_dir ="/tmp/php/xdebug/xdebug_trace"
xdebug.show_local_vars=0
xdebug.default_enable=0
xdebug.idekey=PHPSTORM
xdebug.remote_host为宿主机当前网络中的真实IP,可以通过命令ifconfig en0
查看。mac环境下可以配置 xdebug_remote_host 为 docker.for.mac.localhost 通过静态的配置去动态的访问宿主IP。
xdebug.remote_port
这里默认是 9000 端口,如果使用php-fpm,需要改一下xdebug远程调试端口,避免和 php-fpm 的 9000 端口冲突
更详细的xdebug配置可以查看官网或者参考本站PHPStorm+Wamp环境下如何进行bug断点调试中xdebug配置的详细解读。
如果使用本站提供的Docker镜像请直接把xdebug.ini文件挂载到镜像中/usr/local/etc/php/conf.d/目录,如果不是使用本站提供的Docker镜像,还需要自行配置xdebug.ini
Mac OS 环境中xdebug.remote_host必须为宿主机真实IP
四、PHPStorm配置
在PhpStorm中配置php debug,注意端口为9000,要和上面文件中的xdebug.remote_port一致:
创建Servers
进入 Servers,点 “+” 添加一个测试项目,Name 随便填写,Host 写项目的域名,端口 80,Debugger 选 Xdebug,勾选下面的路径映射,在右侧填写与本地项目对应的远程目录
敲黑板划重点!!! 一定要正确填写本机项目目录和Docker环境下项目目录的映射
验证
选择 Local Web Server or Shared Folder
Path to create validation script: 设置为你当前项目的入口文件所有位置
Url to validation script: 默认就好了
正常的检测结果如下:
注意:以上xdebug.remote_host只有设置为lo0别名IP或宿主机真实IP xdebug才能正常运行若配置为docker默认网桥分配的ip,如172.12.0.1或者lo0别名IP 127.0.0.2等,上述检测虽然正常,但 xdebug仍然不能正常调试
五、安装Xdebug helper插件
因为众所周知的原因,谷歌商店如果无法访问,可以通过源码直接安装。如果和其他人分享安装包可以查看本站文章Chrome如何打包插件。为了方便可以直接点击下载链接下载已经打包好的安装包。
Xdebug helper插件设置
Xdebug helper插件安装成功之后浏览器右上角会出现debug按钮,在安装上右键选择"选项",IDE key选择"PHPSTORM"点击save按钮即可。
启动debug
浏览器右上角臭虫的图标变成绿色说明启动成功
六、配置Host文件
因为我们是通过域名访问的,所有要在本地设置下host映射关系。Mac OS需要修改/etc/hosts
文件
127.0.0.1 dev.squirrel.com
七、调试
至此我们已经完成了大部分设置工作,下面进入Debug阶段。
Debug配置
创建debug配置,name可以自定义,Server选择上面已经创建好的server。IDE key保持和Xdebug helper插件中的IDE key一致,打开监听。就是下图中的电话图标。
Comments | NOTHING