如何跟踪 Xdebug 请求是否从我的浏览器/docker 容器发送?
How can I track if an Xdebug request is being sent from my browser / docker container?
我有一个 PhpStorm IDE 设置了 Xdebug,一个 docker 容器设置了 Xdebug 并应用了浏览器模块。但是,当我尝试 'pick up the phone' 并刷新环境中包含的代码时,什么也没有得到。
我尝试了各种端口和服务器名称,以及我能找到的教程。我不确定我的 docker 是安全问题还是设置不当,但我相对确定 PhpStorm 设置是正确的。
我试过在 Dockerfile 中公开端口(9000 和 9001)
我的 .php 文件只是 echo 和一些应用了断点的数学:
echo("TEST 1<br>");
$test = 2;
echo("TEST " . $test . "<br>");
$testArray = xdebug_get_code_coverage();
var_dump($testArray);
phpinfo();
dd("TEST 3");
在我的 .env 文件中,定义了以下内容:
PHP_IDE_CONFIG=serverName=jumbledowns-demo
XDEBUG_CONFIG=remote_host=localhost remote_port=9001
我的 Dockerfile 设置了 Xdebug:
RUN pecl install xdebug; \
docker-php-ext-enable xdebug; \
echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini;
浏览器端的 PHPinfo 显示了预期的代码,Xdebug 的设置如下:
xdebug.remote_host localhost localhost
xdebug.remote_log no value no value
xdebug.remote_mode req req
xdebug.remote_port 9001 9000
我已经尝试在上面使用 URL 和分配的 IP 地址,并且可以根据需要更改它们。
理想情况下,我希望能够有一个命令行日志或输出显示 Xdebug 正在尝试调用什么以及在哪个端口上。
为了找出 Xdebug 试图做什么,您需要将 xdebug.remote_log
设置设置为非空值,例如 xdebug.remote_log=/tmp/xdebug.log
。该文件将包括所有连接尝试,以及建立连接后的通信协议内容。
remote_host=localhost
几乎肯定是不正确的,因为 PHP 和 Xdebug,docker 容器中的 运行 需要打开到此主机的连接,并且 localhost
,不会是正确的 hostname/IP 地址。它更有可能是 host.docker.internal
或类似的东西,或者更确切地说,硬编码运行 IDE 的机器的 IP 地址,可以从 docker 容器访问。
我有一个 PhpStorm IDE 设置了 Xdebug,一个 docker 容器设置了 Xdebug 并应用了浏览器模块。但是,当我尝试 'pick up the phone' 并刷新环境中包含的代码时,什么也没有得到。
我尝试了各种端口和服务器名称,以及我能找到的教程。我不确定我的 docker 是安全问题还是设置不当,但我相对确定 PhpStorm 设置是正确的。
我试过在 Dockerfile 中公开端口(9000 和 9001)
我的 .php 文件只是 echo 和一些应用了断点的数学:
echo("TEST 1<br>");
$test = 2;
echo("TEST " . $test . "<br>");
$testArray = xdebug_get_code_coverage();
var_dump($testArray);
phpinfo();
dd("TEST 3");
在我的 .env 文件中,定义了以下内容:
PHP_IDE_CONFIG=serverName=jumbledowns-demo
XDEBUG_CONFIG=remote_host=localhost remote_port=9001
我的 Dockerfile 设置了 Xdebug:
RUN pecl install xdebug; \
docker-php-ext-enable xdebug; \
echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini;
浏览器端的 PHPinfo 显示了预期的代码,Xdebug 的设置如下:
xdebug.remote_host localhost localhost
xdebug.remote_log no value no value
xdebug.remote_mode req req
xdebug.remote_port 9001 9000
我已经尝试在上面使用 URL 和分配的 IP 地址,并且可以根据需要更改它们。
理想情况下,我希望能够有一个命令行日志或输出显示 Xdebug 正在尝试调用什么以及在哪个端口上。
为了找出 Xdebug 试图做什么,您需要将 xdebug.remote_log
设置设置为非空值,例如 xdebug.remote_log=/tmp/xdebug.log
。该文件将包括所有连接尝试,以及建立连接后的通信协议内容。
remote_host=localhost
几乎肯定是不正确的,因为 PHP 和 Xdebug,docker 容器中的 运行 需要打开到此主机的连接,并且 localhost
,不会是正确的 hostname/IP 地址。它更有可能是 host.docker.internal
或类似的东西,或者更确切地说,硬编码运行 IDE 的机器的 IP 地址,可以从 docker 容器访问。