配置本地 docker 中运行的 PHP xdebug 环境

在最近的调试过程中一直无法正确断点,最后发现是 xdebug 的配置问题,记录一下。

在 Docker 中配置 PHP 和 Xdebug 调试环境,通常从以下几个步骤开始:

1. 创建一个包含 PHP 和 Xdebug 的 Dockerfile

首先创建一个 Dockerfile,包含 PHP 和 Xdebug 的安装步骤。以下是一个简单的示例:

Dockerfile 复制代码
FROM php:8.2-apache

RUN pecl install xdebug && docker-php-ext-enable xdebug

COPY ./php.ini /usr/local/etc/php/conf.d/
COPY ./000-default.conf /etc/apache2/sites-available/

此示例使用了官方 PHP 8.2 容器,并安装了 Xdebug 扩展。

2. 配置 php.ini 文件

在项目中创建一个 php.ini 文件,包含以下 Xdebug 配置:

ini 复制代码
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.idekey=PHPSTORM
  • xdebug.mode=debug 启用调试模式。
  • xdebug.start_with_request=yes 指示 Xdebug 对每个请求启动调试。
  • xdebug.client_host=host.docker.internal 特殊 DNS 名称,用于从容器内访问主机。Docker 容器通常使用 host.docker.internal 这个别名来引用主机系统。对于 Docker Desktop for Mac 和 Windows 工作。
  • xdebug.client_port=9003 是 Xdebug 3 中的默认监听端口。在 PhpStorm 中也使用相同端口。
  • xdebug.idekey=PHPSTORM 设置 IDE key。这对应于您在 PhpStorm 中配置的 key。

3. 创建并配置虚拟主机(可选)

如果需要,创建一个 000-default.conf 文件,其中包含您的 Apache 虚拟主机配置:

xml 复制代码
<VirtualHost *:80>
    DocumentRoot /var/www/html/public
    <Directory /var/www/html/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

4. 构建并运行 Docker 容器

在 Dockerfile 所在的目录中运行以下命令:

bash 复制代码
docker build -t my-php-xdebug .
docker run -d -p 80:80 --name my-php-xdebug-instance -v $(pwd):/var/www/html my-php-xdebug-container

此命令将构建一个名为 my-php-xdebug 的 Docker 镜像,并使用名为 my-php-xdebug-instance 的实例运行它。将 80:80 映射到主机,以便通过 http://localhost 访问。

5. 配置 PhpStorm

配置 PhpStorm,并确保等待计算机接收 Xdebug 连接(点击小电话图标,启用 PHP debug 监听)。

对项目进行映射配置,确保在 PHPStrom 中可以断点到正确的位置。

6. 设置 PHP_IDE_CONFIG 环境变量

在运行容器时使用 --env 标志设置 PHP_IDE_CONFIG 环境变量:

bash 复制代码
docker run -d --env PHP_IDE_CONFIG="serverName=myServer" my-php-xdebug-instance

将 "myServer" 替换为在第 5 步的 PhpStorm 设置的服务器名称。这是比较重要的一步,如果不设置这个环境变量,那么在 PhpStorm 中断点将不会生效。

相关推荐
sbjdhjd12 小时前
PHP eval 型 RCE:flag 正则过滤与通配符绕过实操 | 01
安全·web安全·网络安全·开源·系统安全·php·网络攻击模型
ymwlchina15 小时前
给 JetBrains 配个 CodeArts Agent 跳转键
phpstorm·editorjumper·jetbrains ide插件
qetfw16 小时前
Debian Nginx + PHP-FPM 配置:FastCGI、站点目录与访问验证
linux·nginx·debian·php
啊阿狸不会拉杆21 小时前
《计算机网络-自顶向下方法》3.6 拥塞控制原理 读书笔记
计算机网络·智能路由器·php
郑州光合科技余经理1 天前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
LorryJovens1 天前
【LAAP科研】CEN因果等价网络理论---从双缝干涉到因果等价
开发语言·php
Casual1 天前
【网络基础进阶】:看懂子网划分与 VLAN
开发语言·网络·php
0xBADCODE1 天前
CTF Writeup 合集
安全·web安全·网络安全·系统安全·密码学·php·ctf
IPdodo_1 天前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试
砚凝霜2 天前
【软考信息安全】第二章 网络攻击基础与常见技术方法
网络·安全·php