2016-02-29 49 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代碼段連接到此域。」 我知道有一種方法。 –