我正在使用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的机器上工作。所以,我是这样做的:
- 我已经在VirtualBox中创建了虚拟网络接口(我不知道,在流浪者中有没有这个选项,但应该有),并将其本地地址设置为
192.168.100.1
,所以,我的REAL机器有两个地址:eth0:192.168.1.2
和vboxnet0:192.168.100.1
- 我已经用以下值配置了虚拟机:
IP=192.168.100.100
,默认网关=192.168.100.1
- 将我的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 exec
或docker-compose exec
)。在入口点脚本的情况下,为XDEBUG ip设置一个环境变量并自动设置该值。如果该值为空,则自动设置ip。