我需要检索用户的IP。我的localhost将返回::1
作为IP。我很好奇,如果这是预期的行为?我在Snow Leopard上运行MAMP。
答案 0 :(得分:38)
同样的问题,并找到了有效的解决方案,经过测试,效果很好。我想拥有ip addy - 127.0.0.1,而不是必须接受:: 1并讨论整个IPv4 / 6问题。所以,我拖了一会儿,又陷入了@Brad 2008年的评论 - 这里: http://board.issociate.de/thread/489575/SERVERquotREMOTEADDRquot-returning-1.html
总结 - (在Mac OS上 - 特别是Mountain Lion)
sudo vi /etc/apache2/httpd.conf
找到你的apache在哪里'听'到ips / ports等... 通常这将是一个看起来像这样的行
Listen 80
让它看起来像这样:
Listen 127.0.0.1:80
重新保存。 重启Apache。 瞧!
现在$_SERVER[REMOTE_ADDR]
看起来像127.0.0.1
。
希望它有所帮助。
答案 1 :(得分:31)
::1
是IPv4 127.0.0.1
地址的IPv6等价物。
您可以使用函数inet_ntop()
将IPv6地址转换为IPv4地址,如Adam所说。
答案 2 :(得分:5)
修改/etc/apache2/httpd.conf
甚至/private/etc/hosts
不是解决方案。它返回:: 1,因为它是旧的(但是金色的)IPv4 127.0.0.1
的IPv6等价物。正如它在/privates/etc/hosts
中定义的那样,无论何时访问http://localhost
,它都假设IPv6 :: 1。所以这是预期的行为。
解决方法是直接访问http://127.0.0.1
。它会工作得很好。但请记住,IPv6可用性正在增加。您可以确保您的服务器(部署后)仅响应IPv4,但在中期,如果您的站点/ Web应用程序无法正确处理IPv4和IPv6,则很有可能在两年内出现问题。或者更早,我们永远不会知道。
答案 3 :(得分:2)
对于谁没有重新解决此问题,听起来hosts
文件丢失或行
127.0.0.1 localhost
<{1>} LINUX 中的<{1>} MAC设备中的
在etc\hosts
WINDOWS xp / vista / 7/8 /
当文件/private/etc/hosts
被移除或\%WINDIR%\system32\drivers\etc\hosts
或hosts
行也将由missed
设置...
答案 4 :(得分:0)
当您需要IPv4格式时,必须在操作系统中禁用IPv6支持以使apache停止显示这些IPv6格式地址。我禁用了IPv6支持,并且它现在按预期工作。
我最近遇到过这个问题,虽然我不记得在我的Windows 7系统上启用ipv6支持,可以由微软在其中一个更新中完成(也许)。