searchIP算法

<?php
/*
 用法:
include 'searchIP';
 $getIP="555.0.0.0"; // 这里是自己随便写的一个ip  实际时你还要通过程序得到这个ip
$url="http://localhost/zendphp/IP/ip.txt";//我的ip数据库文件 我用的是txt格式  377443条 
if(file_exists($url)){
 die("未找到文件");
 return;
 }
$rows=file($url);
$info=search($getIP,$rows);
echo $info;
*
*
* */

 

function search ($getIP,$rows){
 
 //只开始时查前三段

$subIPs=explode(".",$getIP);
$subIP=$subIPs[0].$subIPs[1].$subIPs[2];
$subIPSub=$subIPs[0].$subIPs[1];
$lastIP=$subIPs[3];
$p=0;
$q=0;
//$length=count($rows);
foreach ($rows as $line){
 ++$p;
$ipData=preg_split ('/[/s]+/',$line);//注意这里的空白匹配
 $startIP=$ipData[0];
$endIP=$ipData[1];
$endSerials=explode(".",$endIP);
$three=$endSerials[0].$endSerials[1].$endSerials[2];
 $ipSerials=explode(".",$startIP);
 //目标ip  ===============
 $ipJ=$ipSerials[0].$ipSerials[1].$ipSerials[2];//==============
  $ipJSub=$ipSerials[0].$ipSerials[1];
 $lastJ=$ipSerials[3];//=============
 //ip信息
 $areaInfoJ=$ipData[2].$ipData[3];//====================
 //可以用二分查找
 if ($subIPSub==$ipJSub){//前两段

  $q=$p;//假如后面没有查出来这就返回该索引信息

 if($subIP==$ipJ){ //前三段
  if($lastIP==$lastJ){//最后一段
    return $areaInfoJ; 
   
  }
 return $areaInfoJ;
  
}
if($subIP>$ipJ&&$subIP<=$three){//第三段比较
   return $areaInfoJ;     

}


}

 

 
 }
  
if($q!=0){
$myInfo=$rows[$q-1];
$myIpData=preg_split ('/[/s]+/',$myInfo);//注意这里的空白匹配
$myArea=$myIpData[2].$myIpData[3];
return  $myArea;
}
  
  return "它是无效IP地址!";
  
}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值