在Discuz的“在线用户”列表中显示用户的IP地理位置

从本文开始,我虚心学习了可能吧的排版。如果您也有兴趣,可以读一下可能吧的《互联网让你有多烦躁?》一文。

通过IP了解用户的地理位置是一件非常有趣的事。如果你没使用过显IP的QQ,那么请你告诉我。我会在论坛里奖励你100鼠币。

本文适用于Discuz! 7.0.0 Release 20090121,对于其它版本,本文不一定有效,也不一定无效,所以可以作为参考。

请在修改任何文件之前进行备份!

一、准备IP数据库文件

上传纯真IP数据库到ipdata文件夹,并更名为wry.dat。

Linux用户请注意大小写。

 

二、修改member.php文件

该文件位于Discuz根目录下。

查找 在查找结果的下一行插入
$online['ip'] = $online['ip1'].'.'.$online['ip2'].'.'.$online['ip3'].'.'.$online['ip4']; require_once './include/misc.func.php';
$online['iplocation']=convertip($online['ip']);

 

三、修改include/misc.func.php文件

查找 修改为 说明
if(@file_exists($tinyipfile)) {
$return = convertip_tiny($ip, $tinyipfile);
} elseif(@file_exists($fullipfile)) {
$return = convertip_full($ip, $fullipfile);
}
if(@file_exists($fullipfile)) {
$return = convertip_full($ip, $fullipfile);
} elseif(@file_exists($tinyipfile)) {
$return = convertip_tiny($ip, $tinyipfile);
这样修改的目的是为了优先使用纯真IP数据库。当然,也可以直接删除其它数据库文件,只保留纯真的数据库。
if(!$fd = @fopen($ipdatafile)) { if(!$fd = @fopen($ipdatafile, 'rb')) { 参数"rb"表示以二进制方式打开IP数据库文件。如果使用的是20090121版或更新版本,则不需改动此处。
return '- '.$ipaddr; return mb_convert_encoding($ipaddr,"utf-8","gb2312"); 此处将纯真数据库的GB2312编码转换为UTF-8编码。仅Discuz为UTF-8版本时需要修改此处。

 

四、修改templates/default/whosonline.htm文件

查找 在查找结果的下一行插入
<td class="time">{lang online_ip}</td> <td>Location</td>
<td>$online[ip]&nbsp;</td> <td><font color=#ff0000>$online[iplocation]</font>&nbsp;</td>

<td>{lang online_in_thread}</td>的第二个结果处

<td>Location</td>
<td><!--{if $online['tid']}--><a href="viewthread.php?tid=$online[tid]">$online[subject]</a><!--{/if}-->&nbsp;</td> <td><font color=#ff0000>$online[iplocation]</font>&nbsp;</td>

 

Over.

修改后的效果可以参考我的论坛的“在线用户”列表,但和上述操作后的结果不完全一样。我自己还添加了显示用户的User-Agent信息,用来一目了然地看出各位用户是一个人还是一只蜘蛛。

1 条评论

  1. 路人 的头像 路人 说:
    谢谢你

留下评论