//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