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

文件缓存原理

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

文件缓存实例

index.php

 代码如下 复制代码

define('CACHE_ROOT','./');
 include_once('./cache.func.php');
 $file = 'qzp';
 $cacheFile = getCacheFileByID($file,'info/');
 
 print_R(readCache($cacheFile));
 
 $info = array(
      'username'=>'qzp',
      'area_name'=>'admin',
      'mp_name'=>'1234',
      'gh_name'=>'5678');
writeCache($cacheFile,$info);

cache.func.php文件

 function arrayeval($array, $level = 0) {
    $space = '';
    for($i = 0; $i <= $level; $i++) {
        $space .= "t";
    }
    $evaluate = "Arrayn$space(n";
    $comma = $space;
    foreach($array as $key => $val) {
        $key = is_string($key) ? '''.addcslashes($key, ''\').''' : $key;
        $val = !is_array($val) && (!preg_match("/^-?[1-9]d*$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''\').''' : $val;
        if(is_array($val)) {
            $evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
        } else {
            $evaluate .= "$comma$key => $val";
        }
        $comma = ",n$space";
    }
    $evaluate .= "n$space)";
    return $evaluate;
}
 
function getCacheFileByID($id,$pre='info/',$md5=true){
 if($md5){
  $md5id = md5($id);
  return CACHE_ROOT.'/'.$pre.substr($md5id,0,2).'/'.substr($md5id,2,2).'/'.$id;
 }else{
  return CACHE_ROOT.'/'.$pre.$id;
 }
}
 
function readCache($filename,$time=0){
 if($datas = @file_get_contents($filename)){
  $datas = unserialize($datas);
  if($time < 1 || (time() - $datas['time'] < $time)){
   return $datas['data'];
  }
 }
 return false;
}
 
function writeCache($filename,$data){
 makeDir(dirname($filename));
 if($handle = fopen($filename,'w+')){
  $datas = array('data'=>$data,'time'=>time());
  flock($handle,LOCK_EX);
  $rs = fputs($handle,serialize($datas));
  flock($handle,LOCK_UN);
  fclose($handle);
  if($rs!==false){
   return true;
  }
 }
 return false;
}
 
function makeDir($path)
{
 if (! file_exists ( $path )) {
  makeDir ( dirname ( $path ) );
  if (! mkdir ( $path, 0777 ))
  die ( '无法创建文件夹' . $path );
 }
}

把要缓存的文件序列化下存放起来,当使用的时候反序列化回来使用。

使用对PHP模板数据进行缓存的工具smarty。smarty将HTML文件缓存成一个静态的HTML页,需要缓存的模板文件可以使用smarty。
例:

 代码如下 复制代码

<?php
//包含Smarty类库
require('libs/Smarty.class.php');
 
//创建Smarty类的对象
$smarty = new Smarty;
 
//启用缓存
$smarty->caching = true;
 
//指定缓存文件保存的目录
$smarty->cache_dir = "./cache/";
 
//也会把输出保存
$smarty->display('index.tpl')
?>

时间: 2024-11-09 02:18:39

php中文件缓存实现程序代码的相关文章

PHP文件缓存类实现代码_php技巧

php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.页面缓存类 代码如下 : <?php /*include( "cache.php" ); $cache = new cache(30); $cache->cacheCheck(); echo date("Y-m-d H:i:s"); $cache->caching(); */ class cache { //缓存目录 var

php中实现图片文件上传程序代码

我们先来看一下项目结构图与数据库结构图吧 项目结构: 运行效果:   up.html 简单的上传表单文件  代码如下 复制代码 <form action="up.php" enctype="multipart/form-data" method="post"      name="uploadfile">上传文件:<input type="file" name="upfile&q

PHP中文件缓存转内存缓存的方法_php技巧

前言 顾名思义文件缓存转内存缓存就是将存储在文件中的数据转到内存中去,实现磁盘操作转为内存操作,这样可以大大提高数据访问速度,并能实现缓存数据的分布式部署.文件缓存与内存缓存的介绍请参考名词解释部分. 原理 文件缓存转内存缓存的原理就是把文件缓存中的数据转存到内存中,以实现数据全局共享,解决频繁加载文件和装载数据的问题,采用Memcache工具实现内存缓存数据. 实现机制与步骤 1,检查文件是否存在内存缓存,如果不存在加载缓存文件 2,加载缓存文件,并获取缓存文件中的数据 3,将缓存文件中的数据

防止文件缓存的js代码_javascript技巧

复制代码 代码如下: <script language="javascript" type="text/javascript"> //防止js文件缓存下来,以后更新时不再需要用户重新删除IE文件等操作. var now=new Date(); var number = now.getYear().toString()+now.getMonth().toString()+now.getDate().toString()+now.getHours().toS

用asp实现的获取文件夹中文件的个数的代码_应用技巧

复制代码 代码如下: '返回指定文件夹中文件的数目,传入值为被检测文件夹的硬盘绝对路径 function CountFilesNumber(folderspec) Dim objfso,f,fc Set objfso=CreateObject("Scripting.FileSystemObject") Set f=objfso.GetFolder(folderspec) Set fc=f.Files CountFilesNumber=fc.Count set fc=nothing se

php中两日期比较程序代码

 代码如下 复制代码 <?php /*   * 作者:不知道作者是谁   * 日期:2008-4-13   * 功能:计算两个日期的时间差   * 备注:基本上没有修改程序代码,仅将书写规范了下,以及做了注释  // 曼查罗   */    // 定义要比较的两个日期 $Date_1="2008-7-15"; $Date_2="2006-7-14";   // 将日期化成数组,以便制作时间戳 $Date_List_1=explode("-"

PHP Memcached + APC + 文件缓存封装实现代码_php技巧

使用方法: Memcached 复制代码 代码如下: $cache = new Cache_MemCache(); $cache->addServer('www1'); $cache->addServer('www2',11211,20); // this server has double the memory, and gets double the weight $cache->addServer('www3',11211); // Store some data in the c

用asp实现的获取文件夹中文件的个数的代码

复制代码 代码如下: '返回指定文件夹中文件的数目,传入值为被检测文件夹的硬盘绝对路径 function CountFilesNumber(folderspec) Dim objfso,f,fc Set objfso=CreateObject("Scripting.FileSystemObject") Set f=objfso.GetFolder(folderspec) Set fc=f.Files CountFilesNumber=fc.Count set fc=nothing se

PHP中获取文件扩展名程序代码

方法一,我自己最的一种获取扩展名方法  代码如下 复制代码 function extend_2($file_name) { $extend = pathinfo($file_name); $extend = strtolower($extend["extension"]); return $extend; } 方法二,利用explode函数与end函数组合操作  代码如下 复制代码 function get_extension($file) { return end(explode('