在取出数据之后把数据缓存在客户端,然后cookie指定一个时间周期,在下次刷新时先判断这个cookie时间到期没,如果到期了就重新刷新,否则就调用本地缓存。以下是以emlog博客为案例的代码
代码语言:javascript复制<?php
//载入全局加载项
require_once 'init.php';
//链接数据库
$DB = MySql::getInstance();
/*****************根据条件随机获取20条文章的GID***************/
$sql = "SELECT * FROM ".DB_PREFIX."blog ORDER BY rand() DESC LIMIT 20";
$list = $DB->query($sql);
while($row = $DB->fetch_array($list)){
$arrgid.= $row['gid'].',';
}
$arrgid = substr($arrgid,0,strlen($arrgid)-1);//去除最后一个逗号
$arr = explode(",",$arrgid);//将获取的gid以逗号分割为数组
/***********函数,根据文章gid输出文章标题与连接**************/
function sylist($gid){
$DB = MySql::getInstance();
$sql = "SELECT * FROM ".DB_PREFIX."blog WHERE gid = '{$gid}'";
$list = $DB->query($sql);
while($row = $DB->fetch_array($list)){
return '<li><a target="_blank" href="'.Url::log($row['gid']).'">'.$row['title'].'</li>';
}
}
/***********根据cookie在指定时间内获取内容**************/
//判断cookie【gid】是否存在
if (isset($_COOKIE["gid"])){
//判断cookie【date】过期时间是否存在
if(isset($_COOKIE["date"])){
echo '过期时间为:'.date("Y-m-d H:i:s", $_COOKIE["date"]).'<br/><br/>';
//判断时间是否过期,当前时间大于cookie【date】中储存的时间则为过期
if(time() > $_COOKIE["date"]){
//如果过期了,重新创建过期时间
setcookie("date", "", time()-3600);//删除过期时间
setcookie("date", time() 60*1,time() 3600);//重新创建过期时间,其中的60*1为一分钟
//刷新内容
setcookie("gid", "", time()-3600);//删除过期内容
setcookie("gid", $arrgid,time() 3600);//重新创建内容
}
//输出内容
$arr = explode(",",$_COOKIE["gid"]);
//循环输出数组
foreach($arr as $value){
echo sylist($value);
}
}else{
//如果不存在,则创建一个距离当前时间一分钟的时间为过期时间
setcookie("date", time() 60*1,time() 3600);//其中的60*1为一分钟
//如果date不存在时则会输出空白,此时随机输出内容
foreach($arr as $value){
echo sylist($value);
}
}
}else{
setcookie("date", time() 60*1,time() 3600);//其中的60*1为一分钟
setcookie("gid", $arrgid,time() 3600);//如果gid不存在,则创建gidcookie,内容为随机获取的文章gid
//如果gid不存在时则会输出空白,此时随机输出内容
foreach($arr as $value){
echo sylist($value);
}
}
?>
本文代码由emlog学院陈子文提供,虫子仅作保存分享之用!代码演示请转到daohang.shuyong.net查看