Docker + PhpStorm + Xdebug

安装 Docker

Docker 官网 下载桌面应用安装包

安装 dnmp

在日常开发中,使用 php 的同时还会使用到 Nginx、Mysql、Redis、RabbitMQ 等程序,所以需要通过 Docker Compose 来构建一个完整的开发环境,比较流行的就是 yeszao/dnmp
我们从 github 上把项目 clone 下来

git clone https://github.com/yeszao/dnmp.git
.
.
.
# 下载完成后
cd dnmp
cp .env.sample .env
cp docker-compose.sample.yml docker-compose.yml

以 php8.0 为例,在 .env 文件中找到 PHP80_EXTENSIONS 配置项,根据提示把 xdebug 加进去,然后在 ./services/php80/php.ini 配置文件底部加入 xdebug 对应的配置项:

[XDebug]
zend_extension=xdebug
xdebug.mode=debug
; 每次请求总会开启 debuging session
xdebug.start_with_request=yes
; IDE 所在的 IP 地址或主机名 ; docker 环境用 host.docker.internal
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
; 调试日志
xdebug.log=/var/log/php/xdebug.log

同时给自己的项目添加一个 Nginx 的配置文件

cd ./services/nginx/conf.d
# {your_project} 需替换为自己的项目名称
cp localhost.conf ${your_project}.conf 

修改 ${your_project}.conf 配置文件, 把fastcgi_pass php:9000; 改为fastcgi_pass php80:9000;即可。

回到 dnmp 目录下,启动容器 nginx 和 php80,当然你也可以启动全部容器,只需去掉后边儿的 nginx 和 php80。

docker compose up nginx php80

由于某些原因,docker 国内的镜像源已全部被封禁,所以需要科学上网才能 up 成功。

接口调试

调试之前请确保 php 对应版本已安装 xdebug 并配置,在 Settings 中找到 PHP -> CLI Interpreter


另外还需添加项目路径映射

一切准备就绪,点击图标

开始监听 PHP Debug 连接,项目代码中添加对应断点,在 postman 或 apifox 中直接发起接口调用即可。

常见问题

  1. PHP_IDE_CONFIG 环境变量未设置
    在对 php 命令行 debug 时, IDE 往往报 PHP_IDE_CONFIG 环境变量未设置,此时只需在 PHP->Server 设置中添加一个服务器假设命令为 local,并配置路径映射,最后在运行 php 脚本之前 执行 export PHP_IDE_CONFIG="serverName=local" 即可。

参考链接

本作品采用《CC 协议》,转载必须注明作者和本文链接
为了点个赞,专门注册的账号
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 15

怎么你也叫summer :joy:

2周前 评论
王成涛 (楼主) 2周前

你这个啥主题啊,分享一下,看上了

2周前 评论
王成涛 (楼主) 2周前
Colorado (作者) 2周前
王成涛 (楼主) 2周前
sanders

既然是结合 docker 那最好是从 dockerfile 开始讲起。否则每次容器重建都手动改一遍 xdebug 配置多累呀?启动之前直接把 xdebug.ini 文件覆盖进去多好。

2周前 评论
王成涛 (楼主) 2周前
巅峰互联

xdebug和 debug 以及 dump 有什么区别。 :joy:

2周前 评论
王成涛 (楼主) 2周前

你这折腾半天累不累啊?要打开Xdebug,在ServBay里面两秒钟搞定,还自带了图形配置 file

2周前 评论
PHPisGod 1周前
王成涛 (楼主) 1周前

2024了哥们, 10 年前挺多写这种文的

1周前 评论
王成涛 (楼主) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!