本文实例讲述了帝国CMS根据ip跳转到不同的页面的方法。分享给大家供大家参考。
具体实现代码如下:
代码如下:
<?php//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;?>
推荐学习《帝国cms教程》
上述方法获得客户端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建站有所帮助。
以上就是深入帝国CMS根据ip跳转到不同的页面的方法的详细内容,更多请关注李烨博客其它相关文章!
转载请注明: » 深入帝国CMS根据ip跳转到不同的页面的方法