如何在 PHP 中仅使用 REMOTE_ADDR 显示 IPv4?

How show IPv4 only with REMOTE_ADDR in PHP?

我有一个关于变量的问题:$_SERVER['REMOTE_ADDR']。 我希望他只恢复 IPv4 格式的 IP 地址。 它以 IPv6 格式提取了我几次。

怎么办?

$_SERVER['REMOTE_ADDR'] 始终包含访问者的地址。如果它包含 IPv6 地址,则访问者使用了 IPv6 而没有 IPv4 地址。当然反之亦然。现在你必须能够同时处理这两者。

有些访问者只有 IPv4,有些只有 IPv6,有些则两者都有。浏览器决定什么是可用的以及它将使用什么,这就是你所看到的。请注意,如果浏览器认为有必要获得良好的连接性,那么它甚至可能会在请求之间切换 IPv4 和 IPv6。

如果用户通过 IPv6 连接到您的站点,则不可能。

如果你真的想知道用户的ipv4,你可以通过两种方式做到:

a) 删除您域的 AAAA 记录,因此它只能通过 ipv4 工作,所有用户将被强制通过 ipv4 连接。但这是一个糟糕的解决方案,因为没有 ipv4 连接的仅 ipv6 用户将无法访问您的站点。

b) 您可以创建一个 ajax 端点到另一个只解析为 ipv4 的域,并从那里获取他们的 IP。