<?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地址!";
}
?>
12

被折叠的 条评论
为什么被折叠?



