以文件形式缓存php变量的方法
本文实例讲述了以文件形式缓存php变量的方法。分享给大家供大家参考。具体实现方法如下:
<?php /* $cache_set=array( //缓存路径,最后要加"/" 'cacheRoot'=>'./cache/', //缓存时间 'cacheTime'=>20, //cachetype 'cacheType'=>1, //扩展名 'cacheExe'=>'.php' ); $cache=newCache($cache_set); $a=array('1','2'); $a="aaa"; $b=''; if($cache->cache_is("d")){ $c=$cache->cache_read("d"); echo"c"; print_r($c); }else{ $b=$cache->cache_data('d',$a); } print_r($b); //$cache->clear("a"); //echo$cache->cache_read("./cache/d.php"); //echo$d; */ /** *数据缓存类v1.0 *@authorshooke *2009-11-1316:02:26 *用于缓存数据,如变量,但不能缓存页面 */ classCache{ //配置 public$config=array( //缓存路径 'cacheRoot'=>'./cache/', //缓存时间 'cacheTime'=>1, //cache类型1串化数据2变量 'cacheType'=>2, //扩展名 'cacheExe'=>'.php' //转换中间变量 ); public$return_name=array(); function__construct($cache_set=array()) { if(!empty($cache_set))$this->config=array_merge($this->config,$cache_set); $this->config['ClassName']=__CLASS__; } publicfunctionclear($filename=''){ if(file_exists($this->cache_file($filename))){ @unlink($this->cache_file($filename)); }elseif(empty($filename)){ $this->clear_dir($this->config['cacheRoot']); }else{ $this->clear_dir($this->config['cacheRoot'].$filename); echo$this->config['cacheRoot'].$filename; } } //循环删除路径 privatefunctionclear_dir($dir,$to=false) { if($list=glob($dir.'/*')) { foreach($listas$file) { is_dir($file)?$this->clear_dir($file):unlink($file); } } if($to===false)rmdir($dir); } //写入缓存 privatefunctioncache_write($filename,$writetext,$openmod='w'){ if(!file_exists($filename)){ @$this->makeDir(dirname($filename)); } if(@$fp=fopen($filename,$openmod)){ flock($fp,2); fwrite($fp,$writetext); fclose($fp); returntrue; }else{ echo"File:$filenamewriteerror."; returnfalse; } } //缓存有效期有效返回true publicfunctioncache_is($fileName){ $fileName=$this->cache_file($fileName); if(file_exists($fileName)){ //如果缓存时间为负数则永不过期 if($this->config['cacheTime']<0){ returntrue; } //如果缓存时间为0则一直过期 if($this->config['cacheTime']==0){ returnfalse; } //获取缓存文件的建立时间 $ctime=intval(filemtime($fileName)); //比较是否大于缓存时间,是则过期否则不过期 if(time()-$ctime>$this->config['cacheTime']){ returnfalse; }else{ returntrue; } //文件不存在视为过期失效 }else{ returnfalse; } } publicfunctioncache_data($name,$data){ $varname=$name; $name=$this->cache_file($name); //config['cacheTime']==0也就是不启用缓存是直接返回数据 if($this->config['cacheTime']<>0){ if($this->config['cacheType']==1){ $write_data="<?phpexit;?>".serialize($data); //return$data; }else{ $write_data="<?php\\r\\n\\$var="; $write_data.=var_export($data,true); $write_data.=";\\r\\n?>"; } $this->cache_write($name,$write_data); } return$data; } //缓存文件名 privatefunctioncache_file($filename){ return$this->config['cacheRoot'].$filename.$this->config['cacheExe']; } //读取文件 publicfunctioncache_read($file){ $file=$this->cache_file($file); if(!file_exists($file)){ return''; } if($this->config['cacheType']==1){ if(function_exists('file_get_contents')){ $cache_Content=file_get_contents($file); }else{ $fopen=fopen($file,'r'); $cache_Content=''; do{ $data=fread($fopen,filesize($file)); if(strlen($data)===0)break; $cache_Content.=$data; }while(1); fclose($fopen); } $cache_Content=substr($cache_Content,13);/*去除<?phpexit;?>*/ $cache_Content=unserialize($cache_Content); return$cache_Content; }else{ include_once($file); return$var; } } //循环创建目录 privatefunctionmakeDir($dir,$mode=0777){ if(!$dir)return0; $dir=str_replace("\\\\","/",$dir); $mdir=""; foreach(explode("/",$dir)as$val){ $mdir.=$val."/"; if($val==".."||$val=="."||trim($val)=="")continue; if(!file_exists($mdir)){ if(!@mkdir($mdir,$mode)){ returnfalse; } } } returntrue; } } ?>
希望本文所述对大家的php程序设计有所帮助。