用于文件缓存的PHP ob_start()

时间:2015-01-14 10:08:05

标签: php caching ob-start

加载此示例网页时,它会检查/ cache文件夹中的缓存文件。如果没有缓存文件,则调用ob_start()并创建.html缓存文件。问题是这个缓存过程每次都在工作,即使我没有调用ob_start()。请建议我。谢谢。

// class file
function check_cache($dynamic_url) {
  $cache_file = $this->cache_folder.md5($dynamic_url).$this->cache_ext;
  if ((file_exists($cache_file)) && (time() - $this->cache_time < filemtime($cache_file))) {
   // ob_start('ob_gzhandler');
      readfile($cache_file);
      ob_end_flush();                
      exit();
   }
   else {
      //ob_start('ob_gzhandler');
  }
}

function create_cache($dynamic_url) {
  $cache_file = $this->cache_folder.md5($dynamic_url).$this->cache_ext;
  $fp = fopen($cache_file, 'w');
  fwrite($fp, ob_get_contents());
  fclose($fp);
  ob_end_flush();
}

我从

打电话给这个班级
$cache->check_cache(get_full_url());
<h1>Today is <?php echo date('Y-m-d h:i:s'); ?></h1>             
$cache->create_cache(get_full_url());

1 个答案:

答案 0 :(得分:0)

我认为你的缓存仍然是由于你的create_cache调用fopen而创建的,无论输出缓冲区是什么启动。因此,应在fopen之前检查输出缓冲区状态,如下所示:

 function create_cache($dynamic_url) {
    if (ob_get_level() > 0) {
         $cache_file = $this->cache_folder.md5($dynamic_url).$this->cache_ext;
         $fp = fopen($cache_file, 'w');
         fwrite($fp, ob_get_contents());
         fclose($fp);
         ob_end_flush();
    }
}

您可以使用ob_get_level或ob_get_status:http://php.net/manual/en/function.ob-get-status.php