加载此示例网页时,它会检查/ 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());
答案 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