使用php根据ip数据库获得国家地区并统计国家使用量排名

本文介绍如何在PHP中使用本地IP数据库获取国家和地区信息,并通过读取日志文件统计各国IP数量,进而转换为国家访问量。通过拉链法重组数据并按访问量降序排列,实现国家访问量排名。
摘要由CSDN通过智能技术生成

使用file_get_contents调取第三方接口,动不动报错
需要在本地安装ip数据库
https://www.ipip.net/product/client.html

  1. csv文件内容一行有2列,时间 ip
  2. 读取文件内容按照日期统计ip数量
  3. 将ip数量转为国家数量
  4. 拉链法根据数量重新组成数量国家数组
  5. 根据数量反转排序

件内容一行有2列,时间 ip

然后本地调用来获取国家地区

ini_set('memory_limit', '2G');

function aaa($class)
{
   
    if (strpos($class, 'ipip\db') !== FALSE)
    {
   
        require_once __DIR__ . '/src/' . $class . '.php';
    }
}
spl_autoload_register("aaa");
$city = new ipip\db\City('ipipfree.ipdb');
var_dump($city->find('117.136.126.242', 'CN'));

$result_arr = [];

$dhandle = opendir(".");
while($file = readdir($dhandle)){
   
//    var_dump(strpos($file,".csv"));
    if(strpos($file,"Z.csv")){
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
纯真IP数据库是一个常用的IP地理位置查询工具,用于根据IP地址查询对应的地区名。该数据库由纯真网络发布,包含了大量的IP地址段及其对应的地理位置信息。使用PHP编程语言可以通过以下步骤来查询IP地址对应的地区名: 1. 首先,需要将纯真IP数据库文件(通常是QQWry.dat)下载并存储在服务器上。 2. 使用PHP的文件操作函数(例如fopen和fread)来打开并读取数据库文件,获取其中的内容。 3. 解析读取到的数据库内容,根据IP地址对应的起始和结束位置,使用二分查找等算法来确定目标IP地址所在的位置。 4. 根据确定的位置,提取出对应的地区名信息。 以下是一个简单的示例代码,实现了根据IP地址查询地区名的功能: ```php <?php function searchRegion($ip) { $path = 'QQWry.dat'; $fp = fopen($path, 'rb'); $content = fread($fp, filesize($path)); $start = unpack('V', $content[0] . $content[1] . $content[2] . $content[3])[1]; $end = unpack('V', $content[4] . $content[5] . $content[6] . $content[7])[1]; $ip = pack('N', intval(ip2long($ip))); while ($start <= $end) { $mid = floor(($start + $end) / 2); fseek($fp, $mid * 7); $data = fread($fp, 7); $ipStart = implode('.', array_map('ord', str_split(substr($data, 0, 4)))); if ($ip < $ipStart) { $end = $mid - 1; } else { $offset = unpack('V', substr($data, 4, 3) . chr(0))[1]; if ($offset == 0) { return '未知地区'; } fseek($fp, $offset); $data = fread($fp, 4); if (substr($data, 0, 1) == chr(0x01)) { $offset = unpack('V', substr($data, 1, 3))[1]; fseek($fp, $offset); $data = fread($fp, 3); } return iconv('gbk', 'utf-8', $data); } } return '未知地区'; } ``` 以上代码使用了二分查找算法,在纯真IP数据库中查找目标IP地址所在位置,并返回对应的地区名(使用了GBK到UTF-8的字符编码转换)。当查询的IP地址在数据库中不存在时,将返回"未知地区"。 希望以上解答可以帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值