Docker环境下使用PHPStorm+Xdebug调试PHP


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上自行查看

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。
查看宿主机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
挂载xdebug配置

环境运行成功后,可以通过phpinfo()检验配置是否正确
检验配置一
检验配置二

Mac OS 环境中xdebug.remote_host必须为宿主机真实IP

四、PHPStorm配置

在PhpStorm中配置php debug,注意端口为9000,要和上面文件中的xdebug.remote_port一致:
配置Debug

配置DBGp Proxy
配置DBGp Proxy

创建Servers
进入 Servers,点 “+” 添加一个测试项目,Name 随便填写,Host 写项目的域名,端口 80,Debugger 选 Xdebug,勾选下面的路径映射,在右侧填写与本地项目对应的远程目录
创建Servers

敲黑板划重点!!! 一定要正确填写本机项目目录和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插件设置
Xdebug helper插件安装成功之后浏览器右上角会出现debug按钮,在安装上右键选择"选项",IDE key选择"PHPSTORM"点击save按钮即可。
Xdebug helper插件设置

启动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一致,打开监听。就是下图中的电话图标。
Debug配置

注意:一定要确保监听已经打开

调试
在代码设置断点就可以看到调试结果了
断点调试

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Docker环境下使用PHPStorm+Xdebug调试PHP


愿你勿忘初心,并从始至终