在PHP中读取IPv6而不是IPv4


reading ipv6 instead of IPv4 in PHP

当我的PHP网站读取我的访问者IP地址时,它以IPv4格式显示。

但是,当我访问第三方站点(例如 https://www.whatismyip.com/)时,我的访问者地址显示IPv6格式。

如何让我的 PHP 网站读取/侦听/显示访问者 IP 地址的较长 IPv6 格式?

如果您获得 IPv6 格式的 IPv4 地址,这可能是因为您的 Web 服务器正在侦听单个 IPv6 接口上的所有请求(IPv4 和 IPv6)。在这种情况下,当它读取对等地址时,它总是会得到一个 IPv6 格式的地址,从而通过将 ::ffff: 前面的 IPv4 地址映射到 IPv4 地址。

所以这是你的网络服务器的配置,而不是PHP的配置。

如果要使用这种格式的 IPv4 地址,只需在 IPv4 地址前面加上固定字符串"::ffff:"即可。但是你为什么要这样做呢?

此外,您将始终获得用于连接到服务器的IP版本的IP地址。因此,当您想知道为什么没有获得真实(而不是映射)的IPv6地址时,可能是因为您的浏览器使用IPv4连接到服务器。要么是因为您的服务器无法侦听 IPv6 请求,要么是因为其 IPv6 连接比 IPv4 连接慢得多。在这种情况下,浏览器通常会回退到 IPv4 为其用户提供更好的性能。