emlog的缓存文件是include/lib下的cache.php文件,由这个文件控制emlog的缓存文件的生成的,这个是emlog的生成缓存类。
生成缓存的好处就是减少查询数据库的次数,给系统减少压力。
比如emlog博客的热门日志和随机日志是不生成缓存的,直接通过查询数据得到的数据。
那么怎么来对热门日志和随机日志进行缓存呢?下面的教程就会说到如何添加热门日志的缓存。
下面开始如何修改,由于是HACK程序,所以修改前先备份数据库和数据,免的出现以外。
修改cache.php文件:
1.在class cache{}中添加private $hotlog_cache;
2.在最新日志下面添加热门日志的缓存代码。
/** * 热门日志 */ private function mc_hotlog() { $row = $this->db->fetch_array($this->db->query("SELECT option_value FROM " . DB_PREFIX . "options where option_name='index_hotlognum'")); $index_hotlognum = $row['option_value']; $sql = "SELECT gid,title FROM " . DB_PREFIX . "blog WHERE hide='n' and type='blog' ORDER BY views DESC LIMIT 0, $index_hotlognum"; $res = $this->db->query($sql); $logs = array(); while ($row = $this->db->fetch_array($res)) { $row['gid'] = intval($row['gid']); $row['title'] = htmlspecialchars($row['title']); $logs[] = $row; } $cacheData = serialize($logs); $this->cacheWrite($cacheData, 'hotlog'); }
上述代码只是对原来热门日志排行进行的缓存。
修改module.php文件:
3.剩下的就是主题读取热门日志的缓存和更新热门日志的缓存时间。因为热门日志不像评论,最新等等的排行榜(每次只要有新的日志或评论的时间更新缓存就可以了),所以热门日志排行榜(点击数每时每刻多在变化)更新的话除了上述日志(评论)的操作更新缓存外,还应该靠时间来更新缓存。
by 2013-05-05 13:50:09更新:
修复爆出路径的可能。更新缓存生成缓存文件时,由于缓存文件没有生成,读取缓存中unserialize函数和foreach函数多会报错。
cache.php文件修改:(在这个文件的最后几行)
if ($fp = fopen($cachefile, 'r')) { $data = @fread($fp, filesize($cachefile));//添加@ fclose($fp); $this->{$cacheName.'_cache'} = @unserialize(str_replace("<?php exit;//", '', $data));//添加@ return $this->{$cacheName.'_cache'};
<?php //widget:热门日志 function widget_hotlog($title){ global $CACHE; $hotlogfile = EMLOG_ROOT . '/content/cache/hotlog.php';//缓存路径 $hottime = is_file($hotlogfile)?filectime($hotlogfile):'0';//判断缓存是否存在,存在输出缓存文件的时间,不存在输出0 if ($hottime <(time()-3600)){$CACHE->updateCache('hotlog');}//判断缓存是否过期,过期更新缓存,这里是1小时。 $hotLogs_cache = $CACHE->readCache('hotlog');?> <h3><span><?php echo $title; ?></span></h3> <ul id="hotlog"> <?php if(is_array($hotLogs_cache) && !empty($hotLogs_cache)){ foreach($hotLogs_cache as $value): ?> <li><a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a></li> <?php endforeach; } else { echo '正在更新缓存……<br />请刷新浏览器!'; }?> </ul> <?php }?>
目前有 1 条评论
最好减肥产品 2013-04-05 09:081楼
总算找到解决方法了评论