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地址:
$ip=$_SERVER["REMOTE_ADDR"];//访问者IP
这里我们可以通过系统变量$_SERVER["REMOTE_ADDR"]取得访问者的IP地址并存入自定义变量$ip。方便后续代码引用。当然这里是通过PHP直接获取用户的IP地址,如果用户使用了代理服务器,这该IP地址就是代理服务器的IP地址,而非用户的真实IP地址。
如果需要获取用户的真实IP地址,可以尝试使用$_SERVER['HTTP_X_FORWARDED_FOR']。但是,这个值不是所有的代理服务器都会设置,所以结果可能为空或者不准确。如果需要准确获取用户的真实IP地址,可以使用一些第三方的库或服务。
我们无法通过PHP直接获得IP地址的归属地,但是我们可以利用本地IP库(离线下载)或者在线IP库对IP地址进行匹配。如果该IP地址在IP库或者该IP特征进行匹配即可获得归属地。
$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库可以分享我一份,谢谢。不过我们可以举个例子来完成。
假设我本地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地址归属地的资料请关注插件窝其它相关文章!