GVKun编程网logo

XDebug:Windows + Docker + PHPStorm

28

在本文中,您将会了解到关于XDebug:Windows+Docker+PHPStorm的新资讯,并给出一些关于docker环境下,使用phpstorm进行debug、laradockphpstormx

在本文中,您将会了解到关于XDebug:Windows + Docker + PHPStorm的新资讯,并给出一些关于docker环境下,使用phpstorm进行debug、laradock phpstorm xdebug、macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码、nginx – 带有PHPStorm的Xdebug和一个Docker容器的实用技巧。

本文目录一览:

XDebug:Windows + Docker + PHPStorm

XDebug:Windows + Docker + PHPStorm

我的操作系统是Windows10。我已经通过boot2docker镜像运行Docker。我使用的IDE是PHPStorm。我想要做的是使用XDebug进行调试,但是我没有使其运行。我在网上搜索并尝试了发现的示例,但没有帮助。有没有拥有相同架构的人可以帮助我?

编辑:Nginx ist在服务器上运行。

当前设置: xdebug.ini

zend_extension=xdebug.soxdebug.remote_enable=1xdebug.remote_autostart=0xdebug.remote_connect_back=1xdebug.remote_port=9000xdebug.idekey=PhpStorm

PhpStorm服务器 主机是我为SSH连接的相同IP。路径映射已启用。调试器是Xdebug, 我已经使用特定的DBPg代理尝试过,但是没有成功

答案1

小编典典

我知道了。我只是忘了转发港口。我必须通过运行容器docker run -d -p 80:80 -p 9000:9000 -v/mnt/www/foo:/var/www/foo foo

docker环境下,使用phpstorm进行debug

docker环境下,使用phpstorm进行debug

在上一篇文章中,阐述了在phpstorm安装xdebug。实际的开发过程中,由于历史项目的存在,不同框架的存在,我们需要借助docker来快速的实现开发环境的部署与统一,本文将阐述如何在docker下实现项目的xdebug

理论概述

与在本机直接开发不同,docker环境下,大体是这样。

clipboard.png

宿主机,即我们开发用的电脑。

我们看到,有以下几点不同:

PHP环境不同

本机开发时。项目的运行环境与IDEA上的CLI,都是本机环境,相统一。
docker开发时,本机环境与dokcer环境可能不统一。

项目的路径不同

本机开发时,xdebug反馈的项目路径,就是开发机的实际路径。
docker环境下,xdebugdocker主机的路径发送给宿主机,但宿主机接收到,在本机上的此路径上,找不到对应的文件。当然,也就没有办法进行正确的信息显示。

远程地址不同

本机开发时,远程主机地址就是本机地址,所以是127.0.0.1
docker开发时,远程主机地址,应该是宿主机地址。

实施

总结出上面的几点不同后,开始实施也变得简单了。

统一PHPSTORM与docker的PHP环境

配置 -> Languages .. -> PHP
CLI Interpreter ... -> + -> From Docker Vagrant

clipboard.png

如果不清楚PHP的路径的话,进行DOCKER容器,使用whereis php。如果在service找不到docker,需要进入配置 -> docker -> + -> 确定,则phpstorm会自动为我们找到当前存在的容器。

映射路径

配置 -> Languages .. -> PHP -> SERVICES -> +

clipboard.png

前面提本地项目路径,后面对应docker项目路径。

注意:为了保持统一,在docker容器配置时,应该使用volumes来进行磁盘映射。

修改远程地址

修改docker容器中的,php.ini中的xdebug.remote_host=host.docker.internal

host.docker.internal代表:宿主机

添加项目配置信息

clipboard.png

clipboard.png

clipboard.png

clipboard.png

总结

弄懂原理,善于看日志才是解决问题的捷径。

laradock phpstorm xdebug

laradock phpstorm xdebug

安装 Xdebug 扩展

  • 编辑 laradock 目录下 .env 文件,修改以下两项
    WORKSPACE_INSTALL_XDEBUG=true PHP_FPM_INSTALL_XDEBUG=true
  • 修改后执行 docker-compose build PHP-fpm workspace 使配置生效
 

