Php 使用vagrant/puppet自动设置xdebug.remote_主机ip地址

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

我正在使用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',
'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的机器上工作。 所以,我是这样做的:

  • 我已经在VirtualBox中创建了虚拟网络接口(我不知道,vagrant中是否有此选项,但应该有),并将其本地地址设置为
    192.168.100.1
    , 因此,我真正的机器有两个地址:
    eth0:192.168.1.2
    ,和
    vboxnet0:192.168.100.1
  • 我已使用以下值配置虚拟机:
    IP=192.168.100.100
    ,默认网关=
    192.168.100.1
  • 将我的XDebug配置为
    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更新了答案