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\hostsLINUX

/private/etc/hosts MAC 设备中

\%WINDIR%\system32\drivers\etc\hostsWINDOWS 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 中将根文件夹设置为子文件夹,这也将在生产服务器上工作

在本地 MAMP 服务器中设置 wordpress

如何检测用户是不是在 PHP 中的本地主机上?

PHP file_get_contents 在本地主机上不起作用

如何将文件放在本地主机上

不是本地主机上的有效域 facebook