Discuz論壇教程之Discuz中最高在線人數更新和存儲機制詳解以及如何修改最高在線人數。
查看模板文件
/template/default/forum/discuz.htm
顯示歷史最高在線人數的代碼為:
[php]view plaincopy
{lang index_mostonlines} <strong>$onlineinfo[0]</strong> {lang on} <strong>$onlineinfo[1]</strong>.</span>
即 最高記錄是 xx 于 YYYY-MM-DD
這里在線記錄信息存儲于數組$onlineinfo
那么數組$onlineinfo怎么來的呢,來看看論壇首頁的業務邏輯文件:
/source/module/forum/forum_index.php
看看如下代碼
[php]view plaincopy
$onlineinfo= explode("/t", $_G['cache']['onlinerecord']);
if(empty($_G['cookie']['onlineusernum'])) {
$onlinenum= C::app()->session->count();
if($onlinenum> $onlineinfo[0]) {
$onlinerecord= "$onlinenum/t".TIMESTAMP;
C::t('common_setting')->update('onlinerecord', $onlinerecord);
savecache('onlinerecord', $onlinerecord);
$onlineinfo= array($onlinenum, TIMESTAMP);
}
dsetcookie('onlineusernum', intval($onlinenum), 300);
} else{
$onlinenum= intval($_G['cookie']['onlineusernum']);
}
$onlineinfo[1] = dgmdate($onlineinfo[1], 'd');
這里首先從緩存$_G['cache']['onlinerecord']中讀取數據復制給數組$onlineinfo;
然后判斷當前在線人數是否超過歷史最高,如果超過了則更新,注意看代碼:
[php]view plaincopy
C::t('common_setting')->update('onlinerecord', $onlinerecord);
由此我們看到歷史最高數據存儲在數據表pre_common_setting中skey='onlinerecord'
這里順便說一下緩存數據$_G['cache']['onlinerecord']存儲于數據表pre_common_syscache中cname='onlinerecord'
關于緩存的讀取參考/source/function/function_core.php中的savecache和loadcache函數,這里就不再詳述了;
總結一下
1、歷史最高在線人數存儲于數據表pre_common_setting中skey='onlinerecord';
2、discuz系統每次更新的時候會自動更新緩存$_G['cache']['onlinerecord'];
3、顯示的時候直接從緩存中讀取數據;
因此懂得mysql操作的朋友只需要修改數據表pre_common_setting中skey='onlinerecord'的svalue值然后在后臺強制更新緩存即可達到修改歷史最高在線人數的目的;
新聞熱點
疑難解答