以文件形式緩存php變量的方法

本文實例講述了以文件形式緩存php變量的方法。分享給你們供你們參考。具體實現方法以下:

php

[php] view plaincopyhtml

  1. <?php  緩存

  2. /* this

  3. $cache_set = array( spa

  4. //緩存路徑 , 最後要加"/" htm

  5. 'cacheRoot'=>'./cache/', get

  6. //緩存時間 it

  7. 'cacheTime'=>20, io

  8. //cache type function

  9. 'cacheType'=>1, 

  10. //擴展名 

  11. 'cacheExe'=>'.php' 

  12. ); 

  13. $cache = new Cache($cache_set); 

  14. $a=array('1','2'); 

  15. $a="aaa"; 

  16. $b=''; 

  17. if($cache->cache_is("d")){ 

  18.  $c=$cache->cache_read("d"); 

  19.  echo "c"; 

  20.  print_r($c); 

  21. }else { 

  22. $b=$cache->cache_data('d',$a); 

  23. } 

  24. print_r($b); 

  25. //$cache->clear("a"); 

  26. //echo $cache->cache_read("./cache/d.php"); 

  27. //echo $d; 

  28. */  

  29. /** 

  30.  * 數據緩存類 v1.0 

  31.  * @author shooke 

  32.  * 2009-11-13 16:02:26 

  33.  * 用於緩存數據,如變量,但不能緩存頁面 

  34.  */  

  35. class Cache{  

  36.  //配置  

  37.  public $config = array(  

  38.  //緩存路徑  

  39.  'cacheRoot'=>'./cache/',  

  40.  //緩存時間  

  41.  'cacheTime'=>1,  

  42.  //cache 類型 1串化數據 2變量  

  43.  'cacheType'=>2,  

  44.  //擴展名  

  45.  'cacheExe'=>'.php'  

  46.  //轉換中間變量  

  47.  );  

  48.  public $return_name=array();  

  49.  function __construct($cache_set = array())  

  50.  {  

  51.   if(!empty($cache_set)) $this->config=array_merge($this->config,$cache_set);  

  52.   $this->config['ClassName'] = __CLASS__;  

  53.  }  

  54.  public function clear($filename=''){  

  55.   if (file_exists($this->cache_file($filename))) {  

  56.    @unlink($this->cache_file($filename));  

  57.   }elseif (empty($filename)){  

  58.    $this->clear_dir($this->config['cacheRoot']);  

  59.   }else{  

  60.    $this->clear_dir($this->config['cacheRoot'].$filename);  

  61.    echo $this->config['cacheRoot'].$filename;  

  62.   }  

  63.  }  

  64.  //循環刪除路徑  

  65.  private function clear_dir($dir,$to = false)  

  66.  {  

  67.   if ($list = glob($dir.'/*'))  

  68.   {  

  69.    foreach ($list as $file)  

  70.    {  

  71.     is_dir($file) ? $this->clear_dir($file) : unlink($file);  

  72.    }  

  73.   }  

  74.   if ($to === false) rmdir($dir);  

  75.  }  

  76.  //寫入緩存  

  77.  private function cache_write($filename$writetext$openmod='w'){  

  78.   if (!file_exists($filename)) {  

  79.    @$this->makeDir( dirname($filename ));  

  80.   }  

  81.   if(@$fp = fopen($filename$openmod)) {  

  82.    flock($fp, 2);  

  83.    fwrite($fp$writetext);  

  84.    fclose($fp);  

  85.    return true;  

  86.   } else {  

  87.    echo "File: $filename write error.";  

  88.    return false;  

  89.   }  

  90.  }  

  91.  //緩存有效期 有效返回 true  

  92.  public function cache_is($fileName){  

  93.   $fileName=$this->cache_file($fileName);  

  94.   iffile_exists$fileName ) ) {  

  95.    //若是緩存時間爲負數則永不過時  

  96.    if ($this->config['cacheTime'] < 0) {  

  97.     return true;  

  98.    }  

  99.    //若是緩存時間爲0則一直過時  

  100.    if ($this->config['cacheTime'] == 0) {  

  101.     return false;  

  102.    }  

  103.    //獲取緩存文件的創建時間  

  104.    $ctime = intval(filemtime$fileName ));  

  105.    //比較是否大於緩存時間,是則過時 不然不過時  

  106.    if (time() - $ctime > $this->config['cacheTime']) {  

  107.     return false;  

  108.    }else {  

  109.     return true;  

  110.    }  

  111.    //文件不存在視爲過時失效  

  112.   }else {  

  113.    return false;  

  114.   }  

  115.  }  

  116.  public function cache_data($name,$data){  

  117.   $varname=$name;  

  118.   $name = $this->cache_file($name);  

  119.   //config['cacheTime']==0也就是不啓用緩存是直接返回數據  

  120.   if ($this->config['cacheTime'] <> 0) {  

  121.    if($this->config['cacheType']==1){  

  122.     $write_data = "<?php exit;?>".serialize($data);  

  123.     //return $data;  

  124.    }else {  

  125.     $write_data = "<?php\\r\\n\\$var= ";  

  126.     $write_data .= var_export($data,true);  

  127.     $write_data .=";\\r\\n?>";  

  128.    }  

  129.    $this->cache_write($name,$write_data);  

  130.   }  

  131.   return $data;  

  132.  }  

  133.  //緩存文件名  

  134.  private function cache_file($filename){  

  135.   return $this->config['cacheRoot'].$filename.$this->config['cacheExe'];  

  136.  }  

  137.  //讀取文件  

  138.  public function cache_read($file){  

  139.   $file=$this->cache_file($file);  

  140.   if (!file_exists($file)) {  

  141.    return '';  

  142.   }  

  143.   if($this->config['cacheType']==1){  

  144.    if (function_exists('file_get_contents')){  

  145.     $cache_Contentfile_get_contents($file);  

  146.    }else{  

  147.     $fopen = fopen($file,'r');  

  148.     $cache_Content = '';  

  149.     do {  

  150.      $data = fread($fopen,filesize($file));  

  151.      if (strlen($data)===0) break;  

  152.      $cache_Content .= $data;  

  153.     }while(1);  

  154.     fclose($fopen);  

  155.    }  

  156.    $cache_Content = substr($cache_Content,13);/* 去除<?php exit;?> */  

  157.    $cache_Content = unserialize($cache_Content);  

  158.    return $cache_Content;  

  159.   }else{  

  160.    include_once($file);  

  161.    return $var;  

  162.   }  

  163.  }  

  164.  //循環建立目錄  

  165.  private function makeDir( $dir$mode = 0777 ) {  

  166.   if( ! $dir ) return 0;  

  167.   $dir = str_replace"\\\\", "/", $dir );  

  168.   $mdir = "";  

  169.   foreachexplode"/"$dir ) as $val ) {  

  170.    $mdir .= $val."/";  

  171.    if$val == ".." || $val == "." || trim( $val ) == "" ) continue;  

  172.    if( ! file_exists$mdir ) ) {  

  173.     if(!@mkdir$mdir$mode )){  

  174.      return false;  

  175.     }  

  176.    }  

  177.   }  

  178.   return true;  

  179.  }  

  180. }  

  181. ?>  

相關文章
相關標籤/搜索