繁体   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