簡體   English   中英

如何使用php獲取訪問者的IP地址

[英]How to use php to get ip address of a visitor

我想獲得我的用戶的位置,但我不想使用第三方系統來做到這一點
所以我做了這個腳本

    <?php
 function getIPAddress() {  
    //whether ip is from the share internet  
     if(!empty($_SERVER['HTTP_CLIENT_IP'])) {  
                $ip = $_SERVER['HTTP_CLIENT_IP'];  
        }  
    //whether ip is from the proxy  
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {  
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
     }  
//whether ip is from the remote address  
    else{  
             $ip = $_SERVER['REMOTE_ADDR'];  
     }  
     return $ip;  
}  
$ip = getIPAddress();  
echo $ip; 
?>

當我訪問 http://localhost 時它是 ::1 然后當我連接到互聯網時我去http://192.168.43.104它是 192.168.43.104 我在網上看到 192.168.xxx.xxx 是公共的ip 並且有數百萬用戶使用 192.168.xxx.xxx ,並且無法從中獲取我的訪客位置
我的問題是

  1. 192.168.xxx.xxx 不能用於確定用戶位置是真的嗎
  2. 如果上述腳本無法獲取用戶位置,那么我該怎么做
    為了清楚起見,我只想要他們的IP地址,因為我需要第三方服務來將他們的 IP 地址更改為某個位置,所以我認為最好留下一個數字

編輯
目前在我的頁面上它告訴我 192.168.43.104 但如果我用谷歌搜索“我的 ip”,我會得到197.210.85.238 Your public IP address是從我的公共197.210.85.238 Your public IP address中獲得的,我的位置可以從

您的服務器只能在您通過 WAN(又名公共互聯網)訪問時了解您的公共 IP。

如果您使用以下 IP 訪問服務器:

  • 10.0.0.0 – 10.255.255.255
  • 172.16.0.0 – 172.31.255.255
  • 192.168.0.0 – 192.168.255.255

請注意,它們是 IANA 為私有網絡保留的 IPv4 地址,應該只在路由器后面使用。 並且任何路由器都可以自由使用它們(因此它對定位用戶地理位置沒有意義)。

由於您僅通過局域網 (LAN) 訪問該服務器,因此您的流量根本沒有通過公共互聯網路由。 本地網絡流量將不包含您要求的公共 IP 信息。

簡而言之,請將您的應用程序放在公共服務器上以正確測試您的代碼

PS 正如其他人指出的那樣,geoip 數據從來都不是 100% 准確的。 如果您決定僅根據 IP 確定用戶位置,則您需要接受結果不准確。

我來回答你的兩個問題。

  1. 192.168.xxx.xxx 不能用於確定用戶位置是真的嗎

是的,它是一個私有 IP 地址范圍。 IP 地理定位服務(例如 IP2Location)僅適用於公共 IP 地址范圍。

  1. 如果上述腳本無法獲取用戶位置,那么我該怎么做。 為了清楚起見,我只想要他們的 IP 地址,因為我需要第三方服務來將他們的 IP 地址更改為某個位置,所以我認為最好留下一個數字

問題不在於您的腳本。 一個簡單的 $_SERVER['REMOTE_ADDR']; 在大多數情況下,應該獲取您的訪問者 IP 地址。 但是,您需要在 WAN 而不是 LAN 中對其進行測試。 例如,您將頁面放在位於數據中心的服務器中,並從辦公室的另一個網絡訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM