php解析ip列表并入库
前一段时间因为要开发一个新项目,需要一个ip库,由于公司原本无这样一个库,所以急需从文件中匹配ip地址然后存库。下面是我下的一段程序,可能效率不是很高,代码也没有做过多的优化,有些地方比较繁琐,但这样以后脏数据相对来说少点,但或多或少还是存在一定的脏数据。但是这个文件有40多行,我采取的办法是按行数将这个相对来说很大的文件拆分是N多很小的文件分布式分析入库的。当然你也可以通过多进程处理。一个问题有很多解决办法,我分享一下我的想法。当然如果您有更好的办法请多多指正,笔者虚心求教,还有我下面贴出的代码您也可以去优化,然后提出您的优化建议,我们一起探讨,共同进步。
我当时采用的是浏览器运行php文件来执行的,在这里我建议应该在linux环境下采用php命令行执行,这样效率会更高,而且不存在超时的问题。
- <?php
- /*
- *Author:马荣财
- *date:2011/8/2 14:25:28
- *
- *目的:正则匹配ip文件列表导入数据库
- *@param $filename ip列表文件全路径包括目录
- *
- */
- /*
- *分析了一下文件发现主要有一下几种格式
- *A: **省 如甘肃省
- *B: **市**区 如北京市海淀区或如浙江省宁波市北仑区
- *C: ****大学 如清华大学
- *D: ****市 如新疆,宁夏,西藏,内蒙古**市
- *E: 剩下的为一类
- */
- //set_time_limit(0);
- ini_set('max_execution_time', '3000');
- $conn = mysql_connect('localhost','root','') or die('MYSQL 连接错误!');
- mysql_query("set names utf8");
- mysql_select_db('test',$conn);
- $result = mysql_query('select `cid`,`pid`,`name` from `tbl_city`');
- $citys = array();
- while($row=mysql_fetch_array($result)) {
- $citys[$row['name']] = $row;
- }
- function parseAndImport($filename,$citys) {
- //将ip文件列表读入一个数组
- $fileArr = file($filename);
- //分别定义了国家、省份、城市、描述、省份id、城市id、ip段(1,2)
- $country ='';
- $province = '';
- $city ='';
- $ser = '';
- $cid = '';
- $pid = '';
- $ip1 ='';
- $ip2 = '';
- //定义一个计数器
- $i=0;
- $sql = '';
- foreach($fileArr as $key=>$lineText) {
- if(preg_match("|(\d+\.\d+\.\d+\.\d+) +(\d+\.\d+\.\d+\.\d+) +(.*)|",$lineText,$lineArr)) {
- //用空格切割匹配的与城市有关的信息
- $dataArr= explode(' ',$lineArr[3]);
- $ser = $lineArr[3];
- $cityStr = $dataArr[0];
- //把ip装换成整数形式
- $ip1 = sprintf("%u", ip2long($lineArr[1]));
- $ip1 = addslashes($ip1);
- $ip2 = sprintf("%u", ip2long($lineArr[2]));
- $ip2 = addslashes($ip2);
- echo $ip2;exit;
- //先查找A类型的数据
- if(preg_match("|(.*)省$|",$cityStr,$cityArr)) {
- $country = '中国';
- $cityArrlen = count($cityArr);
- if($cityArrlen>0) {
- $province = $cityArr[1];
- $city ='';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- } else {
- $province ='';
- $city = '';
- }
- delLine($filename,$lineText);
- }
- //查找B类型的数据
- elseif(preg_match("|(.*?)市(.*)|",$cityStr,$cityArr) || preg_match("|(.*?)州(.*)|",$cityStr,$cityArr)) {
- $country = '中国';
- $cityArrlen = count($cityArr);
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'省');
- if($len>0) {
- $pcArr = explode('省',$cityArr[1]);
- $province=$pcArr[0];
- $city=$pcArr[1];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $province = $cityArr[1];
- $areaLen = mb_strpos($cityArr[2],'区');
- if($areaLen>0) {
- $aArr = explode($cityArr[2],'区');
- $city = $aArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $province = $cityArr[1];
- $city ='';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- } else {
- $province ='';
- $city = '';
- }
- delLine($filename,$lineText);
- }
- //查找C类型的数据
- elseif(preg_match("|(.*)大学(.*)|",$cityStr,$cityArr) || preg_match("|(.*)学院(.*)|",$cityStr,$cityArr)) {
- //参阅附件,这块比较繁琐
- }
- //查找D类型的数据
- elseif(preg_match("|^内蒙古(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '内蒙古';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- elseif(preg_match("|^西藏(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '西藏';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city='';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- elseif(preg_match("|^新疆(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '新疆';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city ='';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- elseif(preg_match("|^宁夏(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '宁夏';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- elseif(preg_match("|^香港(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '香港';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- elseif(preg_match("|^澳门(.*)|",$cityStr,$cityArr)) {
- $cityArrlen = count($cityArr);
- $country = '中国';
- $province = '澳门';
- if($cityArrlen>0) {
- $len=mb_strpos($cityArr[1],'市');
- if($len>0) {
- $pcArr = explode('市',$cityArr[1]);
- $city=$pcArr[0];
- $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid'];
- $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];
- } else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- }
- else {
- $city = '';
- $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid'];
- $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];
- }
- delLine($filename,$lineText);
- }
- else {
- $country = $cityStr;
- $province='';
- $city='';
- $cid = '';
- $pid ='';
- delLine($filename,$lineText);
- }
- }
- $i++;
- echo $ip2;exit;
- $sql = 'insert into `city_ip`(`ip1`,`ip2`,`country`,`ser`,`province_id`,`province_name`,`city_id`,`city_name`) values ("'.$ip1.'","'.$ip2.'","'.$country.'","'.$ser.'","'.$pid.'","'.$province.'","'.$cid.'","'.$city.'")';
- if(mysql_query($sql)) {
- echo $i.'<br/>';
- }
- }
- }
- function delLine($filename,$text) {
- $f1=fopen($filename,'r');
- $tmp=tempnam('e:\web\www\\','newip.txt');//建立临时文件
- $f2=fopen($tmp,'w');
- while(!feof($f1)){
- $line=fgets($f1);
- if ($line!=$text) fputs($f2,$line);
- }
- fclose($f1);
- fclose($f2);
- rename($tmp,$filename);
- }
- parseAndImport('ip1.txt',$citys);
- ?>
转载于:https://blog.51cto.com/mrcelite/751380
相关文章:
AI 领域新突破,腾讯发布首个AI药物研发平台「云深智药」
7月9日,2020世界人工智能大会云端峰会开幕。会上,腾讯首席运营官任宇昕公布了用AI助力药物研发领域的最新进展——由腾讯自主研发的首个AI驱动的药物发现平台“云深智药(iDrug)”正式对外发布。云深智药平台的推出,将帮…

写入和读取图片(c# asp.net sqlserver)
作者:木子 http://blog.csdn.net/derny/首先要创建一个表包含自段image 和 type 类型各自为image 和 vnanchar WebForm1.aspx <% Page language"c#" Codebehind"WebForm1.aspx.cs" AutoEventWireup"false" Inherits"ReadA…
【MyBatis学习01】宏观上把握MyBatis框架
今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目。mybatis可以让开发者的主要精力放在s…

消除图片在ie中缓存而无法更新的问题
程序中图片是动态显示的 原先把打算把图片保存在服务器端然后显示 可是由于ie的缓存问题导致图片无法实时更新显示 所以改为把图片存在session中然后再显示 需要保存的时候再保存到本地 //------&…

Linux shell笔记
由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。 No.001 文件安全与权限 1. umask 决定了新建文件的权限 2. 软链接(符号链接) ln -s source_…
ACL最佳论文提出最新NLP模型测试方法,最佳论文提名也不可小觑
译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)导读:近日,ACL 2020公布了最佳论文奖,另有两篇最佳论文荣誉提名奖也各自提出了解决NLP领域问题的创新方法。最佳论文:Beyond Accuracy: Behavioral Testing o…

LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理
逻辑卷缩减缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统。第一步要先取消挂载(必须)第二部检查文件完整性(必须)e2fsck -f /dev/vg0/lv0第三部文件系统缩减,先缩减文件…

屏掉F5刷新的办法
<body οnkeydοwn"KeyDown()"> function KeyDown(){ //屏蔽退格删除键,屏蔽 F5 刷新键,Ctrl R if ((event.keyCode116)||(event.ctrlKey && event.keyCode82)) { event.keyCode0; event.returnValuefalse; } }
WAIC汇聚全球顶级科学家,畅谈人工智能的未来挑战与突破
7月9日,2020世界人工智能大会(WAIC)正式拉开帷幕。当天下午,2020世界人工智能大会科学前沿全体会议召开,作为今年WAIC唯一一场聚焦前沿科技的大会,邀请了世界范围内最顶级的AI专家探讨技术趋势。其中&#…

ant学习笔记之(ant执行命令的详细参数和Ant自带的系统属性)
2019独角兽企业重金招聘Python工程师标准>>> 一:ant执行命令的详细参数 -buildfile<file>,-file<file>,-f<file> :要指定执行构件的的位置和名称。 -find<file>,-s<file>: 查找构件文件,并执行找到的构件文件。…
mipi和dsi
转自: http://blog.csdn.net/longxiaowu/article/details/24410021 一、MIPI MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定…

在asp.net中调用Office来制作各种(3D)统计图
作者:未知 由于本文网上多处见到 对于谁是作者 无法肯定1、下载owc11 COM组件 http://www.microsoft.com/downloads/details.aspx?FamilyID7287252c-402e-4f72-97a5-e0fd290d4b76&displaylangen 2、注册owc11 在工程中添加 C:/Program Files/Common File…

个人谈谈seo
为什么80%的码农都做不了架构师?>>> 我不知道大家有没有做过seo的工作。以前我是一各技术人员。纯技术开发或技术管理人员。基本上也没有接触过seo的相关工作,整天在写代码或看别人的代码 。干了六年只见他们都在谈友情链接。做推广…
“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!
Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题:1.想学人工智能,但不知从何学起,也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂࿰…

[译]JavaScript中,{}+{}等于多少?
最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得出的. 在JavaScript中,加法的规则其实很简单,只有两种情况:你只能把数字和数字相加,或者字符串…

大数量查询分页显示
微软的解决办法 using System; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Windows.Forms; public class PagingSample: Form { // Form controls. Button prevBtn new Button(); Button nextBtn new Button(); static DataGrid …

Sep 26 09:22:41 ck01 kernel: Buffer I/O error on device sda2, logical block 2
错误 kernel: sd 0:2:0:0: SCSI error: return code kernel: end_request: I/O error, dev sda, sector 2308509 kernel: Buffer I/O error on device sda2, logical block 2 kernel: Buffer I/O error on device sda2, logical block 2 硬盘扇区问题? 更换一块硬盘…

启信宝CEO陈青山:AI+大数据驱动下的金融新生态
人工智能怎样潜移默化影响金融业务?合合信息联合创始人、启信宝CEO陈青山在2020世界人工智能大会云端峰会.未来金融论坛上做了“AI大数据,共创金融新生态”的主题演讲,讲述了如何通过数字化构建一个虚拟世界,协助金融类企业建立新…

新手安装ruby on rails(ror)的成功必备手册
2019独角兽企业重金招聘Python工程师标准>>> 如何快速正确的安装 Ruby, Rails 运行环境 每一位使用windows系统来进行ROR开发项目的都是这个世界上折翼的天使。对于新入门的开发者,如何在windows系统上安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是…

Logback学习笔记1
Logback介绍 Logback 分为三个模块:Core、Classic 和 Access。Core模块是其他两个模块的基础。 Classic模块扩展了core模块。 Classic模块相当于log4j的显著改进版。Logback-classic 直接实现了 SLF4J API。 要引入logback,由于Logback-classic依赖slf4j…
微软亚洲研究院副院长刘铁岩:AI如何助力节能减排?
7月10日,在微软举办的WAIC●2020人工智能予力永续未来论坛,微软亚洲研究院副院长刘铁岩围绕 AI 在节能减排领域的应用,探讨了如何推进整个社会的可持续发展。 刘铁岩指出,人工智能在助力节能环保方面具有巨大潜力。例如ÿ…

如何在域控制器上安装asp.net?
作者:网际浪子专栏(曾用名littlehb) http://blog.csdn.net/littlehb/在域控制器或备份域控制器上安装 Microsoft Visual Studio .NET 或 Microsoft .NET 框架后,如果您尝试运行 ASP.NET 应用程序,则浏览器…

前端思想实现:面向UI编程_____前端框架设计开发
引子,我去小说看多了,写博客竟然写引子了!!!不过,没引子不知道怎么写了。言归正传吧,前端这个职业,也就这几年刚刚火起来的职业,以前那个混乱的年代,前端要么…

如何检查当TextBox设置为多行时是不是超长了?
<asp:RegularExpressionValidator id"revTextBox1" runat"server" ForeColor"Red" Display"Dynamic" ControlToValidate"textBox1" ValidationExpression"(/w|/W){1,100}">格式错误-只能输入不超过100个字符…
仅用2年过渡到自研ARM芯片,苹果的底气从何而来?
作者 | Steven Sinofsky译者 | 弯月,责编 | 屠敏题图 | 东方 IC出品 | CSDN(ID:CSDNnews)今年 WWDC 2020 上,苹果宣布自研 ARM 芯片——Apple Silicon,对于苹果而言,Apple Silicon很重要&#…

从“创业输家”到“创智赢家”
年轻就是创业的资本,但同时还要不怕失败,经得起挫折!”在上海财经大学的演讲厅内,彭震以自己亲身的经历,向在场的学生们介绍了自己创业背后的艰辛。彭震,现任项丰投资公司董事长,作为首届“ 创智…

2.正则表达式
在计算机科学中,正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用…
基于监督学习+自监督学习的智能抠图,精确到发丝 | CVPR 2020
来源 | AI算法与图像处理(ID:AI_study)华盛顿大学的研究者最近发表的论文在CVPR 2020提供了一个新的和简单的智能抠图方法。你可以在家里做这些日常设置,使用固定或手持相机。我们的方法也是最先进的,给出的输出可比专业的结果。在…

安装Jpype
1、下载JPype-0.5.4.2 2、 python setup.py install error: gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE2 -fexceptions -fstack-protector --paramssp-buffer-size4 -m64 -mtunegeneric -D_GNU_SOURCE -fPIC -fPIC -I/usr/lib/jvm…

SQL SERVER中带参数的返回
作者:网际浪子专栏(曾用名littlehb) http://blog.csdn.net/littlehb/ CREATE PROCEDURE LoginUser loginUN char(50) OUTPUT, loginPW char(40)ASif loginPW (select [password] from users where usernameloginUN) return 0;else ret…