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'); //就是这个方法貌似不合理望大家指点
以上就是本文的全部内容,希望对大家的学习有所帮助。