会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > WordPress显示评论者地理位置(非插件)

WordPress显示评论者地理位置(非插件)

时间:2012-04-10 18:38:44   作者:   来源:   点击:

相信常常到博客的朋友可能注意到了最近把评论者的地理位置显示出来了,前两天也有朋友问是如何实现的,以前使用Pjblog的时候就使用过评论者显示地理位置,最近也研究了下如安在WordPress下实现评论者地理位置的问题,找了相关资料,可以操纵插件实现,可是笔者一贯就是能不消插件则不消插件,所以就找了许多相关资料。

下面给年夜家分享下WordPress评论者操纵纯代码实现添加地址位置及所处网络的功能,下面是这个功能的截图:

第一步: 下载一个IP 数据库 QQWry.Dat 文件放到正在使用主题的根目录下,下面年夜葱给年夜家提供下载地址,年夜家也可以百度或谷歌、搜狗这些搜索引擎搜索下最新数据的,记住是上传到主题根目录:

.congblog/url/aHR0cDovL3hhLmN0ZnMuZnRuLnFxLmNvbS9mdG5faGFuZGxlci9lZjMwYjVkMGM1ZWU3YTFkY2E1NzcwOWEwOWRkZjI5NDM0YmNmOTI3OWMwY2IzNWUxZWE2NzQ3MWUzZWQ0NzgyM2JiNTYyYjNkZGU4NjQzZTY1OGFjNmEwZjZkMDNhOGRiODE5NjgwYWU1Yzk1YzcwMmQxZTQwMzhiNjM5Njg0YS9RUVdyeS5EQVQ=

第二步: 我们先找到正在使用的主题根目录下的 functions.php 这个文件进行编辑,在最后的?》前面添加以下代码(再此之前年夜葱建议年夜家先进行备份该文件,以免编码出错无法还原。):

######## 显示评论者地理位置 #########function convertip($ip) {$dat_path = TEMPLATEPATH.’/QQWry.Dat’;if(!$fd = @fopen($dat_path, ‘rb’)){return ‘IP date file not exists or access denied’;}$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(", unpack(‘L’, $DataEnd));if($ipend < 0) $ipend += pow(2, 32); $ipAllNum = ($ipend – $ipbegin) / 7 + 1; $BeginNum = 0; $EndNum = $ipAllNum; while($ip1num>$ipNum || $ip2num $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(", unpack(‘L’, $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(", 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 /is’, ", $ipaddr);$ipaddr = preg_replace(‘/^s*/is’, ", $ipaddr);$ipaddr = preg_replace(‘/s*$/is’, ", $ipaddr);if(preg_match(‘/http/i’, $ipaddr) || $ipaddr == ") {$ipaddr = ‘Unknown’;}$ipaddr = iconv(‘gbk’, ‘utf-8//IGNORE’, $ipaddr);if( $ipaddr != ‘ ‘ )return $ipaddr;else$ipaddr = ‘火星来客’;return $ipaddr;}

分享到:

网友评论

热门建站经验