您的位置:首页 > 编程语言 > PHP开发

PHP做的IP归属地查询程序,文本数据库

2005-06-29 10:18 701 查看
执行程序:


<?PHP


//IP数据所在的目录


$ipdata = "ipdata";




/**//*


功能:IP归属地查询


*/


//-------------------


function Ip2Area($ipdata,$cur_ip)






{


$sect=explode(".",$cur_ip);


for ($i=0; $i<4; $i++)






{


$sect[$i]=sprintf("%03d", $sect[$i]);


}


//-------------------------


//寻找相应的文件


$handle = opendir($ipdata);


while($file =readdir($handle))






{


if($file=="."||$file=="..")continue;


$tar_1 = substr($file,0,3);


$tar_2 = substr($file,4,3);


$tar_3 = substr($file,8,3);


$tar_4 = substr($file,12,3);


if($sect[0]>=$tar_1&&$sect[0]<=$tar_3&&$sect[1]>=$tar_2&&$sect[1]<=$tar_4)






{


$fname = $file;


break;


}


}


$ipfile = file($ipdata."/".$fname);


$tempip=implode(".",$sect);


for($i=0;$i<sizeof($ipfile);$i++)






{


$data_ip = explode("__",$ipfile[$i]);


if(strcmp($tempip,$data_ip[0])>=0&&strcmp($tempip,$data_ip[1])<=0)






{


$area = trim($data_ip[2])." ".trim($data_ip[3]);


break;


}


else $area = "未知地区";


}


return $area;


}




if($_GET['ip']!="")






{


$arte = "查询结果:".Ip2Area($ipdata,$_GET['ip']);


}


?>


<meta http-equiv="Content-Type" content="text/html; charset=gb2312">


<title>IP归属地查询</title>


<table width="350" height="27" border="0" align="center" cellpadding="0" cellspacing="1" style="font-size:9pt; color:#FFFFFF;">


<tr>


<td height="35"><font color="#000000">您的IP:<font color="#FF0000"><?=$_SERVER['REMOTE_ADDR'];?></font> 位置:<?=Ip2Area($ipdata,$_SERVER['REMOTE_ADDR']);?></font></td>


</tr>


<form name="form1" method="get" action="index.php"><tr>


<td height="35" align="center" bgcolor="#666666">请输入IP地址:


<input name="ip" type="text" id="ip" size="15" style="height: 20px; border: 1px solid #FFFFFF; background-color:#CCCCCC;">


<input type="submit" name="Submit" value=" 查询 " style="height: 20px; border: 1px solid #FFFFFF; background-color:#CCCCCC;">


</td>


</tr></form>


<tr>


<td height="35" align="center" bgcolor="#666666"><?=$arte;?></td>


</tr>


</table>
IP数据包(已经格式化)下载地址:http://www.hanroad.net/data/ipdata.rar

如果你有新的QQWry.Dat显IPQQ里带有)可以用下面这个程序生成新的IP文件


<?PHP




/**//**************版权你有,赢利分红*******************


-----------------------------------------------


用 途:将从显IPQQ的"QQWry.Dat"IP数据包里导出的IP记录


转化为若干个小文本文件,并按照一定的格式重新组合


(转化后每个文本文件记录在3000条左右)


本来导出的文件有10M以上,一共18万多条。


用PHP检索这样的文本速度慢且占用大量CPU.:)




说明:程序很简单,就是很烦。


该程序执行10M文本时间会在5分钟以上,所以请先修改:


php.ini中 "max_execution_time"为:30000000000哈哈




其他:QQ:382399212 MSN:daniel_chnn@hotmail.com


-----------------------------------------------


*****************************************************/


//IP文件


$file = "ip.txt";






/**//////////////////////////////////////


//格式化IP地址。


function ip_format($cur_ip)






{


$ipvar=explode(".",$cur_ip);


for ($i=0; $i<4; $i++)






{


$ipvar[$i]=sprintf("%03d", $ipvar[$i]);


}


$tempip=implode(".",$ipvar);


return $tempip;


}


//----------------------------------------------


//读出所有内容到数组文件


$content = file($file);




while(list($key,$val) = each($content))






