2015-01-14 38 views
0

当此示例网页加载时,它会检查来自/ cache文件夹的缓存文件。如果没有缓存文件,它会调用ob_start()并创建一个.html缓存文件。问题是这个缓存过程每次都在工作,即使我没有调用ob_start()。请建议我。谢谢。PHP 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

什么是“但ob_end_flush()函数似乎工作”的含义是什么?如果调用ob_end_flush()但尚未调用ob_start(),则ob_end_flush()将不执行任何操作。 –

+0

这就是我所期望的......正如你可以看到我没有调用ob_start(),但它一直在缓存页面...... –

回答

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