1

我想使用 PHP super-global 获取 IPv4 中的客户端 IP 地址$_SERVER['REMOTE_ADDR']。但是,当我在本地主机上对其进行测试时,它会返回一个 IPv6 地址,例如::1.

我使用 Mac OS 默认的 Apache 服务器。这有关系吗?如果是这样,我可以知道如何强制它使用 IPv4 格式吗?

4

2 回答 2

3

您不能将每个 ipv6 地址映射到等效的 ipv4 地址。

您还需要为 ipv6 调整代码..

于 2012-11-04T06:23:40.937 回答
2

决定使用哪种协议的始终是客户端,而不是服务器。客户端通过查找主机名来确定可用的协议。这通常意味着它会在 /etc/hosts 中查看名称是否在那里定义。如果不是,那么它将使用 DNS 请求来解析名称。

在 Mac OS X 上,名称 localhost 定义在 /etc/hosts 中,因为它同时包含 IPv4 (127.0.0.1) 和 IPv6 地址 (::1),客户端被告知它可以同时使用这两者。如果您想仅使用 IPv4 进行测试,您可以在 /etc/hosts 中添加一个名称。如果是用于部署,那么您必须确保 DNS 服务器只回复 IPv4 地址。当然,您必须调整 Apache 配置以匹配正确的主机名。

但这只是解决问题:您需要能够处理 IPv6 地址

IPv6 正被全世界采用,而出现在您的本地主机上的 IPv6 地址只是其中的一个小例子。我与之开展业务的所有数据中心都提供用于托管服务器的 IPv6。几乎 10% 的罗马尼亚人在家中拥有 IPv6。美国近 2% 的人家中有 IPv6。荷兰至少有四家 ISP 为其用户提供 IPv6。等等。

如果您现在不在您的项目中提供对 IPv6 的支持,那么很有可能会在 1 或 2 年内出现问题,如果不是更早的话。

于 2012-11-04T10:47:21.103 回答