ip纯真 mysql_纯真ip导入mysql

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

88574fbb78291ad4c2831d6d33f1e6b8.png

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

474e322cf07248533dc382af9e153ab7.png

格式化数据

ip格式如下图

aa7e6a563f6633ff74bc253c93fedee0.png

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

8db23d3ebfa3d85d18cd18e3f282e723.png

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

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

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

最后变成这个样子

9c33625202759e4e06b1f37cd09f5d73.png

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

转换ip格式

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

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导入

2d0a60b85ca65f8fbad41545d2773e1c.png

6691824aee25297fd3faa7e3e3f397fb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值