Heim >php教程 >php手册 >对一个cache类的实际应用

对一个cache类的实际应用

WBOY
WBOYOriginal
2016-06-21 09:05:501129Durchsuche

cache

Class_Cache.php:
 
class cache
{
 
var $cacheDirectory;
 
var $cacheDuration=3600;
 
var $cacheFilename;
 
function cache($cacheDuration=3600,$cacheDirectory='./cache')
{
$this->cacheDuration = 0;
$this->cacheDirectory = '.';
$this->cacheFilename = '';
 
$this->updateCache($cacheDuration,$cacheDirectory);
}
 
function getCacheFilename()
{
return $this->cacheFilename;
}
 
function updateCache($cacheDuration=3600,$cacheFolder='./cache')
{
$this->cacheDuration = $cacheDuration;
$this->cacheDirectory = $cacheFolder;
$this->_makeCacheFolder();
}
 
function _makeCacheFolder()
{
/*if (!is_dir($this->cacheDirectory))
{
$temp = explode('/',$this->cacheDirectory);
$cur_dir = '';
for($i=0;$i{
$cur_dir .= $temp[$i].'/';
 
if (!is_dir($cur_dir))
{
if (@mkdir($cur_dir,777)&&($cur_dir!=getcwd()))
{
$this->_writeFile($cur_dir.'.htaccess','Deny from all');
$this->_writeFile($cur_dir.'index.html','');
}
}
}
}*/
if (!is_dir($this->cacheDirectory))
{
$cur_dir=$this->cacheDirectory;
//echo $cur_dir;
if (@mkdir($cur_dir,777))
{
$this->_writeFile($cur_dir.'.htaccess','Deny from all');
$this->_writeFile($cur_dir.'index.html','');
}
}
 
}
 
function _writeFile($filename,$contents)
{
if (!file_exists($filename))
{
$fp = @fopen($filename,'w');
if ($fp)
{
fputs($fp,$contents);
fclose($fp);
}
}else{
unlink($filename);
$fp = @fopen($filename,'w');
if ($fp)
{
fputs($fp,$contents);
fclose($fp);
}
}
}
 
function _setCacheFilename($contents)
{
//$this->cacheFilename = $this->cacheDirectory.'/'.md5($contents).'.txt';
 
/***********/
global $cache_file;
$this->cacheFilename = $this->cacheDirectory.'/'.$cache_file.'.txt';
/***********/
}
function returnCacheTime()
{
//return "asdfd";
$tim=filemtime($this->cacheFilename);
return date('Y年m月d日 H时i分s秒',$tim);
}
function inCache($contents,$sty='')
{
$this->_setCacheFilename($contents);
if($sty==1)
{
return file_exists($this->cacheFilename);
}else{
if(file_exists($this->cacheFilename))
{
$tim=filemtime($this->cacheFilename);
if((time()-$tim)>$this->cacheDuration)
{
return false;
}else{
return true;
}
}else{
return false;
}
}
}
 
function readCache()
{
$contents = '';
$fp = @fopen($this->cacheFilename,'r');
if ($fp)
{
while(!feof($fp)) 
$contents .= fread($fp,4096);
fclose($fp);
}
return $contents;
}
 
function saveInCache($contents,$filename='')
{
if (trim($filename)=='') $filename = $contents;
if ($this->inCache($filename,1))
{
if((time()-filemtime($this->cacheFilename))>$this->cacheDuration)
{
@unlink($this->cacheFilename);
}
}
$this->_writeFile($this->cacheFilename,$contents);
}
 
}
?>
cache.php:

 require_once("Class_Cache.php");?>

//---------页面缓存----------
$is_cache=1;//是否缓存
$cache_time=300;//缓存时间
if ((strstr($script_name,"/member/") == true) || (strstr($script_name,"/common/") == true))
$is_cache=0;
$cacheDirectory=$_SERVER['DOCUMENT_ROOT']."/cache/";
if($_SERVER['QUERY_STRING']=='')
$cache_file=$_SERVER['PHP_SELF'];
else
$cache_file=$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
if($_SERVER['PHP_SELF']=="/index.php")
$cache_file="___index.php";
$cache_file=preg_replace(array("/\//","/\?/"),array("",""),$cache_file);
//echo $cache_file;
 
if($is_cache==1)
{
$cache=new cache($cache_time,$cacheDirectory);
 
if($cache->incache($cache_file))
{
$output=$cache->readcache();
$CacheTime=$cache->returnCacheTime();
unset($cache);
//if( function_exists(return_execute_time()) )
$execute_time=return_execute_time();
$output=str_replace("",$execute_time."
缓存版本:".$CacheTime,$output);
print($output);
exit;
}else
ob_start();
 
}
function all_cache()
{
global $is_cache;
global $cache_file;
global $cache;
if($is_cache==1)
{
//这里是输出的内容
 
$output = ob_get_clean();
ob_end_clean(); 
$cache->saveInCache($output,$cache_file); 
$CacheTime=$cache->returnCacheTime();
unset($cache);
//if( function_exists(return_execute_time()) )
$execute_time=return_execute_time();
$output=str_replace("",$execute_time."
缓存版本:".$CacheTime,$output);
print($output);
//exit; 

}
?>
用法
在页面开头引用

 require("cache.php")?>
在页面最后加上

 all_cache();?>

实际应用http://www.scmetals.com
class_cache类 原贴:http://www.phpx.com/happy/thr83014.html
class_cache.php内容如下
 
class cache
{
    
    var $cacheDirectory;
    
    var $cacheDuration=3600;
    
    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            {
                $cur_dir .= $temp[$i].'/';
                if (!is_dir($cur_dir))
                {
                    if (@mkdir($cur_dir,777)&&($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,$sty='')
     {
         $this->_setCacheFilename($contents);
        if($sty==1)
         {
            return file_exists($this->cacheFilename);
         }
         else
         {
            if(file_exists($this->cacheFilename))
             {
                $tim=filemtime($this->cacheFilename);
                if((time()-$tim)>$this->cacheDuration)
                 {
                    return false;
                 }
                 else
                 {
                    return true;
                 }
             }
             else
             {
                 return false;
             }
         }
     }
 
     function readCache()
     {
         $contents = '';
         $fp = @fopen($this->cacheFilename,'r');
        if ($fp)
        {
            while(!feof($fp)) $contents .= fread($fp,4096);
            fclose($fp);
        }
        return $contents;
     }
     
    function updateCache($cacheDuration=3600,$cacheFolder='./cache')
    {
        $this->cacheDuration = $cacheDuration;
        $this->cacheDirectory = $cacheFolder;
        $this->_makeCacheFolder();
    }
    
     function saveInCache($contents,$filename='')
     {
            if (trim($filename)=='') $filename = $contents;
            if ($this->inCache($filename,1))
            {
                if((time()-filemtime($this->cacheFilename))>$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);
             }
         }
        else
         {
            unlink($filename);
            $fp = @fopen($filename,'w');
             if ($fp)
             {
                fputs($fp,$contents);
                fclose($fp);
             }
         }
     }
 
}
?>



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn