日度归档:2010年3月19日

很久没发过php代码了,今天发个支持file及memcache的缓存封装类

主要的作用就是就是简化缓存操作,类型分文件缓存和memcache内存级缓存两种,能过常量进行相关配置

通过cache()函数进行缓存操作

PHP代码
  1. <?php   
  2. //缓存存放类型   
  3. define(‘CACHETYPE’‘file’);   
  4. //memcache服务器地址   
  5. define(‘MEMCACHE_HOST’,‘localhost’);   
  6. //memcache服务器端口地址   
  7. define(‘MEMCACHE_PORT’,11211);   
  8. //文件类型缓存的话,设定存放位置   
  9. define(‘CACHE_PATH’,‘cache/’);   
  10.   
  11. function cache($name,$var=,$s=0)   
  12. {   
  13.     $c=new cache;   
  14.     $name=str_replace(‘ ‘,,substr($name,0,30)).‘_’.substr(md5($name),8,16);   
  15.     if(CACHETYPE==‘memcache’return $c->memcacheCache($name,$var,$s);   
  16.     else return $c->fileCache($name,$var,$s);   
  17.        
  18. }   
  19.   
  20. class cache   
  21. {   
  22.     function memcacheCacheRead($m,$name)   
  23.     {   
  24.         $return=$m->get($name);   
  25.         if(empty($return)) return false;   
  26.         else{   
  27.             return $return;   
  28.         }   
  29.     }   
  30.   
  31.     function memcacheCache($name,$var,$s)   
  32.     {   
  33.         $m=self::memcache();   
  34.         if(empty($var)){   
  35.             return self::memcacheCacheRead($m,$name);   
  36.         }else{   
  37.             $m->set($name,$var,0,$s);   
  38.             return self::memcacheCacheRead($m,$name);   
  39.         }   
  40.     }   
  41.   
  42.     function fileCache($name,$var,$s)   
  43.     {      
  44.         $filename=CACHE_PATH.$name.‘.php’;   
  45.         if(empty($var)){   
  46.             if(file_exists($filename)){   
  47.                 return self::readCache($filename);   
  48.             }else return false;   
  49.         }else{   
  50.             if($this->writeCache($filename,$var,$s)){   
  51.                 return self::readCache($filename);   
  52.             }else  
  53.                 throw new Exception(‘File cache write error!’);   
  54.         }   
  55.     }   
  56.   
  57.   
  58.     function writeCache($filename,$var,$s)   
  59.     {   
  60.         $var=array(‘var’=>$var,‘s’=>$s);   
  61.         $content=serialize($var);   
  62.         $content=‘<?php exit;?>’.$content;   
  63.         fclose(fopen($filename,‘w’));   
  64.         if(file_put_contents($filename,$content)){   
  65.             return true;   
  66.         }else{   
  67.             return false;   
  68.         }   
  69.     }   
  70.   
  71.     function readCache($filename)   
  72.     {   
  73.         $content=@file_get_contents($filename);   
  74.         $var=unserialize(str_replace(‘<?php exit;?>’,,$content));   
  75.         $mtime=filemtime($filename);   
  76.         if(time()-$mtime>=$var[‘s’]){   
  77.             @unlink($filename);   
  78.             return false;   
  79.         }else{   
  80.             return $var[‘var’];   
  81.         }   
  82.     }   
  83.   
  84.     function memcache()   
  85.     {   
  86.         $mem = new Memcache;   
  87.         $mem->connect(MEMCACHE_HOST,MEMCACHE_PORT) or die("Memcache could not connect");   
  88.         return $mem;   
  89.     }   
  90. }   
  91.   
  92. //演示   
  93.   
  94. if(!$name=cache("name")){   
  95.     $name=cache("name",‘test memcache’,20);   
  96. }   
  97. print_r($name);   
  98. ?>