2016-02-29 20 views
1

当我的PHP网站读取我的访客IP地址时,它显示为IPv4格式。读取ipv6代替PHP中的PHP

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

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

+3

只有当某人使用ipv6访问过您的网站时,您才会知道这一点。如果他们使用ipv4连接,那么将没有ipv6地址进行捕获,反之亦然。仅仅因为你有能力使用ipv6并不意味着他们也是...... –

+0

要建立@MarcB所说的话,这就是为什么它的$ _SERVER ['REMOTE_ADDR']'而不是像'$ _SERVER ['' REMOTE_IPV4']' – Derek

+0

所以...访问我的网站的人需要使用ipv6连接。 这很有道理。 那么,为什么我看到两个不同的IP地址,如果我去两个网站(我的和whatismyip.com),一个给我一个ipv4地址,另一个给ipv6? –

回答

0

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

因此,这是您的网络服务器的配置,而不是PHP的配置。

如果您希望使用该格式的IPv4地址,则可以使用固定字符串“:: ffff:”预先填入IPv4地址。但是,你为什么要这样做?

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

+0

我开始明白了。我想如果你通过IPv6连接,那么所有的网站都能够看到IPv6地址。 注意:我想要真正的IPv6(如果可用),因为它可以让我更准确地读取最终用户的位置。 –

+2

如果您需要用户的IPv6地址:更新您的服务器以支持IPv6连接。因此,您需要在DNS中为您的域配置IPv6连接和AAAA条目。 要确保双用户通过IPv6连接,您还可以使用只能通过IPv6访问的子域,并使用页面中的JavaScript代码段连接到此域。 –

+0

谢谢!天啊。这是我一直在寻找的内容: •“更新您的服务器以支持IPv6连接” •“IPv6连接” •“您的域在DNS中的AAAA条目”。 •“要确保双用户通过IPv6连接,您还可以使用仅可通过IPv6访问的子域,并使用页面中的JavaScript代码段连接到此域。” 我知道有一种方法。 –