发一个PHP缓存类的原理

 

<?php

define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录
define('CACHE_TIME', 1800);//缓存时间 单位秒
define('CACHE_FIX','.html');
$CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名
$CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);//缓存文件存放目录
$CacheUrl=$CacheDir.'/'.$CacheName;//缓存文件的完整路径
//GET方式请求才缓存,POST之后一般都希望看到最新的结果 
if($_SERVER['REQUEST_METHOD']=='GET'){
  //如果缓存文件存在,并且没有过期,就把它读出来。
  if(file_exists($CacheName) && time()-filemtime($CacheName)<CACHE_TIME){ 
    $fp=fopen($CacheName,'rb'); 
    fpassthru($fp); 
    fclose($fp); 
    exit; 
  }
  //判断文件夹是否存在,不存在则创建
  elseif(!file_exists($CacheDir)){ 
    if(!file_exists(CACHE_ROOT)){ 
      mkdir(CACHE_ROOT,0777); 
      chmod(CACHE_ROOT,0777); 
    } 
    mkdir($CacheDir,0777); 
    chmod($CacheDir,0777); 
  }
  //回调函数,当程序结束时自动调用此函数 
  function AutoCache($contents){ 
    global $CacheUrl; 
    $fp=fopen($CacheUrl,'wb'); 
    fwrite($fp,$contents); 
    fclose($fp); 
    chmod($CacheUrl,0777); 
    //生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。 
    //DelOldCache();
    return $contents;
  }
  function DelOldCache(){ 
    chdir(CACHE_ROOT); 
    foreach (glob("*/*".CACHE_FIX) as $file){ 
      if(time()-filemtime($file)>CACHE_TIME)unlink($file);
    }
  }
  //回调函数 auto_cache 
  ob_start('AutoCache');
}else{ 
  //不是GET的请求就删除缓存文件。 
  if(file_exists($CacheUrl))unlink($CacheUrl); 
}
?>

时间: 2025-01-02 14:15:34

发一个PHP缓存类的原理的相关文章

一个PHP缓存类代码(附详细说明)

复制代码 代码如下: <?php define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录 define('CACHE_TIME', 1800);//缓存时间 单位秒 define('CACHE_FIX','.html'); $CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名 $CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);

一个PHP缓存类代码(附详细说明)_php技巧

复制代码 代码如下: <?php define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录 define('CACHE_TIME', 1800);//缓存时间 单位秒 define('CACHE_FIX','.html'); $CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名 $CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);

简单的php缓存类分享

 这篇文章主要介绍了一个php缓存类,文件名使用md5加密,大家参考使用吧 代码如下: <?php class Cache  {  private $dir = "data/cache/";//定义缓存目录   private $key='c_a_sss'; // 文件名md5加密密钥    function set_dir($dirpath)  {   $this->dir=$dirpath;   $this->make_dir($this->dir);  }

一个简单至极的PHP缓存类代码_php技巧

网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个.废话不多说,直接看代码吧!使用说明:1.实例化$cache = new Cache(); 2.设置缓存时间和缓存目录$cache = new Cache(60, '/any_other_path/'); 第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置. 默认情况下,缓存时间是 3600 秒,缓存目录是 cache/3.读取缓存$value = $cache->get('data_key'); 4

一个简洁实用的PHP缓存类完整实例_php技巧

本文完整描述了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内.清除缓存文件.根据当前动态文件生成缓存文件名.连续创建目录.缓存文件输出静态等功能.对于采用PHP开发CMS系统来说,离不开对缓存的处理,合理利用好缓存可有效的提高程序执行效率. php缓存类文件完整代码如下: <?php /* * 缓存类 cache */ class cache { //缓存目录 var $cacheRoot = "./cache/"; //缓存更新时间秒数,0为不缓存 var

一个比较蛋疼的php缓存类

php缓存类 $oFC = new FileCache(); $sKey = 'ab_123'; $data = $oFC -> get($sKey); if (is_null($data)) $oFC -> set($sKey, array('name' => 'ttt', 'datetime' => date('Y-m-d H:i:s')), 100000); print_r($data);   <?php final class FileCache { /** * *

ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供,不过该内存类我看了一下,并没有支持文件的缓存依赖. 因此,在此前提下,预计.NET Core明年出来2.0版本时,可能也没支持文件的缓存依赖,因此,有必要提前准备实现. 在写此文前,我扫了一下园子里关于自定义缓存类的相关文章. 发现很多自定义的缓存类文章都简单停留在对字典的增删改查. 因此,决定补充

Java和Android的LRU缓存及实现原理_Android

一.概述 Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存.Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap就是直接继承了LinkedHashMap,进行了极少的改动后就可以实现LRU算法. 二.Java的LRU算法 Java的LRU算法的基础是LinkedHashMap,LinkedHashMap继承了HashMap,并且在HashMap的基础上进行了一定的改动,以实现LRU算法. 1.Hash

缓存的工作原理

缓存的工作原理其实并不复杂.它的核心思想是:首先,我们将需要显示的内容存储在一个文本文件(即缓存文件)之中.然后,如果有用户请求某个页面的内容,我们首先检查此页对应的缓存(即那个文本文件)是否存在--如果存在且为最新的缓存文件,那么直接将这个文本文件中的内容输出到客户端供用户查看:如果此页对应的缓存文件不存在或缓存生成的时间不符合要求(太旧),那么直接执行一次此页对应的PHP文件,并将显示内容存储在缓存文件中.重复上述流程.这样一来,虽然增加了PHP代码,但我们最大程度的节省了PHP链接到数据库