php实例

关注公众号 jb51net

关闭
首页 > 网络编程 > PHP编程 > php实例 > PHP获取IP地址归属地

PHP如何获取访问者的IP地址和归属地方式详解

作者:文煞

在用PHP开发程序的时候,很多时候我们需要获取访问者的一些关键信息,比如访问者的IP地址或者访问者来自哪里(IP归属地),也便于我们对网站进行一些内容的限制或者功能的补充完善等等,本文就来教大家用PHP如何获取访问者的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库可以分享我一份,谢谢。不过我们可以举个例子来完成。

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;
    }
}

以上就是PHP如何获取访问者的IP地址和归属地方式详解的详细内容,更多关于PHP获取IP地址归属地的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文