phpはipリストを解析して入庫する


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

  
  
  
  
  1. <?php 
  2.      
  3.     /* 
  4.     *Author:  
  5.     *date:2011/8/2 14:25:28 
  6.     * 
  7.     * : ip  
  8.     *@param $filename ip  
  9.     * 
  10.     */ 
  11.  
  12.     /* 
  13.     *  
  14.     *A:  **               
  15.     *B:  ** **        
  16.     *C:  ****        
  17.     *D:  ****   , , , **  
  18.     *E:    
  19.     */ 
  20.     //set_time_limit(0); 
  21.     ini_set('max_execution_time''3000'); 
  22.     $conn = mysql_connect('localhost','root',''or die('MYSQL  !'); 
  23.     mysql_query("set names utf8"); 
  24.     mysql_select_db('test',$conn); 
  25.     $result = mysql_query('select `cid`,`pid`,`name` from `tbl_city`'); 
  26.     $citys = array(); 
  27.     while($row=mysql_fetch_array($result)) { 
  28.         $citys[$row['name']] = $row
  29.     } 
  30.     function parseAndImport($filename,$citys) { 
  31.              
  32.             // ip  
  33.             $fileArr = file($filename); 
  34.             // 、 、 、 、 id、 id、ip (1,2) 
  35.             $country =''
  36.             $province = ''
  37.             $city =''
  38.             $ser = ''
  39.             $cid = ''
  40.             $pid = ''
  41.             $ip1 =''
  42.             $ip2 = ''
  43.             //  
  44.             $i=0; 
  45.             $sql = ''
  46.          
  47.             foreach($fileArr as $key=>$lineText) { 
  48.                 if(preg_match("|(\d+\.\d+\.\d+\.\d+) +(\d+\.\d+\.\d+\.\d+) +(.*)|",$lineText,$lineArr)) { 
  49.                     //  
  50.                     $dataArrexplode(' ',$lineArr[3]); 
  51.                     $ser = $lineArr[3]; 
  52.                     $cityStr = $dataArr[0]; 
  53.  
  54.                     // ip  
  55.                     $ip1 = sprintf("%u"ip2long($lineArr[1])); 
  56.                     $ip1 = addslashes($ip1); 
  57.                     $ip2 = sprintf("%u"ip2long($lineArr[2])); 
  58.                     $ip2 = addslashes($ip2); 
  59.                     echo $ip2;exit
  60.                     // A  
  61.                     if(preg_match("|(.*) $|",$cityStr,$cityArr)) { 
  62.                         $country = ' '
  63.                         $cityArrlen = count($cityArr); 
  64.                         if($cityArrlen>0) { 
  65.                             $province = $cityArr[1]; 
  66.                             $city =''
  67.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  68.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  69.                         } else { 
  70.                             $province =''
  71.                             $city = ''
  72.                         } 
  73.                         delLine($filename,$lineText); 
  74.                     } 
  75.                     // B  
  76.                     elseif(preg_match("|(.*?) (.*)|",$cityStr,$cityArr) || preg_match("|(.*?) (.*)|",$cityStr,$cityArr)) { 
  77.                         $country = ' '
  78.                         $cityArrlen = count($cityArr); 
  79.                         if($cityArrlen>0) { 
  80.                             $len=mb_strpos($cityArr[1],' '); 
  81.                             if($len>0) { 
  82.                                 $pcArr = explode(' ',$cityArr[1]); 
  83.                                 $province=$pcArr[0]; 
  84.                                 $city=$pcArr[1]; 
  85.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  86.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  87.                             } else { 
  88.                                 $province = $cityArr[1]; 
  89.                                 $areaLen = mb_strpos($cityArr[2],' '); 
  90.                                 if($areaLen>0) { 
  91.                                     $aArr = explode($cityArr[2],' '); 
  92.                                     $city = $aArr[0]; 
  93.                                     $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  94.                                     $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid']; 
  95.                                 } else { 
  96.                                     $province = $cityArr[1]; 
  97.                                     $city =''
  98.                                     $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  99.                                     $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  100.                                 } 
  101.                             } 
  102.                         } else { 
  103.                             $province =''
  104.                             $city = ''
  105.                         } 
  106.                         delLine($filename,$lineText); 
  107.                     } 
  108.                     // C  
  109.                     elseif(preg_match("|(.*) (.*)|",$cityStr,$cityArr) || preg_match("|(.*) (.*)|",$cityStr,$cityArr)) { 
  110.                         // ,  
  111.                     } 
  112.                     // D  
  113.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  114.                         $cityArrlen = count($cityArr); 
  115.                         $country = ' '
  116.                         $province = ' '
  117.                         if($cityArrlen>0) { 
  118.                             $len=mb_strpos($cityArr[1],' '); 
  119.                             if($len>0) { 
  120.                                 $pcArr = explode(' ',$cityArr[1]); 
  121.                                 $city=$pcArr[0]; 
  122.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  123.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  124.                             } else { 
  125.                                 $city = ''
  126.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  127.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  128.                             } 
  129.                         } 
  130.                         else { 
  131.                             $city = ''
  132.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  133.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  134.                         } 
  135.                         delLine($filename,$lineText); 
  136.                     } 
  137.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  138.                         $cityArrlen = count($cityArr); 
  139.                         $country = ' '
  140.                         $province = ' '
  141.                         if($cityArrlen>0) { 
  142.                             $len=mb_strpos($cityArr[1],' '); 
  143.                             if($len>0) { 
  144.                                 $pcArr = explode(' ',$cityArr[1]); 
  145.                                 $city=$pcArr[0]; 
  146.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  147.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  148.                             } else { 
  149.                                 $city = ''
  150.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  151.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  152.                             } 
  153.                         } 
  154.                         else { 
  155.                             $city=''
  156.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  157.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  158.                         } 
  159.                         delLine($filename,$lineText); 
  160.                     } 
  161.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  162.                         $cityArrlen = count($cityArr); 
  163.                         $country = ' '
  164.                         $province = ' '
  165.                         if($cityArrlen>0) { 
  166.                             $len=mb_strpos($cityArr[1],' '); 
  167.                             if($len>0) { 
  168.                                 $pcArr = explode(' ',$cityArr[1]); 
  169.                                 $city=$pcArr[0]; 
  170.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  171.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  172.                             } else { 
  173.                                 $city = ''
  174.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  175.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  176.                             } 
  177.                         } 
  178.                         else { 
  179.                             $city =''
  180.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  181.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  182.                         } 
  183.                         delLine($filename,$lineText); 
  184.                     } 
  185.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  186.                         $cityArrlen = count($cityArr); 
  187.                         $country = ' '
  188.                         $province = ' '
  189.                         if($cityArrlen>0) { 
  190.                             $len=mb_strpos($cityArr[1],' '); 
  191.                             if($len>0) { 
  192.                                 $pcArr = explode(' ',$cityArr[1]); 
  193.                                 $city=$pcArr[0]; 
  194.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  195.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  196.                             } else { 
  197.                                 $city = ''
  198.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  199.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  200.                             } 
  201.                         } 
  202.                         else { 
  203.                             $city = ''
  204.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  205.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  206.                         } 
  207.                         delLine($filename,$lineText); 
  208.                     } 
  209.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  210.                         $cityArrlen = count($cityArr); 
  211.                         $country = ' '
  212.                         $province = ' '
  213.                         if($cityArrlen>0) { 
  214.                             $len=mb_strpos($cityArr[1],' '); 
  215.                             if($len>0) { 
  216.                                 $pcArr = explode(' ',$cityArr[1]); 
  217.                                 $city=$pcArr[0]; 
  218.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  219.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  220.                             } else { 
  221.                                 $city = ''
  222.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  223.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  224.                             } 
  225.                         } 
  226.                         else { 
  227.                             $city = ''
  228.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  229.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  230.                         } 
  231.                         delLine($filename,$lineText); 
  232.                     } 
  233.                     elseif(preg_match("|^ (.*)|",$cityStr,$cityArr)) { 
  234.                         $cityArrlen = count($cityArr); 
  235.                         $country = ' '
  236.                         $province = ' '
  237.                         if($cityArrlen>0) { 
  238.                             $len=mb_strpos($cityArr[1],' '); 
  239.                             if($len>0) { 
  240.                                 $pcArr = explode(' ',$cityArr[1]); 
  241.                                 $city=$pcArr[0]; 
  242.                                 $pid =empty($citys[$city]['pid']) ? '' : $citys[$city]['pid']; 
  243.                                 $cid =empty($citys[$city]['cid']) ? '' : $citys[$city]['cid'];  
  244.                             } else { 
  245.                                 $city = ''
  246.                                 $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  247.                                 $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  248.                             } 
  249.                         } 
  250.                         else { 
  251.                             $city = ''
  252.                             $pid =empty($citys[$province]['pid']) ? '' : $citys[$province]['pid']; 
  253.                             $cid =empty($citys[$province]['cid']) ? '' : $citys[$province]['cid'];  
  254.                         } 
  255.                         delLine($filename,$lineText); 
  256.                     } 
  257.                     else { 
  258.                         $country = $cityStr
  259.                         $province=''
  260.                         $city=''
  261.                         $cid = ''
  262.                         $pid =''
  263.                         delLine($filename,$lineText); 
  264.                     } 
  265.                 } 
  266.                 $i++; 
  267.                 echo $ip2;exit
  268.                 $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.'")'
  269.                 if(mysql_query($sql)) { 
  270.                     echo $i.'<br/>'
  271.                 } 
  272.             }    
  273.     } 
  274.  
  275.  
  276.     function delLine($filename,$text) { 
  277.         $f1=fopen($filename,'r'); 
  278.         $tmp=tempnam('e:\web\www\\','newip.txt');//  
  279.         $f2=fopen($tmp,'w'); 
  280.         while(!feof($f1)){ 
  281.           $line=fgets($f1); 
  282.           if ($line!=$textfputs($f2,$line); 
  283.         } 
  284.         fclose($f1); 
  285.         fclose($f2); 
  286.         rename($tmp,$filename); 
  287.     } 
  288.     parseAndImport('ip1.txt',$citys); 
  289.  
  290. ?>