phpはipリストを解析して入庫する
この間、新しいプロジェクトを開発するためにipライブラリが必要でしたが、会社にはもともとこのようなライブラリがなかったため、ファイルからipアドレスをマッチングしてライブラリを保存する必要がありました.次は私の次のプログラムで、効率があまり高くないかもしれませんが、コードもあまり最適化されていません.いくつかの場所は煩雑ですが、これからは汚れたデータは相対的に少ないですが、多かれ少なかれ一定の汚れたデータが存在します.しかし、このファイルは40行以上あります.私が取った方法は、この相対的に大きなファイルを行数で分割することです.Nが多くて小さいファイル分散分析をライブラリに入れます.もちろん、マルチプロセスで処理することもできます.一つの問題には多くの解決策があります.私の考えを共有します.もちろん、もっと良い方法があれば、ご指摘ください.筆者は謙虚に教えを求めています.そして、私の下に貼ったコードも最適化することができます.それから、最適化の提案を提出して、私たちは一緒に検討して、一緒に進歩します.
ブラウザでphpファイルを実行して実行していましたが、ここではlinux環境でphpコマンドラインを使用して実行することをお勧めします.これにより、効率が向上し、タイムアウトの問題はありません.
ブラウザで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);
-
- ?>