我使用名为“micro-env”的程序在 wsl 2 上安装了一个 docker,
WSL2 固定 IP 是:
172.23.183.202
我想将 xdebug 3 添加到 phpstorm,xdebug 安装在 php 7 docker 容器中。
这是命令的输出:
docker inspect groomrhv2-php -f "{{json .NetworkSettings.Networks }}" --format json | jq .
输出:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "7293963ad4db7c70a3c7e4c24fb7c4e04c26cf4c2c2723a55272aeba90b8fd37",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"443/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "443"
},
{
"HostIp": "::",
"HostPort": "443"
}
],
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
},
{
"HostIp": "::",
"HostPort": "8080"
}
],
"9000/tcp": null
},
"SandboxKey": "/var/run/docker/netns/7293963ad4db",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"groomrhv2_dockerized_default": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"groomrhv2-php",
"groomrhv2-php",
"c1aa5080ef3e"
],
"NetworkID": "3fb9d9c63780fe121610305d6d164d70508c1ebb3c7de9267ddbba3feff39b58",
"EndpointID": "e717eecc4374e4f025bf83b98945d87bd8e973ebd7a53d11538fa10bb460f064",
"Gateway": "172.22.0.1",
"IPAddress": "172.22.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:16:00:05",
"DriverOpts": null
}
}
}
}
然后放入容器内:
docker exec -ti groomrhv2-php bash
容器内 php --ini 的输出:
Cannot load Xdebug - it was already loaded
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File: (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed: /usr/local/etc/php/conf.d/docker-php-ext-config.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
/usr/local/etc/php/conf.d/error_reporting.ini,
/usr/local/etc/php/conf.d/opcache.ini,
/usr/local/etc/php/conf.d/xdebug.ini
xdebug 扩展位于:/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
并且 php.ini 位于:/usr/local/etc/php
在 phpstorm 中我添加了 docker :
然后我添加了 php cli 解释器,如下所示:
这是我的 xdebug.ini 配置:
[xdebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.mode=debug,develop,profile
xdebug.discover_client_host=false
xdebug.client_host=172.23.183.202
xdebug.client_port=9000
xdebug.start_with_request=yes
xdebug.idekey=GroomRHV2
XDEBUG_SESSION=GroomRHV2
xdebug.cli_color=1
xdebug.log_level=3
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
然后我尝试验证 Web 服务器上的调试器配置:
这就是我最终得到的:
我目前无法在 phpstorm 中使用 xdebug 3,如果有人可以帮助我,我将不胜感激! 谢谢你
在我的例子中,通过向 .env 文件添加一个选项(docker-compose 必须有)解决了同样的问题,或者您可以修复 xdebug.ini(如果可以访问的话)
XDEBUG_CONFIG='client_host=172.28.80.1 client_port=9003 start_with_request=yes idekey=PHPSTORM discover_client_host=0'
172.28.80.1 - 我的本地主机 IP (PhpStorm 在这里工作)
原因原来是PHP敲的不是我安装IDE的Windows电脑(172.28.80.1), 但是在WSL虚拟机的IP上(10.5.0.1) 设置 discover_client_host=0 很重要,因为我们不需要通过 xDebug 在 10.5.0.1:9003 连接失败的情况下自动打开套接字。
您还可以在起始 index.php 文件的顶部插入 xdebug_info() 函数,并查看 xdebug 实际上尝试访问的位置:
<?php
xdebug_info();
die;
您可以查看本地主机上打开了哪些端口 netstat -na |找到“9003”
本地主机 IP 必须可以通过 index.php 从您的 php 容器进行 ping 操作,通过 ping 检查,或使用 telnet
检查最后一个可选点,如果没有它,xDebug 已经可以工作,但不会显示调试器停止在哪一行,它是向 Storm 指示您的本地服务器以及真实磁盘上文件的位置以及它们在磁盘中的相应位置。容器