千家信息网

帝国CMS如何实现根据ip跳转到不同的页面

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,帝国CMS如何实现根据ip跳转到不同的页面?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!代码如下:
千家信息网最后更新 2024年12月12日帝国CMS如何实现根据ip跳转到不同的页面

帝国CMS如何实现根据ip跳转到不同的页面?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

代码如下:

上述方法获得客户端IP地址后,再传入convertip函数转化为真实地址,convertip($ip)函数代码如下:

代码如下:

//===================================// 功能:IP地址获取真实地址函数// 参数:$ip - IP地址//===================================function convertip($ip) {//IP数据文件路径$dat_path = 'QQWry.dat';//检查IP地址if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)){return 'IP Address Error';}//打开IP数据文件if(!$fd = @fopen($dat_path, 'rb')){return 'IP date file not exists or access denied';}//分解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 'System Error';}//提取出来的数据转换成长整形,如果数据是负数则加上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 'System Error';}$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));fseek($fd, $DataSeek);$ipData2 = fread($fd, 4);if(strlen($ipData2) < 4) {fclose($fd);return 'System Error';}$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 'System Error';}$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 'System Error';}$ipFlag = fread($fd, 1);if($ipFlag == chr(2)) {$AddrSeek2 = fread($fd, 3);if(strlen($AddrSeek2) < 3) {fclose($fd);return 'System Error';}$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 'System Error';}$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;}?>

使用时通过convertip函数根据IP地址获取真实地址,再通过如下js代码实现跳转功能:

代码如下:

var sf='';//此处的sf变量可保存PHP函数获取到的真实地址if(sf.indexOf("香港")>=0){_window.location.href="http://www.****.com/?香港";}else if(sf.indexOf("广东省")>=0){_window.location.href="http://www.****.com/?广东";}

感谢各位的阅读!看完上述内容,你们对帝国CMS如何实现根据ip跳转到不同的页面大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。

0