使用流浪者/木偶自动设置xdebug.remote_host-ip地址


Auto setting xdebug.remote_host ip address with vagrant/puppet

我正在使用puppet来设置一个Vagrant环境。

我遇到了一个问题,我希望xdebug在运行vagrant up时"只工作",但我需要在php.ini文件xdebug.remote_host中指定主机的ip地址,很明显,使用配置的每台机器上都会有所不同,所以我希望有一种方法在发出vagrant up时自动更新该值。

流浪者文件:

config.vm.network :forwarded_port, guest: 9000, host: 9000

.ini设置:

'xdebug.default_enable=1',
'xdebug.remote_enable=1',
'xdebug.remote_handler=dbgp',
'xdebug.remote_host=localhost:9000',
'xdebug.remote_port=9000',
'xdebug.remote_autostart=0',
'xdebug.max_nesting_level=250'

我也试过用xdebug.remote_host=localhost

ifconfig来自流浪机器的结果:

vagrant@precise64 ~ : ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:cf:f9:89
      inet addr:192.168.61.142  Bcast:192.168.61.255  Mask:255.255.255.0

phpinfo()

REMOTE_ADDR 192.168.61.2

REMOTE_PORT 51886

只是为了确认一下,如果我给remote_host我在osx主机上的实际ip地址,它就会正常工作。

如中所述http://www.xdebug.org/docs/all_settings,您可以设置选项

xdebug.remote_connect_back = 1

因此,xdebug将连接回请求网页的主机,并将忽略选项"remote_host"。

该解决方案有一个问题:如果您为任何请求启用xdebug,并且用户打开网页时没有运行xdebug客户端(等待来自服务器的连接),并且有未关闭的9000端口,则服务器将等待很长时间(尝试连接到客户端的xdebug会话),然后才能最终加载页面。我在Windows7机器上遇到了这个问题,因为它的防火墙实际上并没有关闭端口,而且连接软件无法理解,没有人在监听端口。

如果这不起作用:

我也有同样的情况,然后我需要带配置的VirtualBox VM,它应该在任何IP的机器上工作。所以,我是这样做的:

  1. 我已经在VirtualBox中创建了虚拟网络接口(我不知道,在流浪者中有没有这个选项,但应该有),并将其本地地址设置为192.168.100.1,所以,我的REAL机器有两个地址:eth0:192.168.1.2vboxnet0:192.168.100.1
  2. 我已经用以下值配置了虚拟机:IP=192.168.100.100,默认网关=192.168.100.1
  3. 将我的XDebug配置为remote_ip=192.168.100.1

现在,我有三份这台机器(我的副本和我同事使用的两份),它工作得很好!

所以,解决方案是将您的IP地址设置为某个"恒定的一个",只是虚拟的。

如果是运行GNU/Linux或使用docker映像的自定义流浪机器,您可以通过以下命令找到ip:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

要获得ip,请在您首先运行之后tun此命令

vagrant ssh #login into the machine

奖金信息,如果你是或想在流浪汉内部管理码头工人

还有一个有趣的例子是,您在一个docker容器中运行php,该容器是在一个流浪的GNU/Linux映像中生成的。在这种情况下,不要试图破坏正在运行的php映像的外壳,并运行上面的命令,通过运行以下命令找到VM连接回主机的ip:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

在运行中的VM的shell和NOT上的一个正在运行的docker容器中(使用docker execdocker-compose exec)。在入口点脚本的情况下,为XDEBUG ip设置一个环境变量并自动设置该值。如果该值为空,则自动设置ip。