配置 Xdebug

    • 编辑 laradock/workspace/xdebug.ini 及 laradock/PHP-fpm/xdebug.ini,具体配置如下

      xdebug.remote_host=docker.for.win.localhost xdebug.remote_connect_back=0 xdebug.remote_port=9000 xdebug.idekey=PHPSTORM xdebug.remote_autostart=0 xdebug.remote_enable=0 xdebug.cli_color=0 xdebug.profiler_enable=0 xdebug.profiler_output_dir="~/xdebug/PHPstorm/tmp/profiling" xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.var_display_max_children=-1 xdebug.var_display_max_data=-1 xdebug.var_display_max_depth=-1

      其中 remote_host 很关键。我使用的是 windown,如使用 Mac 应修改为 docker.for.mac.localhost(ps:可以在未配置成功的情况下,运行西面的vildate 根据他的提示,填写remote_host)

       
       

      配置 PHPStorm

    • 配置 PHP server,具体配置如图

      file

       

      其中 server name 需和 laradock 目录中 .env 文件中 PHP_IDE_CONfig 配置项一致,默认为 laradock

       

    • 配置、验证 Xdebug

      • 配置保持默认配置即可,修改完配置后需校验配置

        file

         
      • 点击 Validate 后界面如图

        file

         

        点击下方 Validate 按钮,校验成功后如图

        file

         

        填写校验脚本地址时,需注意,如项目为 laravel ,目录必须为 public 目录。在这一步我被坑了很久,直接填写项目目录校验会 404
      • 添加 debug 项目配置
        run -> Edit Configurations,添加 PHP Remote Debug。其中 server 为 laradock 的 PHP_IDE_CONfig 配置项,默认为 laradock,IDE key 为 PHPStorm。如图:

        file

         
      • 配置完成后,选择上一步配置的 remote debug 启功,设置断点,刷新浏览器项目网页,即可开始调试。
      • 注意:xdebug.ini是由laradock/PHP-fpm文件下的xdebug.int复制进去的,所以如果要修改要么从新build PHP-fpm或者进入PHP-fpm容器进行修改xdebug.ini配置,配置文件地址“/usr/local/etc/PHP/conf.d/”
      • 运行PHPstorm可能出现文件映射错误的提示,这时候需要在setting/languages&framework/PHP/Servers新增的laradock进行编辑,使用use path mapping,幷把project files里面的Aboslute path on the server改为laradock文件目录地址

macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码

macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码

0x00 描述

宿主机是 mac mini,构建的项目在 docker 中,所以需要在 PHPStorm 上配置 Xdebug 进行远程代码调试。

 

0x01 环境

宿主机:macOS High Sierra 10.13.6
Docker:Docker version 18.06.1-ce, build e68fc7a
容器环境:CentOS Linux release 7.5.1804 (Core) + PHP 7.0.32 + nginx/1.12.2 + Xdebug 2.6.1
PhpStorm:2018.2.5

 

0x03 下载安装 Xdebug

下载 Xdebug

首先要确定 Xdebug 的版本要和环境中的 PHP 版本相对应。

进入 docker 环境,打印 phpinfo () 的输出页面,或者在命令行输入

php -r "phpinfo();"

得到的结果,全选,复制,把结果粘贴到 https://xdebug.org/wizard.php 的文本框中,查看对应的 Xdebug 版本。

 

安装 Xdebug

把得到的 Xdebug 版本下载到 docker 环境中,按照 https://xdebug.org/wizard.php 的说明进行安装:

