一、什么是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地址归属地的资料请关注代码网其它相关文章!
发表评论