首页 首页 >  文章资讯

PHP如何获取访问者的IP地址和归属地

发布时间:2023-10-26 09:37:58 浏览次数:134次

在用PHP开发程序的时候,很多时候我们需要获取访问者的一些关键信息,比如访问者的IP地址或者访问者来自哪里(IP归属地),也便于我们对网站进行一些内容的限制或者功能的补充完善等等。

一、什么是IP地址

IP地址是互联网协议(IP协议)定义的一种用于标识网络上主机(计算机或其他设备)的地址。它是一个由四个数字组成的标识符,每个数字范围是0到255,以点分隔开。IP地址用于在互联网上进行通信和传输数据,类似于人类使用的邮政地址。它可以用来确定一个设备在网络中的位置,以便其他设备能够准确地发送数据到该设备。  IP地址分为IPv4和IPv6两个版本。IPv4是目前广泛使用的版本,采用32位地址格式。而IPv6是较新的版本,采用128位地址格式,为了应对互联网用户数量的增长而设计。


我们常用的IP4地址如:8.8.8.8,114.114.114.114(等类似由4组数字组成的网络地址)。本地IP地址如:192.168.0.1,127.0.0.1等。

二、PHP如何获取IP地址

PHP直接获取访问者IP地址:

$ip=$_SERVER["REMOTE_ADDR"];//访问者IP

这里我们可以通过系统变量$_SERVER["REMOTE_ADDR"]取得访问者的IP地址并存入自定义变量$ip。方便后续代码引用。当然这里是通过PHP直接获取用户的IP地址,如果用户使用了代理服务器,这该IP地址就是代理服务器的IP地址,而非用户的真实IP地址。

如果需要获取用户的真实IP地址,可以尝试使用$_SERVER['HTTP_X_FORWARDED_FOR']。但是,这个值不是所有的代理服务器都会设置,所以结果可能为空或者不准确。如果需要准确获取用户的真实IP地址,可以使用一些第三方的库或服务。

三、获取IP地址的归属地

我们无法通过PHP直接获得IP地址的归属地,但是我们可以利用本地IP库(离线下载)或者在线IP库对IP地址进行匹配。如果该IP地址在IP库或者该IP特征进行匹配即可获得归属地。

1、百度在线API接查询

$ip=$_SERVER["REMOTE_ADDR"];$ak='**********';//这里需要你自己申请并获取$ipurl='https://api.map.baidu.com/location/ip?ak='.$ak.'&ip='.$ip; //GET请求$fh= file_get_contents("$ipurl");$jsonarr = json_decode($fh, true);if($jsonarr['status'] == 0){$result = $jsonarr['content'];$result = $result['address_detail'];
$froms='中国-'.$result['province'].'-'.$result['city'];}else{echo "未能查询到".$ip."的归属地";}

这里是通过百度api的IP查询接口进行查询的。网络很多代码通过淘宝IP库查询,但是我发现淘宝IP库的api接口好像关闭了,不能正常使用了。

2、通过其他api接口查询

$token = '*******'; // 用户token ,登录系统后可获取到$fh= file_get_contents("https://67ip.cn/check?ip=$ip&token=$token");$jsonarr = json_decode($fh, true);;if($jsonarr['code']=='200'){$result = $jsonarr['data'];if($result['city']=='0'){$result['city']='未知';}if($result['service']=='0'){$result['service']='';}$froms=$result['country'].'-'.$result['city'].'-'.$result['service'];    }else{$froms='火星';}

本文介绍的都是通过api接口进行查询,为什么不介绍本地IP库进行查询呢?主要是本人没有获取到本地IP库的数据文件,不知道本地IP库的格式,无法完成有效的对应的代码,如果谁有本地IP库可以分享我一份,谢谢。不过我们可以举个例子来完成。


【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息发邮件至 lnkj@3173.top ,我们将及时沟通与处理。 本站内容除了3117站长服务平台( www.3117.cn )原创外,其它均为网友转载内容,涉及言论、版权与本站无关。