PHP ob_start()用于文件缓存
问题描述:
当此示例网页加载时,它会检查来自/ 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());
答
我觉得你的缓存仍然是创建,因为你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
什么是“但ob_end_flush()函数似乎工作”的含义是什么?如果调用ob_end_flush()但尚未调用ob_start(),则ob_end_flush()将不执行任何操作。 –
这就是我所期望的......正如你可以看到我没有调用ob_start(),但它一直在缓存页面...... –