第一步:在global.fun.php文件中自定义两个函数
//缓存点击量
function cache_hits($module, $itemid) {
if(@$fp = fopen(PHPMPS_CACHE.'/hits-'.$module.'.php', 'a')) {
flock($fp, LOCK_EX);
fwrite($fp, $itemid.' ');
flock($fp, LOCK_UN);
fclose($fp);
}
}
//更新点击量
function update_hits($module, $table) {
global $db;
$hits = trim(file_get(PHPMPS_CACHE.'/hits-'.$module.'.php'));
file_put(PHPMPS_CACHE.'/hits-'.$module.'.php', ' ');
file_put(PHPMPS_CACHE.'/hits-'.$module.'.dat', time());
if($hits) {
$tmp = array_count_values(explode(' ', $hits));
$arr = array();
foreach($tmp as $k=>$v) {
$arr[$v] .= $k ? ','.$k : '';
}
$id = $module == 'info' ? 'id' : 'comid';
foreach($arr as $k=>$v) {
$db->query("UPDATE LOW_PRIORITY {$table} SET `click`=`click`+".$k." WHERE `$id` IN (0".$v.")", 'UNBUFFERED');
}
}
}第二步:在common.php文件中添加下面代码
$PHP_TIME = $PHPMPS_TIME = time(); //定义时间
define('SYS_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true: false);//获取当前操作系统
define('PHPMPS_CACHE', PHPMPS_ROOT.'data/phpcache'); //定义缓存路径
define('P_CHMOD', ($CFG['file_mod'] && !SYS_WIN) ? $CFG['file_mod'] : 0);//文件目录权限修改第三步:在数据库phpmps_config表里添加一个字段 cache_hits 然后在后台系统配置模板里加上这个参数,用来设置缓存时间。(以秒为单位)
第四步:把view.php文件中原来更新点击量的代码
$db->query("UPDATE {$table}info SET click=click+1 WHERE id='$id'");换成下面的代码
//点击量缓存
if($CFG['cache_hits']) {
cache_hits('info', $id);
} else {
$db->query("UPDATE LOW_PRIORITY {$table}info SET click=click+1 WHERE id='$id'");
}第五步:在category.php文件中添加下面代码
//更新点击量缓存
if($CFG['cache_hits']) {
$file = PHPMPS_CACHE.'/hits-info';
if($PHPMPS_TIME - @filemtime($file.'.dat') > $CFG['cache_hits'] || @filesize($file.'.php') > 102400) update_hits('info', $table.'info');
}搞完后在后台系统设置里设置好缓存时间,这样信息点击量会被先缓存到hits-info.php缓存文件里然后按照设置好的缓存时间再更新到数据库,有效缓解数据库的压力!
同理商家页点击量也可以这么设置,将第四步 cache_hits('info', $id); 改成 cache_hits('com', $comid);
评论列表: