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地址為十進制數代碼如下:<?phpset_time_limit (0); //設置腳本運行時間,參數0為無限時
$fd = fopen("D:\SERVER\wwwroot\PHP\ip.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?"\r\n":"")."\"$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數據表
?>
------------------------------------------------------------------------------------------------------
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的代碼:<?phprequire_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.'
';$ip_arr = explode(".",$ip);$ip = 0;foreach($ip_arr as $i=>$s){$ip += $s*pow(256,3-$i);
}echo '轉十進制值:'.$ip.'
';$result = mysql_query("SELECT * FROM ip WHERE ip1<= $ip AND ip2>= $ip");$re_arr = mysql_fetch_array($result);echo "你來自: $re_arr[address]".'
';?>嘻嘻,完成!!