纯真ip导入mysql
先从纯真官网右侧下载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导入
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。