GNU IS NOT UNIX

贴一个Cache类个人用得不错

上一篇 / 下一篇  2007-12-27 14:48:49 / 个人分类:

<?php

class cache
{
    
    var 
$cacheDirectory;
    
    var 
$cacheDuration;
    
    var 
$cacheFilename;

    function 
cache($cacheDuration=3600,$cacheDirectory='./cache')
    {
        
$this->cacheDuration 0;
        
$this->cacheFilename '';
        
$this->cacheDirectory '.';
        
$this->updateCache($cacheDuration,$cacheDirectory);
    }

    function 
_makeCacheFolder()
    {
        if (!
is_dir($this->cacheDirectory))
        {
            
$temp explode('/',$this->cacheDirectory);
            
$cur_dir '';
            for(
$i=0;$i<count($temp);$i++)
            {
                
$cur_dir .= $temp[$i].'/';
                if (!
is_dir($cur_dir))
                {
                    if (@
mkdir($cur_dir)&&($cur_dir!=getcwd()))
                    {
                         
$this->_writeFile($cur_dir.'.htaccess','Deny from all');
                         
$this->_writeFile($cur_dir.'index.html','');
                    }
                }
            }
        }
        
    }

    function 
getCacheFilename()
    {
        return 
$this->cacheFilename;
    }

     function 
_setCacheFilename($contents)
     {
        
$this->cacheFilename $this->cacheDirectory.'/'.md5($contents).'.txt';
     }

     function 
inCache($contents)
     {
         
$this->_setCacheFilename($contents);
        return 
file_exists($this->cacheFilename);
     }

     function 
readCache()
     {
         
$contents '';
         
$fp = @fopen($this->cacheFilename,'r');
        if (
$fp)
        {
            while(!
feof($fp)) $contents .= fread($fp,4096);
            
fclose($fp);
        }
        return 
$contents;
     }
     
    function 
updateCache($cacheDuration=86400,$cacheFolder='./cache')
    {
        
$this->cacheDuration $cacheDuration;
        
$this->cacheDirectory $cacheFolder;
        
$this->_makeCacheFolder();
    }
    
     function 
saveInCache($contents,$filename='')
     {
            if (
trim($filename)==''$filename $contents;
            if (
$this->inCache($filename)&&((filectime($this->cacheFilename)-time())>$this->cacheDuration))
            {
                @
unlink($this->cacheFilename);
            }
            
$this->_writeFile($this->cacheFilename,$contents);
     }

     function 
_writeFile($filename,$contents)
     {
         if (!
file_exists($filename))
         {
             
$fp = @fopen($filename,'w');
             if (
$fp)
             {
                
fputs($fp,$contents);
                
fclose($fp);
             }
         }
     }

}
?>


<?php
使用方法:
include_once(_CONPATH_."Class/Class_Cache.php");
$cache=new cache();
if(
$cache->incache($_SERVER['QUERY_STRING']))
    {
        
$output=$cache->readcache();
    }
    else
    {
        
ob_start();
        
//这里是输出的内容
        
$output ob_get_clean(); 
        
$cache->saveInCache($output,$_SERVER['QUERY_STRING']); 
    }
    unset(
$cache);
    print(
$output);
    exit;
?>

TAG: php cache

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-03-30  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 113
  • 日志数: 16
  • 建立时间: 2007-11-16
  • 更新时间: 2007-12-27

RSS订阅

Open Toolbar