MAMP 是不是应该在本地主机上将 ::1 作为 IP 返回?
Posted
技术标签:
【中文标题】MAMP 是不是应该在本地主机上将 ::1 作为 IP 返回?【英文标题】:Should a MAMP return ::1 as IP on localhost?MAMP 是否应该在本地主机上将 ::1 作为 IP 返回? 【发布时间】:2011-04-11 14:20:23 【问题描述】:我需要检索用户的 IP。我的本地主机返回 ::1
作为 IP。我很好奇,如果这是预期的行为?我正在 Snow Leopard 上运行 MAMP。
【问题讨论】:
php $_SERVER['REMOTE_HOST'] returns ::1 的可能重复项 【参考方案1】:::1
是 IPv4 127.0.0.1
地址的 IPv6 等价物。
正如 Adam 所说,您可以使用函数 inet_ntop()
将 IPv6 地址转换为 IPv4 地址。
http://php.net/manual/en/function.inet-ntop.php
【讨论】:
我相信你可以使用inet_ntop
在IPv4和IPv6之间进行转换
@adam,是的,你是对的。 @Mild:如果您对我的回答满意,请接受;]
$ip=inet_ntop($_SERVER['REMOTE_ADDR']);正在返回警告:inet_ntop() [function.inet-ntop]:第 18 行 /Applications/MAMP/htdocs/createstudios/wp-content/themes/createstudios/page.php 中的 in_addr 值无效
你的 PHP 库是用 IPv6 支持构建的吗?
最终,这有关系吗?这些值是否足够好?【参考方案2】:
当您需要 IPv4 格式时,您必须在操作系统中禁用 IPv6 支持,以使 apache 停止显示这些 IPv6 格式地址。我禁用了 IPv6 支持,它现在按预期工作。
我最近遇到了这个问题,虽然我不记得在我的 Windows 7 系统上启用了 ipv6 支持,但可以由 Microsoft 在他们的更新之一中完成(也许)。
【讨论】:
我相信从 Windows XP SP2 甚至更早的版本开始默认启用 IPv6。【参考方案3】:同样的问题,找到了一个有效的解决方案,经过测试,效果很好。我也想拥有 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:80”你的意思是 :) 这样您将禁用对 Apache 的 IPv6 支持。您可以通过另一种方式修复它:将127.0.0.1 localhost
添加到主机文件,因此 IPv4 解析优先于 localhost 的 IPv6 ;)
这似乎对使用 MAMP 3.5 的 El Capitan 没有任何作用
@ÁxelCostasPena 我已经在主机的第一行得到了这个,在 PHP 中仍然得到 ::1。
@DesignbyAdrian ping localhost 时显示的 IP 是什么?【参考方案4】:
对于尚未解决此问题的人来说,听起来hosts
文件丢失或该行
127.0.0.1 localhost
在etc\hosts
LINUX
在/private/etc/hosts
MAC 设备中
在\%WINDIR%\system32\drivers\etc\hosts
WINDOWS xp/vista/7/8/
当文件hosts
被删除或missed
或行太IPV6
将由default
设置...
【讨论】:
【参考方案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,则很有可能在 1/2 年内出现问题。或者更早,我们永远不知道。
【讨论】:
以上是关于MAMP 是不是应该在本地主机上将 ::1 作为 IP 返回?的主要内容,如果未能解决你的问题,请参考以下文章
在本地主机上的 Apache 中将根文件夹设置为子文件夹,这也将在生产服务器上工作