//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地址
//===================================
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<0)$ipbegin+=pow(2,32);
$ipend=implode('',unpack('L',$DataEnd));
if($ipend<0)$ipend+=pow(2,32);
$ipAllNum=($ipend-$ipbegin)/7+1;

$BeginNum=0;
$EndNum=$ipAllNum;

//运用二分查找法从索引记载中查找匹配的IP记载
while($ip1num>$ipNum||$ip2num<$ipNum){
$Middle=intval(($EndNum+$BeginNum)/2);

//偏移指针到索引方位读取4个字节
fseek($fd,$ipbegin+7*$Middle);
$ipData1=fread($fd,4);
if(strlen($ipData1)<4){
fclose($fd);
return'SystemError';
}
//提取出来的数据转化生长整形,假如数据是负数则加上2的32次幂
$ip1num=implode('',unpack('L',$ipData1));
if($ip1num<0)$ip1num+=pow(2,32);

//提取的长整型数大于咱们IP地址则修正完毕方位进行下一次循环
if($ip1num>$ipNum){
$EndNum=$Middle;
continue;
}

//取完上一个索引后取下一个索引
$DataSeek=fread($fd,3);
if(strlen($DataSeek)<3){
fclose($fd);
return'SystemError';
}
$DataSeek=implode('',unpack('L',$DataSeek.chr(0)));
fseek($fd,$DataSeek);
$ipData2=fread($fd,4);
if(strlen($ipData2)<4){
fclose($fd);
return'SystemError';
}
$ip2num=implode('',unpack('L',$ipData2));
if($ip2num<0)$ip2num+=pow(2,32);

//没找到提示不知道
if($ip2num<$ipNum){
if($Middle==$BeginNum){
fclose($fd);
return'Unknown';
}
$BeginNum=$Middle;
}
}

//下面的代码读晕了,没读理解,有爱好的渐渐读
$ipFlag=fread($fd,1);
if($ipFlag==chr(1)){
$ipSeek=fread($fd,3);
if(strlen($ipSeek)<3){
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)<3){
fclose($fd);
return'SystemError';
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)<3){
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)<3){
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('/CZ88.Net/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='';

if(sf.indexOf("香港")>=0){
window.location.href="http://www.****.com/?香港";
}
elseif(sf.indexOf("广东省")>=0){
window.location.href="http://www.****.com/?广东";
}


声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:123456@qq.com 我们将配合处理!

原文地址:帝国CMS二次开发根据ip跳转到不同的页面发布于2022-06-10 07:43:46

相关推荐