{


//以空格为界切开每一条记录


$list = explode(' ',$val);




//将数据重新格式化


$ni = 0;


while(list($key_sub,$val_sub) = each($list))






{


//跳过为空的记录


if($val_sub=="")continue;


//将IP地址格式化


if($ni==0||$ni==1)$val_sub=ip_format($val_sub);


$ni++;


if($ni==1)






{


$connew = $val_sub;


continue;


}


if($ni>4)






{


$connew.= " ".$val_sub;


continue;


}


$connew.="__".$val_sub;


}




//-----------------------


//将数据分文件存放


$sect = explode('.',$val);




if($sect[0] <= 60) $fname = "000.000_060.255";


else if($sect[0] == 61 && $sect[1] <= 120) $fname = "061.000_061.120";


else if($sect[0] == 61 && $sect[1] > 120 && $sect[1] <= 133) $fname = "061.121_061.133";


else if($sect[0] == 61 && $sect[1] > 133 && $sect[1] <= 140) $fname = "061.134_061.140";


else if($sect[0] == 61 && $sect[1] > 140 && $sect[1] <= 150) $fname = "061.141_061.150";


else if($sect[0] == 61 && $sect[1] > 150 && $sect[1] <= 153) $fname = "061.151_061.153";


else if($sect[0] == 61 && $sect[1] > 153 && $sect[1] <= 160) $fname = "061.154_061.160";


else if($sect[0] == 61 && $sect[1] > 160 && $sect[1] <= 170) $fname = "061.161_061.170";


else if($sect[0] == 61 && $sect[1] > 170 && $sect[1] <= 178) $fname = "061.141_061.178";


else if($sect[0] == 61 && $sect[1] > 178 && $sect[1] <= 180) $fname = "061.179_061.180";


else if($sect[0] == 61 && $sect[1] > 180 && $sect[1] <= 184) $fname = "061.181_061.184";


else if($sect[0] == 61 && $sect[1] > 184 && $sect[1] <= 186) $fname = "061.185_061.186";


else if($sect[0] == 61 && $sect[1] > 186 && $sect[1] <= 192) $fname = "061.187_061.192";


else if($sect[0] == 61 && $sect[1] > 192 && $sect[1] <= 240) $fname = "061.193_061.240";


else if($sect[0] == 61 && $sect[1] > 240) $fname = "061.241_061.255";


else if($sect[0] > 61 && $sect[0] <= 79) $fname = "062.000_079.255";


else if($sect[0] > 79 && $sect[0] <= 140) $fname = "080.000_140.255";


else if($sect[0] > 140 && $sect[0] <= 170) $fname = "141.000_170.255";


else if($sect[0] > 170 && $sect[0] <= 193) $fname = "171.000_193.255";


else if($sect[0] == 194 && $sect[1] <= 117) $fname = "194.000_194.117";


else if($sect[0] == 194 && $sect[1] > 117) $fname = "194.118_194.255";


else if($sect[0] == 195 && $sect[1] <= 112) $fname = "195.000_195.112";


else if($sect[0] == 195 && $sect[1] > 112) $fname = "195.113_195.255";


else if($sect[0] > 195 && $sect[0] <= 201) $fname = "196.000_201.255";


else if($sect[0] == 202 && $sect[1] <= 100) $fname = "202.000_202.100";


else if($sect[0] == 202 && $sect[1] > 100 && $sect[1] <= 105) $fname = "202.101_202.105";


else if($sect[0] == 202 && $sect[1] > 105 && $sect[1] <= 115) $fname = "202.106_202.115";


else if($sect[0] == 202 && $sect[1] > 115 && $sect[1] <= 130) $fname = "202.116_202.130";


else if($sect[0] == 202 && $sect[1] > 130) $fname = "202.131_202.255";


else if($sect[0] > 202 && $sect[0] <= 209) $fname = "203.000_209.255";


else if($sect[0] == 210 && $sect[1] <= 50) $fname = "210.000_210.050";


else if($sect[0] == 210 && $sect[1] > 50) $fname = "210.051_210.255";


else if($sect[0] == 211 && $sect[1] <= 90) $fname = "211.000_211.090";


else if($sect[0] == 211 && $sect[1] > 90 && $sect[1] <= 100) $fname = "211.091_211.100";


else if($sect[0] == 211 && $sect[1] > 100 && $sect[1] <= 140) $fname = "211.101_211.140";


else if($sect[0] == 211 && $sect[1] > 140) $fname = "211.141_211.255";


else if($sect[0] == 212) $fname = "212.000_212.255";


else if($sect[0] > 212 && $sect[0] <= 217) $fname = "213.000_217.255";


else if($sect[0] == 218 && $sect[1] <= 4) $fname = "218.000_218.004";


else if($sect[0] == 218 && $sect[1] > 4 && $sect[1] <= 6) $fname = "218.005_218.006";


else if($sect[0] == 218 && $sect[1] > 6 && $sect[1] <= 8) $fname = "218.007_218.008";


else if($sect[0] == 218 && $sect[1] > 8 && $sect[1] <= 10) $fname = "218.009_218.010";


else if($sect[0] == 218 && $sect[1] > 10 && $sect[1] <= 14) $fname = "218.011_218.014";


else if($sect[0] == 218 && $sect[1] > 14 && $sect[1] <= 20) $fname = "218.015_218.020";


else if($sect[0] == 218 && $sect[1] == 21) $fname = "218.021_218.021";


else if($sect[0] == 218 && $sect[1] == 22) $fname = "218.022_218.022";


else if($sect[0] == 218 && $sect[1] > 22 && $sect[1] <= 26) $fname = "218.023_218.026";


else if($sect[0] == 218 && $sect[1] == 27) $fname = "218.027_218.027";


else if($sect[0] == 218 && $sect[1] > 27 && $sect[1] <= 50) $fname = "218.028_218.050";


else if($sect[0] == 218 && $sect[1] > 50 && $sect[1] <= 61) $fname = "218.051_218.061";


else if($sect[0] == 218 && $sect[1] == 62) $fname = "218.062_218.062";


else if($sect[0] == 218 && $sect[1] > 62 && $sect[1] <= 68) $fname = "218.063_218.068";


else if($sect[0] == 218 && $sect[1] > 68 && $sect[1] <= 75) $fname = "218.069_218.075";


else if($sect[0] == 218 && $sect[1] > 75 && $sect[1] <= 80) $fname = "218.076_218.080";


else if($sect[0] == 218 && $sect[1] > 80 && $sect[1] <= 87) $fname = "218.081_218.087";


else if($sect[0] == 218 && $sect[1] > 87 && $sect[1] <= 89) $fname = "218.088_218.089";


else if($sect[0] == 218 && $sect[1] > 89 && $sect[1] <= 95) $fname = "218.090_218.095";


else if($sect[0] == 218 && $sect[1] > 95 && $sect[1] <= 246) $fname = "218.096_218.246";


else if($sect[0] == 218 && $sect[1] > 246) $fname = "218.247_218.255";


else if($sect[0] == 219 && $sect[1] <= 137) $fname = "219.000_219.137";


else if($sect[0] == 219 && $sect[1] > 137 && $sect[1] <= 139) $fname = "219.138_219.139";


else if($sect[0] == 219 && $sect[1] > 139 && $sect[1] <= 146) $fname = "219.140_219.146";


else if($sect[0] == 219 && $sect[1] > 146 && $sect[1] <= 149) $fname = "219.147_219.149";


else if($sect[0] == 219 && $sect[1] > 149 && $sect[1] <= 158) $fname = "219.150_219.158";


else if($sect[0] == 219 && $sect[1] > 158 && $sect[1] <= 230) $fname = "219.159_219.230";


else if($sect[0] == 219 && $sect[1] > 230 && $sect[1] <= 237) $fname = "219.231_219.237";


else if($sect[0] == 219 && $sect[1] == 238) $fname = "219.238_219.238";


else if($sect[0] == 219 && $sect[1] > 238) $fname = "219.239_219.255";


else if($sect[0] == 220 && $sect[1] <= 170) $fname = "220.000_220.170";


else if($sect[0] == 220 && $sect[1] > 170 && $sect[1] <= 180) $fname = "220.171_220.180";


else if($sect[0] == 220 && $sect[1] > 180) $fname = "220.181_220.255";


else if($sect[0] == 221 && $sect[1] <= 190) $fname = "221.000_221.190";


else if($sect[0] == 221 && $sect[1] > 190 && $sect[1] <= 210) $fname = "221.191_221.210";


else if($sect[0] == 221 && $sect[1] > 210) $fname = "221.211_221.255";


else if($sect[0] == 222 && $sect[1] <= 70) $fname = "222.000_222.070";


else if($sect[0] == 222 && $sect[1] > 70 && $sect[1] <= 140) $fname = "222.071_222.140";


else if($sect[0] == 222 && $sect[1] > 140) $fname = "222.141_222.255";


else if($sect[0] >222) $fname = "223.000_255.255";




//建立文本文件并插入数据


$file_point = fopen("ipdata/".$fname.".txt","a+");




fputs($file_point,$connew);


}


?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: