ob_get_contents():用來(lái)獲取頁(yè)面緩存中的內(nèi)容,獲取到以后呢,我們就可以想怎么處理這些內(nèi)容都行了,過(guò)濾字段啦,匹配內(nèi)容啦,都可以~~~ :)
ob_end_flush():表示頁(yè)面緩存結(jié)束。并且經(jīng)我驗(yàn)證,緩存的內(nèi)容將輸出到當(dāng)前頁(yè)面上,也就是可以顯示緩存內(nèi)容。
用此三個(gè)php函數(shù),就可以實(shí)現(xiàn)強(qiáng)大的功能。如果數(shù)據(jù)庫(kù)查詢量較大,可以用cache來(lái)解決這個(gè)問(wèn)題。
首先,設(shè)定過(guò)期時(shí)間,如果要求緩存文件2個(gè)小時(shí)過(guò)期,就可以設(shè)定cache_time為3600*2;通過(guò)filectime()來(lái)獲取緩存文件的創(chuàng)建時(shí)間(或 filemtime()獲取修改時(shí)間),如果當(dāng)前時(shí)間跟文件的創(chuàng)建時(shí)間超過(guò)限定的過(guò)期時(shí)間,就可以通過(guò)上面三個(gè)函數(shù),首先從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),然后開始緩存ob_start(),然后把要生成的頁(yè)面的html代碼寫在緩存中,緩存結(jié)束后通過(guò)ob_get_contents()獲取到緩存的內(nèi)容,然后通過(guò)fwrite把緩存內(nèi)容寫到靜態(tài)頁(yè)面html。
如果未過(guò)期,直接讀取cache中的靜態(tài)頁(yè)面即可,避免了大量的數(shù)據(jù)庫(kù)訪問(wèn)。
<?php
$_time =10;
$dir="D:\\\\\\\\php\\\\\\\\";
function cache_start($_time, $dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
$cachetime = $_time;
ob_start();
if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
{
include($cachefile);
ob_end_flush();
exit;
}
}
function cache_end($dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html';
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
}
cache_start($_time, $dir);
//以下是輸出的內(nèi)容,放在cache_start和cache_end兩個(gè)方法之間
for ($i=0;$i<5;$i )
{
echo $i;
sleep(1);
}
cache_end($dir);
?>
相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)西部數(shù)碼官網(wǎng):m.ps-sw.cn