Download xdebug-2.6.1.tgz
Unpack the downloaded file with tar -xvzf xdebug-2.6.1.tgz
Run: cd xdebug-2.6.1
Run: phpize (See the FAQ if you don''t have phpize.

As part of its output it should show:

Configuring for:
...
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
If it does not, you are using the wrong phpize. Please follow this FAQ entry and skip the next step.

Run: ./configure
Run: make
Run: cp modules/xdebug.so /usr/lib64/php/modules
Update /etc/php.ini and change the line
zend_extension = /usr/lib64/php/modules/xdebug.so

 

0x04 配置 PHP 与 Xdebug

在 docker 中,根据 phpinfo 的 php.ini 路径,打开 php.ini,加入(编辑)以下代码:

[xdebug]
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=10.203.17.92
xdebug.remote_port=9101
xdebug.idekey=PHPSTORM
xdebug.auto_trace=1
xdebug.auto_exception_trace=1
xdebug.remote_autostart=1
xdebug.collect_vars=1
xdebug.collect_return=1
xdebug.collect_params=1
xdebug.show_local_vars=1
xdebug.profiler_enable=1
xdebug.trace_enable_trigger=1
xdebug.remote_log="/var/log/php.xdebug.log"

有几个地方要注意一下:

1. xdebug.remote_host

这是宿主机的 ip,在 docker 外(mac 环境中),输入命令:

ifconfig

找到 en0 中的 inet:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
    ether 68:fe:f7:0a:81:ff 
    inet6 fe80::4f0:bb3b:4a49:d7f9%en0 prefixlen 64 secured scopeid 0x5 
    inet 10.203.17.92 netmask 0xffffff00 broadcast 10.203.17.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (100baseTX <full-duplex>)
    status: active

xdebug.remote_host 就是上面例子中的 10.203.17.92

 

2. xdebug.remote_port

这里默认是 9000 端口,改一下避免和 php-fpm 的 9000 端口冲突

 

3. xdebug.remote_log

配置一下,方便排错

 

另外附上 /etc/php.d/xdebug.ini:

[xdebug]
; repeated defind at /etc/php.d/15-xdebug.ini file
; zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable = on
xdebug.remote_host = 10.203.17.92
xdebug.remote_port = 9101
xdebug.idekey = "PHPSTORM"

这里和 php.ini 保持一致。

 

 

0x05 配置 PHPStorm

1. 进入 preferences

 

2. 进入 Languages & Frameworks - PHP -Debug ,找到 Xdebug,编辑监听端口和 php.ini 保持一致。 

 

3. 进入 DBGp Proxy,端口和 php.ini 中配置保持一致,配置如下:

 

4. 进入 Servers,点 “+” 添加一个测试项目,例子中是 admin,Name 随便填写,Host 写项目的域名,端口 80,Debugger 选 Xdebug,勾选下面的路径映射,在右侧填写与本地项目对应的远程目录

 

5. 保存。

 

6. 编辑配置,选择 Edit Configurations

 

添加一个 PHP Web Page,有的版本是 PHP Web Application,是一样的:

 

填写配置信息:

Server 选择上两步在 Servers 中添加的 Server,这里是 admin,另外 Start URL 选择项目的首页,即使是 https 的 URL,在上述配置端口的地方一样配置成 80:

 

7. 保存。

 

8. 调试:

 在代码中设置断点(“1” 处),打开 “2” 处的电话图标,点击 “3” 处的 debug 选项,会自动跳到浏览器中之前设置的项目首页,当触发到断点时会自动跳到 PHPStorm 中,“4” 处可以跳过断点,“5” 处显示变量的值:

 

 

0x06 安装浏览器 Xdebug 插件

在 google 商店中找到并安装 Xdebug helper,安装之后可以在任意页面启动调试:

 

以下是 Xdebug helper 的设置页面:

在一些 https 的项目中,PHPStorm -> Preference -> Languages & Frameworks -> PHP -> Servers 处的端口可以配置成 443,但是这个时候通过 PHPStorm 的 Debug 按钮从 Start Url 处开始无法调试,原因是 Xdebug 会把调试的地址认为是 http://xxxx.com:443 而不是 https://xxxx.com,此时就可以用浏览器的 Xdebug helper 插件来直接 debug,选择下拉菜单中的第一个 Debug 选项就可以开始 debug 了。

 

nginx – 带有PHPStorm的Xdebug和一个Docker容器

nginx – 带有PHPStorm的Xdebug和一个Docker容器

设置:Windows 10; Docker在Hyper-V上运行Boot2Docker; PHPStorm 9

VM上的Web服务器是Nginx.我已经为PHP5-fpm配置了xdebug.ini:

zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0

如果我设置断点并重新加载页面,我会从PHPStorm中的Xdebug获得传入连接:

Incoming connection

我想知道只显示了一个文件而不是整个项目更大.如果我接受连接,我可以调试第一行,但它不会在我的断点上停止并创建一个服务器条目,如下所示:

Server


什么是主机空的奇怪.
我已经使用正确的映射添加了服务器,但它被忽略了.

那么如何让Xdebug在断点处停下来呢?

解决方法:

What is very strange that host is empty.

PHPStorm需要填写此字段,因为它使用它来识别要使用的服务器条目(以及路径映射) – IDE支持调试在不同域/远程服务器上运行的相同代码库.

在这种特殊情况下,Nginx配置的servername字段/参数为空.您可以通过在Nginx配置文件中提供一些值来解决此问题.

今天的关于XDebug:Windows + Docker + PHPStorm的分享已经结束,谢谢您的关注,如果想了解更多关于docker环境下,使用phpstorm进行debug、laradock phpstorm xdebug、macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码、nginx – 带有PHPStorm的Xdebug和一个Docker容器的相关知识,请在本站进行查询。

本文标签: