全方位站长技能、SEO优化学习平台
当前位置:网站首页 > 站长百科 > 正文

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

作者:admin发布时间:2023-10-26分类:站长百科浏览:179评论:0


导读:在用PHP开发程序的时候,很多时候我们需要获取访问者的一些关键信息,比如访问者的IP地址或者访问者来自哪里(IP归属地),也便于我们对网站进行一些内容的限制或者功能的补充完善等等。一、什么是IP地址IP地址是互联网协议(IP协议)定义的一种用于标识网络上主机(计算机或其他设备)的地址。它是一个由四个数字组成的标识符,每个数字范围是0到255,以点分隔开。IP地址用于在互联网上进行通信和传输数据,类似于人类使用的邮政地址。它可以用来确定一个设备在网络中的位置,以便其他设备能够准确地发送数据到该设备
温馨提示:手机扫码可阅读当前文章!
文章简介:在用PHP开发程序的时候,很多时候我们需要获取访问者的一些关键信息,比如访问者的IP地址或者访问者来自哪里(IP归属地),也便于我们对网站进行一些内容的限制或者...

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

一、什么是IP地址

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

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

我们常用的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库可以分享我一份,谢谢。不过我们可以举个例子来完成。

3、本地IP库获取归属地

假设我本地IP库的地址数据内容如下:

文件名称:ip.txt
192.168.0.1:路由器
192.168.0.2:老婆的电脑
192.168.0.3:儿子的ipad
192.168.0.4:老妈的手机
192.168.0.5:老爹的手机
118.118.118.188:本人的办公电脑...

我们可以通过IP匹配的方法获得访问者信息:

$visitorIp = $_SERVER['REMOTE_ADDR'];$ipDataFile = 'ip.txt';// 读取ip.txt文件中的数据$ipData = file_get_contents($ipDataFile);// 按行拆分数据$ipRecords = explode("\n", $ipData);// 遍历IP记录,查找匹配的访问者信息foreach ($ipRecords as $record) {    $parts = explode(":", $record);    $ip = trim($parts[0]);    $info = trim($parts[1]);     // 匹配IP地址    if ($visitorIp === $ip) {        echo "访问者IP:".$visitorIp."<br>";        echo "访问者信息:".$info;        break;    }}

教程比较粗糙,有错误的地方欢迎指正!



欢迎 发表评论:

  • 请填写验证码
站长百科排行
    随机文章 | 热门文章 | 热评文章
随机文章