Php 使用vagrant/puppet自动设置xdebug.remote_主机ip地址
我正在使用puppet设置一个流浪环境进行资源调配 我遇到了一个问题,我希望xdebug在运行Php 使用vagrant/puppet自动设置xdebug.remote_主机ip地址,php,xdebug,vagrant,puppet,Php,Xdebug,Vagrant,Puppet,我正在使用puppet设置一个流浪环境进行资源调配 我遇到了一个问题,我希望xdebug在运行vagrant up时“正常工作”,但是我需要在php.ini文件xdebug.remote\u host中指定主机ip地址,显然,这在使用配置的每台机器上都是不同的,因此我希望在发出vagrant up时能够自动更新该值 流浪汉档案: config.vm.network :forwarded_port, guest: 9000, host: 9000 'xdebug.default_enable=1
vagrant up
时“正常工作”,但是我需要在php.ini文件xdebug.remote\u host
中指定主机ip地址,显然,这在使用配置的每台机器上都是不同的,因此我希望在发出vagrant up
时能够自动更新该值
流浪汉档案:
config.vm.network :forwarded_port, guest: 9000, host: 9000
'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'
.ini设置:
config.vm.network :forwarded_port, guest: 9000, host: 9000
'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\u 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()
远程地址192.168.61.2
远程端口51886
只是为了确认一下,如果我给出了我在osx主机上的实际ip地址,那么它工作正常 如中所述,您可以设置选项
xdebug.remote_connect_back = 1
因此,xdebug将连接回请求web页面的主机,并忽略选项“remote\u host”
此解决方案有一个问题:如果您为任何请求启用xdebug,并且用户打开的网页没有正在运行的xdebug客户端(等待从服务器连接),并且具有非关闭的9000
端口,则服务器将等待很长时间(尝试连接到客户端的xdebug会话),在它最终可以加载页面之前。
我在Windows7机器上遇到了这个问题,因为它的防火墙实际上并没有关闭端口,连接软件无法理解,并没有人在监听端口
如果这不起作用:
我也遇到过同样的情况,然后我需要配置VirtualBox VM,它可以在任何具有任何IP的机器上工作。
所以,我是这样做的:
192.168.100.1
,
因此,我真正的机器有两个地址:eth0:192.168.1.2
,和vboxnet0:192.168.100.1
IP=192.168.100.100
,默认网关=192.168.100.1
remote\u ip=192.168.100.1
因此,解决方案是将您的IP地址设置为某个“常量”,只是虚拟设置。如果是运行GNU/Linux或使用docker映像的自定义流浪机器,您可以通过以下命令找到IP:
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
要获取ip,请在第一次运行后执行此命令:
vagrant ssh #login into the machine
奖金信息,以防你是或想运行码头内流浪汉
还有一个有趣的例子是,您在一个docker容器中运行php,该容器是在一个流浪的GNU/Linux映像中生成的。在这种情况下,不要尝试使用运行php映像的shell并运行上面的命令,通过运行以下命令查找VM连接回主机的ip:
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
在运行中的VM的shell中,而在运行中的docker容器上(使用
docker exec
或docker compose exec
)。对于入口点脚本,为XDEBUG ip设置一个环境变量,如果该变量为空,则自动设置该值,然后自动设置ip。我尝试过,但没有成功。我查看了远程主机super-global,I.p是运行PHP的流浪客机器的,而不是我的主机。好的,那么你应该尝试以下方法:1)配置你的xdebug使用localhost:9000,这样它将连接到虚拟机的端口,2)然后将该端口转发到你真正的机器上。运气不好。用我的配置更新了这个问题。我注意到来自phpinfo的远程地址是192.168.61.2
,而在OSX(主机)中,来自ifconfig的vmnet ip是192.168.213.1、192.168.56.1、192.168.61.2
用新的infoSee更新了答案