以文件形式缓存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程序设计有所帮助。