zoukankan      html  css  js  c++  java
  • QQWry.dat导入Mysql显IP程序

    joseph1984
    转:QQWry.dat导入Mysql显IP程序
    一、去www.CZ88.net下载最新的纯真IP数据库!然后用自带的程序解压出TXT来。
    
    二、把解压出来的TXT放去站点目录(随便你自己站点下的目录,如我的是/var/www/),因为我用的是UTF8(原TXT编码是ANSI),所以用EP或UE打开另存为UTF8编码,如下图:
    
    
    三、然后进入phpMyAdmin 创建一个数据库和表,这里有个注意的地方就是也要用UTF8(呵呵,国际化点)
    
    创建库:ipdb
    创建ip表时的SQL语句:
    CREATE TABLE `ip` ( `id` int(11) unsigned NOT NULL auto_increment,`ip1` int(10) unsigned NOT NULL default '0', `ip2`   int(10) unsigned NOT NULL default '0',`address` varchar(255) NOT NULL default '',PRIMARY KEY (`id`)) TYPE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    
    四、现在可以用PHP先转TXT的IP地址为十进制数代码如下:
    
    <?php
      set_time_limit(0); //设置脚本运行时间,参数0为无限时
      $fd = fopen("D:SERVERwwwrootPHPip.txt", "r");   //以只读方式打开文件,并将指针指向文件头,注意要实际路径
      $temp_filename = tempnam("/tmp", "ip_");   //在临时目录中创建一个以IP_开头的文件
      $fd2 = fopen("$temp_filename", "w");   //写入方式打开,将文件指针指向文件头并将文件大小截为零,文件没有就尝试创建
      $id = 0;   
      while(!feof($fd)){   //测试文件指针是否到了文件结束的位置
      $id++;  //库表中的id字段增1
      $linestr = fgets($fd, 4096);   //从文件指针中读取一行
      if(!trim($linestr)) break;   //修剪两边多余空格等
      $ip1_str = trim(substr($linestr,0,15));   //返回所需的字符串
      $ip2_str = trim(substr($linestr,16,15));   
      $address_str = trim(substr($linestr,32));   
       //以下是将ip1转为十进制数
      $ip_arr = explode(".",$ip1_str);   // 使用一个字符串分割另一个字符串以.来区分
      $ip1_str = 0;  //初始化
      foreach($ip_arr as $i=>$s){   
      $ip1_str += $s*pow(256,3-$i);  //幂次方函数 
      }   
      //以下是将ip2转为十进制数
      $ip_arr = explode(".",$ip2_str);
    
    $ip2_str = 0;   //初始化
      foreach($ip_arr as $i=>$s){   
      $ip2_str += $s*pow(256,3-$i);   
      }   
      fwrite($fd2,($id>1?"
    ":"").""$id","$ip1_str","$ip2_str","$address_str"");   //写入临时文件
      }
      die("输出完成");
    ?>
    
    ----------------------------------------------------------------------------------------------------------------------
    注意fopen函数的实际路径,注释都加了,应该能看明白吧!
    
    执行后,会在临时目录生成一个以IP_为前缀的tmp文件
    
    
    五、现在可以用生成的临时文件导入到ip表中了代码如下:
    数据库连接的代码db.php
    
    
    <?php
      $dbhost = 'localhost';       //   数据库服务器   
      $dbuser = 'root';       //   数据库用户名   
      $dbpw = '123456';       //   数据库密码 
      $dbname = 'ipdb'; //   数据库名   
      $dbtable = 'ip';   //ip数据表
    ?>
    
    ------------------------------------------------------------------------------------------------------
    
    <?php
      require_once("db.php");
      if(!mysql_connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect) or !mysql_select_db($dbname)){die("datebase error."); }
      mysql_query("SET NAMES 'utf8'");
      //mysql_query("update ip set address='暂无资料' where address=' '");
      mysql_query("TRUNCATE TABLE `$dbtable`;");   
      mysql_query("LOAD DATA LOCAL INFILE '".addslashes("/tmp/ip_11.tmp")."' INTO TABLE `$dbtable` FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'"); 
    ?>
    
     
    
    
    好了最后是显示IP的代码:
    
    <?php
      require_once("db.php");  
      if(!mysql_connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect) or !mysql_select_db($dbname)){die("datebase error."); }
      mysql_query("SET NAMES 'utf8'");
      $ip = $_SERVER['REMOTE_ADDR'];
      echo '你的IP:'.$ip.'<br />';
      $ip_arr = explode(".",$ip);  
      $ip = 0; 
      foreach($ip_arr as $i=>$s){   
      $ip += $s*pow(256,3-$i);
      } 
      echo '转十进制值:'.$ip.'<br />';
      $result = mysql_query("SELECT * FROM ip WHERE ip1<= $ip AND ip2>= $ip");
      $re_arr =  mysql_fetch_array($result);
    
      echo "你来自: $re_arr[address]".'<br />';
    ?>
    
    嘻嘻,完成!!
  • 相关阅读:
    HTML基础
    JavaScript基础
    J2EE技术(六)——JSP
    2011.2—至今年度总结
    J2EE技术(二)——JDBC
    DRP项目总结(一)——项目简介
    CSS基础
    J2EE技术(五)——EJB
    J2EE技术(三)——JMS
    J2EE技术(四)——JavaMail
  • 原文地址:https://www.cnblogs.com/benpaodegegen/p/9626233.html
Copyright © 2011-2022 走看看