xdebug 3.0 已彻底废弃所有 xdebug.remote_* 参数,必须替换为新配置:xdebug.remote_enable→xdebug.mode=debug;xdebug.remote_host→xdebug.client_host;xdebug.remote_port→xdebug.client_port(默认9003);xdebug.remote_connect_back→xdebug.discover_client_host=true;xdebug.remote_autostart→xdebug.start_with_request=yes/trigger;xdebug.remote_handler 固定为 dbgp,无需设置。

Xdebug 3.0 的配置不是“改几个名字就行”,而是彻底重构了控制逻辑:用 xdebug.mode 统一开关功能,废弃大量孤立参数,xdebug.remote_* 系列全部失效。直接照搬 2.x 配置必连不上。
哪些 remote_* 参数必须删或替换
Xdebug 3.0 已移除所有带 remote_ 前缀的旧参数,它们不再被读取,即使写在 php.ini 里也完全静默——不会报错,但也不起作用。
-
xdebug.remote_enable→ 由xdebug.mode=debug控制(启用调试)或xdebug.mode=off关闭 -
xdebug.remote_host→ 替换为xdebug.client_host(IDE 所在机器 IP) -
xdebug.remote_port→ 替换为xdebug.client_port(默认9003,非9000) -
xdebug.remote_connect_back→ 替换为xdebug.discover_client_host=true(自动探测客户端 IP) -
xdebug.remote_autostart→ 替换为xdebug.start_with_request=yes或trigger(后者需配合 ?XDEBUG_SESSION_START=1) -
xdebug.remote_handler已固定为dbgp,无需再设;设了也忽略
xdebug.mode 是核心开关,不能漏配
xdebug.mode 是 Xdebug 3 的中枢配置,它决定启用哪些功能模块。只写 debug 不代表“全开”,它仅启用调试器;若还要日志、性能分析等,得显式追加:
- 仅调试:
xdebug.mode=debug - 调试 + 日志:
xdebug.mode=debug,log - 调试 + 性能分析:
xdebug.mode=debug,profile - 全功能(不推荐生产):
xdebug.mode=debug,develop,profile,trace,log
注意:develop 模式会启用错误堆栈美化、超全局变量显示等,但也会轻微拖慢响应;profile 生成 cachegrind 文件,体积大、IO 高,务必配好 xdebug.output_dir 并定期清理。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
Docker / WSL / 远程服务器环境下 client_host 怎么填
xdebug.client_host 必须指向你的 IDE(如 PhpStorm、VS Code)所在机器的真实 IP,不是容器内或 PHP 进程看到的 127.0.0.1。
- 本地开发(PHP 和 IDE 都在本机):
xdebug.client_host=127.0.0.1 - Docker 容器跑 PHP,IDE 在宿主机(Windows/macOS):
xdebug.client_host=host.docker.internal - Docker 容器跑 PHP,IDE 在宿主机(Linux):
xdebug.client_host=172.17.0.1(Docker 默认网关,可用ip route | awk '/default/ { print $3 }'确认) - WSL2 运行 PHP,IDE 在 Windows:
xdebug.client_host=172.28.16.1(查 Windows 的 WSL2 虚拟网卡 IP,或用cat /etc/resolv.conf | grep nameserver | awk '{print $2}') - 远程服务器(PHP 在云服务器):
xdebug.client_host填你本地电脑的**公网 IP**(不推荐)或走 SSH 隧道反向转发(更安全),此时应禁用xdebug.discover_client_host,避免被伪造请求触发调试
迁移后验证失败的三个高频原因
配置改完重启 PHP,php -v 显示 Xdebug 加载成功,但 IDE 就是收不到连接——大概率卡在这三处:
- IDE 监听端口和
xdebug.client_port不一致(尤其容易忽略 PhpStorm 的 “Debug port” 和 “DBGp Proxy port” 是两个不同设置项) -
xdebug.client_host填的是容器内网关或localhost,而 IDE 实际监听的是宿主机网卡,网络不通 - 开了
xdebug.discover_client_host=true却没配xdebug.client_host回退值,当 HTTP 头缺失X-Forwarded-For或REMOTE_ADDR时,Xdebug 无法 fallback,直接放弃连接
最稳的做法:先关掉 xdebug.discover_client_host,明确指定 xdebug.client_host 和 xdebug.client_port,确认通了再按需开启探测逻辑。Xdebug 3 的设计哲学是“显式优于隐式”,别指望它猜对你的网络拓扑。










