您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

纯真ip导入mysql

时间:10-24来源:作者:点击数:

先从纯真官网右侧下载ip数据库

更新后,点击解压,可以把数据库保存为txt格式

格式化数据

ip格式如下图

可见并不是很规范,而且最底部字段数也不一致

先用正则表达式,查找替换一下

(d+.d+.d+.d+) *(d+.d+.d+.d+) *([w()]+) (.)

$1$$2$$3$$4 表示用$做分割符,因为其它符号在正文中都有了

最后变成这个样子

另外有几列只有"CZ88"或".NET",用全词匹配把它们都替换为CZ88.NET,统一一下内容

转换ip格式

把字符串形式的ip转换为long int的数字

php代码如下

<?php

function convert($ipFile,$ipOutFile){
    $inHandle = fopen($ipFile, "r")
    $outHandle = fopen($ipOutFile, "w");

    if(!$inHandle){
        echo "open $ipFile error";
        return;
    }
    if(!$outHandle){
        echo "open $ipOutFile error";
        return;
    }

    while ( ($line = fgets($inHandle)) !== false ) {
       
        $data = explode('$', $line);
        $data[0] =  sprintf('%u',ip2long($data[0]));
        $data[1] =  sprintf('%u',ip2long($data[1]));

        $newline = implode('$', $data);
        fputs($outHandle,$newline);
    }
    
    fclose($inHandle);
    fclose($outHandle);
}

这里用sprintf('%u',ip2long($data[0]));的原因是,ip2long会超过int的最大值,变成负数。

创建mysql数据库

CREATE TABLE `ip_data` (
`ipstart`  int(10) UNSIGNED NOT NULL ,
`ipend`  int(10) UNSIGNED NOT NULL ,
`area`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`location`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY (`ipstart`),
INDEX `ip` (`ipstart`, `ipend`) USING BTREE 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT
;

导入

可以用navigat for mysql导入

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门