在网上搜索一下,还真的找到实现的方法。 来看看实现的方法吧。 1)函数编写 本来是以前的版本,我是通过Js方式来调用的,但这种方式在有些页面可能会不兼容。后来就升级了函数方式,但一直没更新。好了,我们来看看具体的函数编写方法: 在/include/extend.func.PHP 文件中的?>的上面加入以下函数代码:
function convertip($ip){ $dat_path = DEDEDATA.'/ip/QQWry.dat'; if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$",$ip)){ return 'IP格式错误'; } if(!$fd = @fopen($dat_path,'rb')){ return '无法打开IP数据库'; } $ip = explode('.',$ip); $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3]; $DataBegin = fread($fd,4); $DataEnd = fread($fd,4); $ipbegin = implode('',unpack('L',$DataBegin)); if($ipbegin < 0) $ipbegin += pow(2,32); $ipend = implode('',$DataEnd)); if($ipend < 0) $ipend += pow(2,32); $ipAllNum = ($ipend - $ipbegin) / 7 + 1; $BeginNum = 0; $EndNum = $ipAllNum; while($ip1num>$ipNum || $ip2num<$ipNum) { $MIDdle= intval(($EndNum + $BeginNum) / 2); fseek($fd,$ipbegin + 7 * $MIDdle); $ipData1 = fread($fd,4); if(strlen($ipData1) < 4) { fclose($fd); return 'System Error'; } $ip1num = implode('',$ipData1)); if($ip1num < 0) $ip1num += pow(2,32); if($ip1num > $ipNum) { $EndNum = $MIDdle; continue; } $DataSeek = fread($fd,3); if(strlen($DataSeek) < 3) { fclose($fd); return 'System Error'; } $DataSeek = implode('',$DataSeek.chr(0))); fseek($fd,$DataSeek); $ipData2 = fread($fd,4); if(strlen($ipData2) < 4) { fclose($fd); return 'System Error'; } $ip2num = implode('',$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('',$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('',$AddrSeek2.chr(0))); fseek($fd,$AddrSeek2); } else { fseek($fd,-1,SEEK_CUR); } while(($char = fread($fd,1)) != chr(0)) $ipAddr2 .= $char; $AddrSeek = implode('',$AddrSeek.chr(0))); fseek($fd,$AddrSeek); while(($char = fread($fd,1)) != chr(0)) $ipAddr1 .= $char; } else { fseek($fd,SEEK_CUR); while(($char = fread($fd,1)) != chr(0)) $ipAddr1 .= $char; $ipFlag = 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; } |
上一篇:织梦CMS的会员投稿后前台自动更新的方法
下一篇:DEDECMS中5.6整合Discuz_X1.5的方法
总结以上是内存溢出为你收集整理的织梦CMS如何将IP地址转换为纯真IP数据库全部内容,希望文章能够帮你解决织梦CMS如何将IP地址转换为纯真IP数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)