//php教程获取ip的算法
$user_IP=($_SERVER["HTTP_VIA"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:$_SERVER["REMOTE_ADDR"];
$user_IP=($user_IP)?$user_IP:$_SERVER["REMOTE_ADDR"];
//echo$user_IP;
//===================================
//
//功能:IP地址获取真实地址函数
//参数:$ip-IP地址
//作者:[Discuz!](C)ComsenzInc.
//
//===================================
functionconvertip($ip){
//IP数据文件路径,请根据情况自行修改
$dat_path='QQWry.dat';
//检查IP地址
if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$",$ip)){
return'IPAddressError';
}
//打开IP数据文件
if(!$fd=@fopen($dat_path,'rb')){
return'IPdatefilenotexistsoraccessdenied';
}
//分解IP进行运算,得出整形数
$ip=explode('.',$ip);
$ipNum=$ip[0]*16777216 $ip[1]*65536 $ip[2]*256 $ip[3];
//获取IP数据索引开始和结束位置
$DataBegin=fread($fd,4);
$DataEnd=fread($fd,4);
$ipbegin=implode('',unpack('L',$DataBegin));
if($ipbegin
$ipend=implode('',unpack('L',$DataEnd));
if($ipend
$ipAllNum=($ipend-$ipbegin)/7 1;
$BeginNum=0;
$EndNum=$ipAllNum;
//使用二分查找法从索引记录中搜索匹配的IP记录
while($ip1num>$ipNum||$ip2num
$Middle=intval(($EndNum $BeginNum)/2);
//偏移指针到索引位置读取4个字节
fseek($fd,$ipbegin 7*$Middle);
$ipData1=fread($fd,4);
if(strlen($ipData1)
fclose($fd);
return'SystemError';
}
//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂
$ip1num=implode('',unpack('L',$ipData1));
if($ip1num
//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环
if($ip1num>$ipNum){
$EndNum=$Middle;
continue;
}
//取完上一个索引后取下一个索引
$DataSeek=fread($fd,3);
if(strlen($DataSeek)
fclose($fd);
return'SystemError';
}
$DataSeek=implode('',unpack('L',$DataSeek.chr(0)));
fseek($fd,$DataSeek);
$ipData2=fread($fd,4);
if(strlen($ipData2)
fclose($fd);
return'SystemError';
}
$ip2num=implode('',unpack('L',$ipData2));
if($ip2num
//没找到提示未知
if($ip2num
if($Middle==$BeginNum){
fclose($fd);
return'Unknown';
}
$BeginNum=$Middle;
}
}
//下面的代码读晕了,没读明白,有兴趣的慢慢读
$ipFlag=fread($fd,1);
if($ipFlag==chr(1)){
$ipSeek=fread($fd,3);
if(strlen($ipSeek)
fclose($fd);
return'SystemError';
}
$ipSeek=implode('',unpack('L',$ipSeek.chr(0)));
fseek($fd,$ipSeek);
$ipFlag=fread($fd,1);
}
if($ipFlag==chr(2)){
$AddrSeek=fread($fd,3);
if(strlen($AddrSeek)
fclose($fd);
return'SystemError';
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)
fclose($fd);
return'SystemError';
}
$AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else{
fseek($fd,-1,SEEK_CUR);
}
while(($char=fread($fd,1))!=chr(0))
$ipAddr2.=$char;
$AddrSeek=implode('',unpack('L',$AddrSeek.chr(0)));
fseek($fd,$AddrSeek);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1.=$char;
}else{
fseek($fd,-1,SEEK_CUR);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1.=$char;
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)
fclose($fd);
return'SystemError';
}
$AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else{
fseek($fd,-1,SEEK_CUR);
}
while(($char=fread($fd,1))!=chr(0)){
$ipAddr2.=$char;
}
}
fclose($fd);
//最后做相应的替换操作后返回结果
if(preg_match('/http/i',$ipAddr2)){
$ipAddr2='';
}
$ipaddr="$ipAddr1$ipAddr2";
$ipaddr=preg_replace('//is','',$ipaddr);
$ipaddr=preg_replace('/^s*/is','',$ipaddr);
$ipaddr=preg_replace('/s*$/is','',$ipaddr);
if(preg_match('/http/i',$ipaddr)||$ipaddr==''){
$ipaddr='Unknown';
}
return$ipaddr;
}
?>
varsf='<?echo convertip($user_IP);?>';
if(sf.indexOf("香港")>=0){
window.location.href="";
}
elseif(sf.indexOf("广东省")>=0){
window.location.href="";
}
elseif(sf.indexOf("北京")>=0){
window.location.href="";
}
else{
window.location.href="";
}