这是我写的一个缓存类的代码(附件中有下载),把数据以数组的格式缓存在硬盘上,稍微减轻一些服务器的压力。其实这个东西有一些配置文件性质的,以后慢慢改进吧!
/**--------------------------------------------------------*
* JBUF 1.0.0 Jeff Jing All Rights reserved *
**--------------------------------------------------------*
* @author: 景银振
* @Date: 2009-10-24 18:36:24
* @Version: 1.0.0
* @Description: Buffering data as array into harddisk
*
* */
//保留署名权,请尊重劳动成果
require_once("include/common.php");
error_reporting(E_ALL);
$cache_dir="cache/buffer/"; // 配置项: 缓存目录
$cache_file='main.buf'; // 配置项:缓存文件名 (其实可以考虑两个参数和起来)
class JBUF{
public static function set($key,$value,$expire,$force=false){
/**
* Description: 设置缓存
* 参数:
* $key 缓存项主键
* $value 缓存的值
* $expire 有效期,以秒为单位,如果写0,则永不过期
* $force 是否强制写入,默认为false当缓存中有相同主键没有过期的缓存返回false 否则强制覆盖
*
*/
global $cache_file;
global $cache_dir;
@$str=getFileContent($cache_file,$cache_dir); // 获取缓存文件内容
eval(strip_tags($str));
if($buffer[$key] && !$force){ // 缓存存在且没有强制覆盖
$row=$buffer[$key];
if($row['expire']=='never' || date("Y-m-d H:i:s",strtotime($row['expire']))<strtotime(date("Y-m-d H:i:s"))){ // 如果不是永不过期且未过期
return false;
}
}
$row['data']=$value;
$row['expire']=($expire==0)?'never':date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'))+$expire);
$buffer[$key]=$row;//'$buffer='.arr2str($arr).";"
writefile($cache_file, '$buffer='.arr2str($buffer).";",$cache_dir); //
unset($buffer); //释放变量
unset($str); // 释放变量
return true;
}
public static function get($key){
/**
* Description: 查找缓存
* 参数:
* $key 缓存项主键
*/
global $cache_file;
global $cache_dir;
@$str=getFileContent($cache_file,$cache_dir);// 读取数据
eval(strip_tags($str));
$row=$buffer[$key];
if($row['expire']=='never' || date("Y-m-d H:i:s",strtotime($row['expire']))<strtotime(date("Y-m-d H:i:s"))){ // 存在且未过期返回数据
return $row['data'];
} else { // 已过期,清空该项并返回null
unset($buffer[$key]);
writefile($cache_file, '$buffer='.arr2str($buffer).";",$cache_dir);
return null;
}
}else{
return null; //不存在直接返回null
}
}
public static function clear(){
/**
* Description: 清除所有缓存,删除缓存文件即可
*
*/
global $cache_file;
global $cache_dir;
if(file_exists($cache_dir.$cache_file)){
unlink($cache_dir.$cache_file);
}
}
}
/**
* Description: 将数组转为字符串
* Date: 2009-10-24
*/
if(is_array($arr)){
$str="array(";
foreach ($arr as $key=>$value){
$str.=("'".$key."'=>".arr2str($value).",");
}
$str=substr($str,0,strlen($str)-1);
$str.=")";
return $str;
}else{
return "'".$arr."'";
}
}