【发布时间】:2011-04-11 14:20:23
【问题描述】:
我需要检索用户的 IP。我的本地主机返回 ::1 作为 IP。我很好奇,如果这是预期的行为?我正在 Snow Leopard 上运行 MAMP。
【问题讨论】:
标签: php sql-server localhost
我需要检索用户的 IP。我的本地主机返回 ::1 作为 IP。我很好奇,如果这是预期的行为?我正在 Snow Leopard 上运行 MAMP。
【问题讨论】:
标签: php sql-server localhost
::1 是 IPv4 127.0.0.1 地址的 IPv6 等价物。
正如 Adam 所说,您可以使用函数 inet_ntop() 将 IPv6 地址转换为 IPv4 地址。
【讨论】:
inet_ntop在IPv4和IPv6之间进行转换
当您需要 IPv4 格式时,您必须在操作系统中禁用 IPv6 支持,以使 apache 停止显示这些 IPv6 格式地址。我禁用了 IPv6 支持,它现在按预期工作。
我最近遇到了这个问题,虽然我不记得在我的 Windows 7 系统上启用了 ipv6 支持,但可以由 Microsoft 在他们的更新之一中完成(也许)。
【讨论】:
同样的问题,找到了一个有效的解决方案,经过测试,效果很好。我也想拥有 127.0.0.1 的 ip addy,而不是不得不接受 ::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/端口等... 通常这将是一条看起来像这样的线
Listen 80
让它看起来像这样:
Listen 127.0.0.1:80
重新保存。 重启阿帕奇。 瞧!
现在$_SERVER[REMOTE_ADDR] 看起来像127.0.0.1。
希望对某人有所帮助。
【讨论】:
127.0.0.1 localhost 添加到主机文件,因此 IPv4 解析优先于 localhost 的 IPv6 ;)
对于尚未解决此问题的人来说,听起来hosts 文件丢失或该行
127.0.0.1 localhost
在etc\hostsLINUX
在/private/etc/hosts MAC 设备中
在\%WINDIR%\system32\drivers\etc\hostsWINDOWS xp/vista/7/8/
当文件hosts 被删除或missed 或行太IPV6 将由default 设置...
【讨论】:
修改/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,则很有可能在 1/2 年内出现问题。或者更早,我们永远不知道。
【讨论】: