我正在使用puppet进行配置来设置Vagrant环境。
我遇到了一个问题,我希望xdebug在运行vagrant up
时“正常工作”但是我需要在php.ini文件中xdebug.remote_host
指定主机ip地址这在使用配置的每台机器上会有所不同,因此我希望在发出vagrant up
时自动更新该值。
VagrantFile:
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
只是为了确认一下,如果我在我的osx主机上给出remote_host
我的实际IP地址,它就能正常工作。
答案 0 :(得分:9)
如http://www.xdebug.org/docs/all_settings中所述,您可以设置选项
xdebug.remote_connect_back = 1
因此,xdebug将连接回请求网页的主机,并忽略选项“remote_host”。
此解决方案存在一个问题:如果为任何请求和用户启用xdebug,则打开Web页面没有运行xdebug客户端(等待来自服务器的连接),并且具有非关闭9000
端口,服务器会等待很长时间(尝试连接到客户端的xdebug会话),然后才能最终加载页面。
我在Windows 7机器上遇到了这个问题,因为它的防火墙实际上并没有关闭端口,连接软件无法理解,没有人在监听端口。
如果这不起作用:
我有同样的情况,然后我需要VirtualBox VM配置,这应该适用于任何具有任何IP的机器。 所以,我这样做了:
192.168.100.1
,
所以,我的REAL机器有两个地址:eth0:192.168.1.2
和vboxnet0:192.168.100.1
。IP=192.168.100.100
,默认网关= 192.168.100.1
remote_ip=192.168.100.1
现在,我有3台这台机器的副本(我的副本,我的同事使用了2份),它工作正常!
因此,解决方案是将您的IP地址设置为某个“常数”,只是虚拟。
答案 1 :(得分:0)
对于运行GNU / Linux或使用docker映像的自定义游民机器,您可以通过以下命令找到ip:
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
要获取IP,请先运行后,然后调整以下命令:
vagrant ssh #login into the machine
另一个有趣的情况是,您在一个无聊的GNU / Linux映像内产生的docker容器内运行php。在这种情况下,请勿尝试将正在运行的php映像的外壳剃光,并运行上面的命令,请通过运行以下命令找到 VM 连接回主机的ip:
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
在运行的 VM 的外壳中,并在运行的Docker容器上使用 NOT (使用docker exec
或docker-compose exec
)。如果是入口点脚本,请为XDEBUG ip设置一个环境变量,并在该值为空的情况下自动设置该值,然后自动设置ip。