PHP开发必备:深入了解获取访问者IP地址及IP归属地的知识

[id_2120078833]id_1548433345]

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=[id_1052911800]["REMOTE_ADDR"];$ak='**********';//这里需要你自己申请并获取$ipurl=https://api.map.baidu.com/location/ip?ak= (此内容似乎只是一个网址链接,未明确完整语义,仅按要求改写呈现).$ak.'&ip='.$ip[id_1926048095]$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.txt192.168.0.1:路由器192.168.0.2:老婆的电脑192.168.0.3:儿子的ipad192.168.0.4:老妈的手机192.168.0.5:老爹的手机118.118.118.188:本人的办公电脑...

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

$visitorIp = $_SERVER['REMOTE_ADDR'];$ipDataFile = 'ip.txt';
// 读取ip.txt文件中的数据将变量$ipDataFile的内容读取到变量$ipData中 。
// 按行拆分数据$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."
"
;
echo "访问者信息:".$info; break; }}

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

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读