网站地图    收藏   

主页 > php专栏 > php应用 >

php中文件缓存实现程序代码 - php高级应用

来源:自学PHP网    时间:2014-11-27 22:16 作者: 阅读:

[导读] php文件缓存就是指把缓存生成一个文件,这个文件可以是php,txt等等文件,当我下载访问时就来判断访问上次生成时间,如果超过了我们指定的时间再重新生成一次,否则就直接调用缓存文件...

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

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. function getCacheFileByID($id,$pre='info/',$md5=true){ 
  40.  if($md5){ 
  41.   $md5id = md5($id); 
  42.   return CACHE_ROOT.'/'.$pre.substr($md5id,0,2).'/'.substr($md5id,2,2).'/'.$id
  43.  }else
  44.   return CACHE_ROOT.'/'.$pre.$id
  45.  } 
  46.  
  47. function readCache($filename,$time=0){ 
  48.  if($datas = @file_get_contents($filename)){ 
  49.   $datas = unserialize($datas); 
  50.   if($time < 1 || (time() - $datas['time'] < $time)){ 
  51.    return $datas['data']; 
  52.   } 
  53.  } 
  54.  return false; 
  55.  
  56. function writeCache($filename,$data){ 
  57.  makeDir(dirname($filename)); 
  58.  if($handle = fopen($filename,'w+')){ 
  59.   $datas = array('data'=>$data,'time'=>time()); 
  60.   flock($handle,LOCK_EX); 
  61.   $rs = fputs($handle,serialize($datas)); 
  62.   flock($handle,LOCK_UN); 
  63.   fclose($handle); 
  64.   if($rs!==false){ 
  65.    return true; 
  66.   } 
  67.  } 
  68.  return false; 
  69.  
  70. function makeDir($path
  71. {//开源代码phpfensi.com 
  72.  if (! file_exists ( $path )) { 
  73.   makeDir ( dirname ( $path ) ); 
  74.   if (! mkdir ( $path, 0777 )) 
  75.   die ( '无法创建文件夹' . $path ); 
  76.  } 

把要缓存的文件序列化下存放起来,当使用的时候反序列化回来使用,使用对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. ?> 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论