2015-01-14 98 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