A5下载文章资讯

分类分类

ECSHOP最新IP库和升级补丁

2015-04-10 09:04作者:zhao

ECSHOP官方更新了多个版本,但IP库一直没更新,版本为20071024,相当鸡肋,本升级程序读取纯真IP数据库,独有高压缩比和快速检索算法。

新版纯真IP库

 

 

升级指南

一、下载纯真IP数据库,地址一:官方下载,地址二:本站下载,下载后请重命名为ipdata.dat,覆盖至/includes/codetable/。

二、编辑/includes/lib_base.php,将函数ecs_geoip($ip)替换为

/**

*获取IP对应的地理位置

*@paramstring$ip字符串

*@returnstring

*/

functionecs_geoip($ip)

{

$return='';

if(preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/",$ip))

{

$iparray=explode('.',$ip);

if($iparray[0]==10||$iparray[0]==127||($iparray[0]==192&&$iparray[1]==168)||($iparray[0]==172&&($iparray[1]>=16&&$iparray[1]<=31)))

{

$return='LAN';

}

elseif($iparray[0]>255||$iparray[1]>255||$iparray[2]>255||$iparray[3]>255)

{

$return='InvalidIPAddress';

}

else

{

$tinyipfile=ROOT_PATH.'includes/codetable/ipdata.dat';//ipdata.dat-纯真网络IP库

if(@file_exists($tinyipfile))

{

$return=convertip_tiny($ip,$tinyipfile);

}

}

}

return$return;

}

functionconvertip_tiny($ip,$ipdatafile)

{

static$fp=NULL,$offset=array(),$index=NULL;

$ipdot=explode('.',$ip);

$ip=pack('N',ip2long($ip));

$ipdot[0]=(int)$ipdot[0];

$ipdot[1]=(int)$ipdot[1];

if($fp===NULL&&$fp=@fopen($ipdatafile,'rb'))

{

$offset=@unpack('Nlen',@fread($fp,4));

$index=@fread($fp,$offset['len']-4);

}

elseif($fp==FALSE)

{

return'InvalidIPdatafile';

}

$length=$offset['len']-1028;

$start=@unpack('Vlen',$index[$ipdot[0]*4].$index[$ipdot[0]*4+1].$index[$ipdot[0]*4+2].$index[$ipdot[0]*4+3]);

for($start=$start['len']*8+1024;$start<$length;$start+=8)

{

if($index{$start}.$index{$start+1}.$index{$start+2}.$index{$start+3}>=$ip)

{

$index_offset=@unpack('Vlen',$index{$start+4}.$index{$start+5}.$index{$start+6}."x0");

$index_length=@unpack('Clen',$index{$start+7});

break;

}

}

@fseek($fp,$offset['len']+$index_offset['len']-1024);

if($index_length['len'])

{

return@fread($fp,$index_length['len']);

}

else

{

return'Unknown';

}

}

展开全部

相关

说两句网友评论
    我要跟贴
    取消