当前位置:首页 > PHP教程 > php高级应用 > 列表

php中文件缓存实现程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 11:37:07 浏览: 评论:0 

php文件缓存就是指把缓存生成一个文件,这个文件可以是php,txt等等文件,当我下载访问时就来判断访问上次生成时间,如果超过了我们指定的时间再重新生成一次,否则就直接调用缓存文件,这样就可以减少了对mysql数据库的查询了.

php文件缓存原理

把需要缓存的数据通过serialize函数序列化后直接保存到文件,在需要使用缓存数据的时候,通过反序列化读入文件内容并复制给需要的变量,然后使用,不经常改动的数据可以写入缓存文件.

php文件缓存实例,代码如下:

  1.  index.php
  2.  
  3. define('CACHE_ROOT','./'); 
  4.  include_once('./cache.func.php'); 
  5.  $file = 'qzp'; 
  6.  $cacheFile = getCacheFileByID($file,'info/'); 
  7.  
  8.  print_R(readCache($cacheFile)); 
  9.  
  10.  $info = array( 
  11.       'username'=>'qzp', 
  12.       'area_name'=>'admin', 
  13.       'mp_name'=>'1234', 
  14.       'gh_name'=>'5678'); 
  15. writeCache($cacheFile,$info); 
  16.  
  17. cache.func.php文件 
  18.  
  19.  function arrayeval($array, $level = 0) { 
  20.     $space = ''; 
  21.     for($i = 0; $i <= $level; $i++) { 
  22.         $space .= "t"; 
  23.     } 
  24.     $evaluate = "Arrayn$space(n"; 
  25.     $comma = $space; 
  26.     foreach($array as $key => $val) { 
  27.         $key = is_string($key) ? '''.addcslashes($key, ''\').''' : $key; 
  28.         $val = !is_array($val) && (!preg_match("/^-?[1-9]d*$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''\').''' : $val; 
  29.         if(is_array($val)) { 
  30.             $evaluate .= "$comma$key => ".arrayeval($val, $level + 1); 
  31.         } else { 
  32.             $evaluate .= "$comma$key => $val"; 
  33.         } 
  34.         $comma = ",n$space"; 
  35.     } 
  36.     $evaluate .= "n$space)"; 
  37.     return $evaluate; 
  38. } 
  39.  
  40. function getCacheFileByID($id,$pre='info/',$md5=true){ 
  41.  if($md5){ 
  42.   $md5id = md5($id); 
  43.   return CACHE_ROOT.'/'.$pre.substr($md5id,0,2).'/'.substr($md5id,2,2).'/'.$id; 
  44.  }else{ 
  45.   return CACHE_ROOT.'/'.$pre.$id; 
  46.  } 
  47. } 
  48.  
  49. function readCache($filename,$time=0){ 
  50.  if($datas = @file_get_contents($filename)){ 
  51.   $datas = unserialize($datas); 
  52.   if($time < 1 || (time() - $datas['time'] < $time)){ 
  53.    return $datas['data']; 
  54.   } 
  55.  } 
  56.  return false; 
  57. } 
  58.  
  59. function writeCache($filename,$data){ 
  60.  makeDir(dirname($filename)); 
  61.  if($handle = fopen($filename,'w+')){ 
  62.   $datas = array('data'=>$data,'time'=>time()); 
  63.   flock($handle,LOCK_EX); 
  64.   $rs = fputs($handle,serialize($datas)); 
  65.   flock($handle,LOCK_UN); 
  66.   fclose($handle); 
  67.   if($rs!==false){ 
  68.    return true; 
  69.   } 
  70.  } 
  71.  return false; 
  72. } 
  73.  
  74. function makeDir($path) 
  75. {//开源代码phpfensi.com 
  76.  if (! file_exists ( $path )) { 
  77.   makeDir ( dirname ( $path ) ); 
  78.   if (! mkdir ( $path, 0777 )) 
  79.   die ( '无法创建文件夹' . $path ); 
  80.  } 
  81. } 

把要缓存的文件序列化下存放起来,当使用的时候反序列化回来使用,使用对PHP模板数据进行缓存的工具smarty,smarty将HTML文件缓存成一个静态的HTML页,需要缓存的模板文件可以使用smarty.

例,代码如下:

  1. <?php 
  2. //包含Smarty类库 
  3. require('libs/Smarty.class.php'); 
  4.  
  5. //创建Smarty类的对象 
  6. $smarty = new Smarty; 
  7.  
  8. //启用缓存 
  9. $smarty->caching = true; 
  10.  
  11. //指定缓存文件保存的目录 
  12. $smarty->cache_dir = "./cache/"; 
  13.  
  14. //也会把输出保存 
  15. $smarty->display('index.tpl') 
  16. ?> 

Tags: php文件缓存 php缓存类

分享到: