Heim >php教程 >PHP源码 >我也来发一个PHP缓存

我也来发一个PHP缓存

PHP中文网
PHP中文网Original
2016-05-25 17:14:101166Durchsuche

php代码

<?php
define(&#39;CACHE_ROOT&#39;, dirname(__FILE__).&#39;/cache&#39;); //缓存存放目录
define(&#39;CACHE_TIME&#39;, 1800);//缓存时间 单位秒
define(&#39;CACHE_FIX&#39;,&#39;.html&#39;);
$CacheName=md5($_SERVER[&#39;REQUEST_URI&#39;]).CACHE_FIX; //缓存文件名
$CacheDir=CACHE_ROOT.&#39;/&#39;.substr($CacheName,0,1);//缓存文件存放目录
$CacheUrl=$CacheDir.&#39;/&#39;.$CacheName;//缓存文件的完整路径
//GET方式请求才缓存,POST之后一般都希望看到最新的结果 
if($_SERVER[&#39;REQUEST_METHOD&#39;]==&#39;GET&#39;){
  //如果缓存文件存在,并且没有过期,就把它读出来。
  if(file_exists($CacheName) && time()-filemtime($CacheName)<CACHE_TIME){ 
    $fp=fopen($CacheName,&#39;rb&#39;); 
    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,&#39;wb&#39;); 
    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(&#39;AutoCache&#39;);
}else{ 
  //不是GET的请求就删除缓存文件。 
  if(file_exists($CacheUrl))unlink($CacheUrl); 
}
?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn