微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用php获取访客的IP地址

如何解决如何使用php获取访客的IP地址

我想获取用户的位置,但是我不想使用第三方系统来实现此目的
所以我做了这个脚本

    <?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,但是如果我在Google上搜索“我的IP”,我是否可以从我的公共IP地址获取197.210.85.238 Your public IP address

解决方法

您的服务器仅在通过WAN(也称为公共互联网)访问公共IP时才能学习您的公共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为private networks保留的IPv4地址,应该仅在路由器后面使用。而且任何路由器都可以自由使用它们(因此对定位用户地理位置没有任何意义)。

由于您仅通过局域网(LAN)访问该服务器,因此您的流量根本没有通过公用Internet路由。本地网络流量将不包含您所要求的公共IP信息。

简而言之,请将您的应用程序放在公共服务器上以正确测试您的代码

P.S。正如其他人指出的那样,geoip数据永远不会100%准确。如果您决定仅基于IP确定用户位置,则需要接受结果不准确。

,

让我回答您的两个问题。

  1. 确实不能使用192.168.xxx.xxx来确定用户位置

是的,这是一个私有IP地址范围。 IP地理位置服务(例如IP2Location)仅在公共IP地址范围内起作用。

  1. 如果以上脚本无法获取用户位置,那我该怎么办。需要说明的是,我只需要他们的IP地址,因为我需要第三方服务才能将其IP地址更改为某个位置,所以我认为最好将其保留为数字

问题不是您的脚本。一个简单的$ _SERVER ['REMOTE_ADDR'];在大多数情况下,应该会获得您的访客IP地址。但是,您需要在WAN(而不是LAN)中进行测试。例如,您将页面放在数据中心的服务器中,并可以从办公室的另一个网络访问它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。