在本文中,您将会了解到关于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
- docker环境下,使用phpstorm进行debug
- laradock phpstorm xdebug
- macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码
- nginx – 带有PHPStorm的Xdebug和一个Docker容器
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
在上一篇文章中,阐述了在phpstorm
安装xdebug
。实际的开发过程中,由于历史项目的存在,不同框架的存在,我们需要借助docker
来快速的实现开发环境的部署与统一,本文将阐述如何在docker
下实现项目的xdebug
。
理论概述
与在本机直接开发不同,docker
环境下,大体是这样。
宿主机,即我们开发用的电脑。
我们看到,有以下几点不同:
PHP环境不同
本机开发时。项目的运行环境与IDEA上的CLI,都是本机环境,相统一。docker
开发时,本机环境与dokcer
环境可能不统一。
项目的路径不同
本机开发时,xdebug
反馈的项目路径,就是开发机的实际路径。docker
环境下,xdebug
将docker
主机的路径发送给宿主
机,但宿主机
接收到,在本机上的此路径上,找不到对应的文件。当然,也就没有办法进行正确的信息显示。
远程地址不同
本机开发时,远程主机地址就是本机地址,所以是127.0.0.1
。docker
开发时,远程主机地址,应该是宿主机地址。
实施
总结出上面的几点不同后,开始实施也变得简单了。
统一PHPSTORM与docker的PHP环境
配置 -> Languages .. -> PHP
CLI Interpreter ... -> + -> From Docker Vagrant
如果不清楚PHP的路径的话,进行DOCKER容器,使用whereis php
。如果在service
找不到docker
,需要进入配置 -> docker
-> + -> 确定,则phpstorm
会自动为我们找到当前存在的容器。
映射路径
配置 -> Languages .. -> PHP -> SERVICES -> +
前面提本地项目路径,后面对应docker
项目路径。
注意:为了保持统一,在docker
容器配置时,应该使用volumes
来进行磁盘映射。
修改远程地址
修改docker
容器中的,php.ini
中的xdebug.remote_host=host.docker.internal
host.docker.internal
代表:宿主机
添加项目配置信息
总结
弄懂原理,善于看日志才是解决问题的捷径。
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,具体配置如图
其中 server name 需和 laradock 目录中 .env 文件中 PHP_IDE_CONfig 配置项一致,默认为 laradock -
配置、验证 Xdebug
- 配置保持默认配置即可,修改完配置后需校验配置
- 点击 Validate 后界面如图
点击下方 Validate 按钮,校验成功后如图
填写校验脚本地址时,需注意,如项目为 laravel ,目录必须为 public 目录。在这一步我被坑了很久,直接填写项目目录校验会 404 - 添加 debug 项目配置
run -> Edit Configurations,添加 PHP Remote Debug。其中 server 为 laradock 的 PHP_IDE_CONfig 配置项,默认为 laradock,IDE key 为 PHPStorm。如图: - 配置完成后,选择上一步配置的 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 环境中的代码
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容器
设置: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获得传入连接:
我想知道只显示了一个文件而不是整个项目更大.如果我接受连接,我可以调试第一行,但它不会在我的断点上停止并创建一个服务器条目,如下所示:
什么是主机空的奇怪.
我已经使用正确的映射添加了服务器,但它被忽略了.
那么如何让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容器的相关知识,请在本站进行查询。
本文标签: