当前位置: 代码网 > it编程>编程语言>Php > PHP如何获取访问者的IP地址和归属地方式详解

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

2024年05月15日 Php 我要评论
一、什么是ip地址ip地址是互联网协议(ip协议)定义的一种用于标识网络上主机(计算机或其他设备)的地址。它是一个由四个数字组成的标识符,每个数字范围是0到255,以点分隔开。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地址归属地的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com