php文件缓存方法总结
为大家分享很全的php文件缓存,供大家参考,具体内容如下
<?php
classcache
{
privatestatic$_instance=null;
protected$_options=array(
'cache_dir'=>"./",
'file_name_prefix'=>'cache',
'mode'=>'1',//mode1为serializemodel2为保存为可执行文件
);
/**
*得到本类实例
*
*@returnAmbiguous
*/
publicstaticfunctiongetInstance()
{
if(self::$_instance===null)
{
self::$_instance=newself();
}
returnself::$_instance;
}
/**
*得到缓存信息
*
*@paramstring$id
*@returnboolean|array
*/
publicstaticfunctionget($id)
{
$instance=self::getInstance();
//缓存文件不存在
if(!$instance->has($id))
{
returnfalse;
}
$file=$instance->_file($id);
$data=$instance->_fileGetContents($file);
if($data['expire']==0||time()<$data['expire'])
{
return$data['contents'];
}
returnfalse;
}
/**
*设置一个缓存
*
*@paramstring$id缓存id
*@paramarray$data缓存内容
*@paramint$cacheLife缓存生命默认为0无限生命
*/
publicstaticfunctionset($id,$data,$cacheLife=0)
{
$instance=self::getInstance();
$time=time();
$cache=array();
$cache['contents']=$data;
$cache['expire']=$cacheLife===0?0:$time+$cacheLife;
$cache['mtime']=$time;
$file=$instance->_file($id);
return$instance->_filePutContents($file,$cache);
}
/**
*清除一条缓存
*
*@paramstringcacheid
*@returnvoid
*/
publicstaticfunctiondelete($id)
{
$instance=self::getInstance();
if(!$instance->has($id))
{
returnfalse;
}
$file=$instance->_file($id);
//删除该缓存
returnunlink($file);
}
/**
*判断缓存是否存在
*
*@paramstring$idcache_id
*@returnbooleantrue缓存存在false缓存不存在
*/
publicstaticfunctionhas($id)
{
$instance=self::getInstance();
$file=$instance->_file($id);
if(!is_file($file))
{
returnfalse;
}
returntrue;
}
/**
*通过缓存id得到缓存信息路径
*@paramstring$id
*@returnstring缓存文件路径
*/
protectedfunction_file($id)
{
$instance=self::getInstance();
$fileNmae=$instance->_idToFileName($id);
return$instance->_options['cache_dir'].$fileNmae;
}
/**
*通过id得到缓存信息存储文件名
*
*@param$id
*@returnstring缓存文件名
*/
protectedfunction_idToFileName($id)
{
$instance=self::getInstance();
$prefix=$instance->_options['file_name_prefix'];
return$prefix.'---'.$id;
}
/**
*通过filename得到缓存id
*
*@param$id
*@returnstring缓存id
*/
protectedfunction_fileNameToId($fileName)
{
$instance=self::getInstance();
$prefix=$instance->_options['file_name_prefix'];
returnpreg_replace('/^'.$prefix.'---(.*)$/','$1',$fileName);
}
/**
*把数据写入文件
*
*@paramstring$file文件名称
*@paramarray$contents数据内容
*@returnbool
*/
protectedfunction_filePutContents($file,$contents)
{
if($this->_options['mode']==1)
{
$contents=serialize($contents);
}
else
{
$time=time();
$contents="<?php\n".
"//mktime:".$time."\n".
"return".
var_export($contents,true).
"\n?>";
}
$result=false;
$f=@fopen($file,'w');
if($f){
@flock($f,LOCK_EX);
fseek($f,0);
ftruncate($f,0);
$tmp=@fwrite($f,$contents);
if(!($tmp===false)){
$result=true;
}
@fclose($f);
}
@chmod($file,0777);
return$result;
}
/**
*从文件得到数据
*
*@paramsring$file
*@returnboolean|array
*/
protectedfunction_fileGetContents($file)
{
if(!is_file($file))
{
returnfalse;
}
if($this->_options['mode']==1)
{
$f=@fopen($file,'r');
@$data=fread($f,filesize($file));
@fclose($f);
returnunserialize($data);
}
else
{
returninclude$file;
}
}
/**
*构造函数
*/
protectedfunction__construct()
{
}
/**
*设置缓存路径
*
*@paramstring$path
*@returnself
*/
publicstaticfunctionsetCacheDir($path)
{
$instance=self::getInstance();
if(!is_dir($path)){
exit('file_cache:'.$path.'不是一个有效路径');
}
if(!is_writable($path)){
exit('file_cache:路径"'.$path.'"不可写');
}
$path=rtrim($path,'/').'/';
$instance->_options['cache_dir']=$path;
return$instance;
}
/**
*设置缓存文件前缀
*
*@paramsrting$prefix
*@returnself
*/
publicstaticfunctionsetCachePrefix($prefix)
{
$instance=self::getInstance();
$instance->_options['file_name_prefix']=$prefix;
return$instance;
}
/**
*设置缓存存储类型
*
*@paramint$mode
*@returnself
*/
publicstaticfunctionsetCacheMode($mode=1)
{
$instance=self::getInstance();
if($mode==1)
{
$instance->_options['mode']=1;
}
else
{
$instance->_options['mode']=2;
}
return$instance;
}
/**
*删除所有缓存
*@returnboolean
*/
publicstaticfunctionflush()
{
$instance=self::getInstance();
$glob=@glob($instance->_options['cache_dir'].$instance->_options['file_name_prefix'].'--*');
if(empty($glob))
{
returnfalse;
}
foreach($globas$v)
{
$fileName=basename($v);
$id=$instance->_fileNameToId($fileName);
$instance->delete($id);
}
returntrue;
}
}
/*初始化设置cache的配置信息什么的*/
cache::setCachePrefix('core');//设置缓存文件前缀
cache::setCacheDir('./cache');//设置存放缓存文件夹路径
//模式1缓存存储方式
//a:3:{s:8:"contents";a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:34;i:4;i:5;i:5;i:6;i:6;i:6;}s:6:"expire";i:0;s:5:"mtime";i:1318218422;}
//模式2缓存存储方式
/*
<?php
//mktime:1318224645
returnarray(
'contents'=>
array(
0=>1,
1=>2,
2=>3,
3=>34,
4=>5,
5=>6,
6=>6,
),
'expire'=>0,
'mtime'=>1318224645,
)
?>
*
*
*/
cache::setCacheMode('2');
if(!$row=cache::get('zj2'))
{
$array=array(1,2,3,34,5,6,6);
$row=cache::set('zj2',$array);
}
//cache::flush();清空所有缓存
print_r($row);
文件缓存class
<?php
/**
*文件缓存类
*@authorxiaojiong&290747680@qq.com
*@date2011-08-17
*/
classcache
{
constFILE_LIFE_KEY='FILE_LIFE_KEY';
constCLEAR_ALL_KEY='CLEAR_ALL';
static$_instance=null;
protected$_options=array(
'cache_dir'=>'./cache',
'file_locking'=>true,
'file_name_prefix'=>'cache',
'cache_file_umask'=>0777,
'file_life'=>100000
);
staticfunction&getInstance($options=array())
{
if(self::$_instance===null)
{
self::$_instance=newself($options);
}
returnself::$_instance;
}
/**
*设置参数
*@paramarray$options缓存参数
*@returnvoid
*/
staticfunction&setOptions($options=array())
{
returnself::getInstance($options);
}
/**
*构造函数
*@paramarray$options缓存参数
*@returnvoid
*/
privatefunction__construct($options=array())
{
if($this->_options['cache_dir']!==null){
$dir=rtrim($this->_options['cache_dir'],'/').'/';
$this->_options['cache_dir']=$dir;
if(!is_dir($this->_options['cache_dir'])){
mkdir($this->_options['cache_dir'],0777,TRUE);
}
if(!is_writable($this->_options['cache_dir'])){
exit('file_cache:路径"'.$this->_options['cache_dir'].'"不可写');
}
}else{
exit('file_cache:"options"cache_dir不能为空');
}
}
/**
*设置缓存路径
*@paramstring$value
*@returnvoid
*/
staticfunctionsetCacheDir($value)
{
$self=&self::getInstance();
if(!is_dir($value)){
exit('file_cache:'.$value.'不是一个有效路径');
}
if(!is_writable($value)){
exit('file_cache:路径"'.$value.'"不可写');
}
$value=rtrim($this->_options['cache_dir'],'/').'/';
$self->_options['cache_dir']=$value;
}
/**
*存入缓存数据
*@paramarray$data放入缓存的数据
*@paramstring$id缓存id(又名缓存识别码)
*@paramcache_life缓存时间
*@returnbooleanTrueifnoproblem
*/
staticfunctionsave($data,$id=null,$cache_life=null)
{
$self=&self::getInstance();
if(!$id){
if($self->_id){
$id=$self->_id;
}else{
exit('file_cache:save()id不能为空!');
}
}
$time=time();
if($cache_life){
$data[self::FILE_LIFE_KEY]=$time+$cache_life;
}
elseif
($cache_life!=0){
$data[self::FILE_LIFE_KEY]=$time+$self->_options['file_life'];
}
$file=$self->_file($id);
$data="<?php\n".
"//mktime:".$time."\n".
"return".
var_export($data,true).
"\n?>"
;
$res=$self->_filePutContents($file,$data);
return$res;
}
/**
*得到缓存信息
*
*@paramstring$id缓存id
*@returnstring|array缓存数据
*/
staticfunctionload($id)
{
$self=&self::getInstance();
$time=time();
//检测缓存是否存在
if(!$self->test($id)){
//Thecacheisnothit!
returnfalse;
}
//全部清空识别文件
$clearFile=$self->_file(self::CLEAR_ALL_KEY);
$file=$self->_file($id);
//判断缓存是否已被全部清除
if(is_file($clearFile)&&filemtime($clearFile)>filemtime($file))
{
returnfalse;
}
$data=$self->_fileGetContents($file);
if(empty($data[self::FILE_LIFE_KEY])||$time<$data[self::FILE_LIFE_KEY]){
unset($data[self::FILE_LIFE_KEY]);
return$data;
}
returnfalse;
}
/**
*写入缓存文件
*
*@paramstring$file缓存路径
*@paramstring$string缓存信息
*@returnbooleantrue成功
*/
protectedfunction_filePutContents($file,$string)
{
$self=&self::getInstance();
$result=false;
$f=@fopen($file,'ab+');
if($f){
if($self->_options['file_locking'])@flock($f,LOCK_EX);
fseek($f,0);
ftruncate($f,0);
$tmp=@fwrite($f,$string);
if(!($tmp===false)){
$result=true;
}
@fclose($f);
}
@chmod($file,$self->_options['cache_file_umask']);
return$result;
}
/**
*格式化后的缓存文件路径
*
*@paramstring$id缓存id
*@returnstring缓存文件名(包括路径)
*/
protectedfunction_file($id)
{
$self=&self::getInstance();
$fileName=$self->_idToFileName($id);
return$self->_options['cache_dir'].$fileName;
}
/**
*格式化后的缓存文件名字
*
*@paramstring$id缓存id
*@returnstring缓存文件名
*/
protectedfunction_idToFileName($id)
{
$self=&self::getInstance();
$self->_id=$id;
$prefix=$self->_options['file_name_prefix'];
$result=$prefix.'---'.$id;
return$result;
}
/**
*判断缓存是否存在
*
*@paramstring$idCacheid
*@returnbooleanTrue缓存存在False缓存不存在
*/
staticfunctiontest($id)
{
$self=&self::getInstance();
$file=$self->_file($id);
if(!is_file($file)){
returnfalse;
}
returntrue;
}
/**
*得到缓存信息
*
*@paramstring$file缓存路径
*@returnstring缓存内容
*/
protectedfunction_fileGetContents($file)
{
if(!is_file($file)){
returnfalse;
}
returninclude$file;
}
/**
*清除所有缓存
*
*@returnvoid
*/
staticfunctionclear()
{
$self=&self::getInstance();
$self->save('CLEAR_ALL',self::CLEAR_ALL_KEY);
}
/**
*清除一条缓存
*
*@paramstringcacheid
*@returnvoid
*/
staticfunctiondel($id)
{
$self=&self::getInstance();
if(!$self->test($id)){
//该缓存不存在
returnfalse;
}
$file=$self->_file($id);
returnunlink($file);
}
}
存入数据
<?php $config=array( 'name'=>'xiaojiong', 'qq'=>'290747680', 'age'=>'20', ); //第一个参数缓存data //第二个参数缓存id //第三个参数cache_life0永不过期(cache::clear()清空所有除外)默认cache_life为option_cache_life cache::save($config,'config',0);
载入数据
<?php
//只有一个参数cache_id
$config=cache::load('config');
清空缓存
<?php
//清空指定缓存
cache::del('config');
//清空所有缓存
cache::clear();
cache信息配置
//在执行所有cache_func前调用 $_options=array( 'cache_dir'=>'./cache',//缓存文件目录 'file_name_prefix'=>'cache',//缓存文件前缀 'file_life'=>100000,//缓存文件生命 ); cache::setOptions($options); //再执行就会按着新配置信息执行,否则是默认信息 cache::save($arr,'arr'); //就是这个方法貌似不合理望大家指点
以上就是本文的全部内容,希望对大家的学习有所帮助。