前面介紹了pear的安裝,今天開始介紹pear的幾個知名的package之一,如果有不清楚的地方請站內搜索“PEAR教程”獲取前面的教程!
今天要介紹的是PEAR的Cache_Lite包,做web的說到提速眼睛瞪大的程度絕不亞於男人見到絕色美女時眼睛所瞪大的程度,因此,我這裡第一個要介紹的就是PEAR的Cache_lite包,利用這個package可以根據你的需要快取網頁的任何一個部分,從而大大的提高了頁面的生成和載入速度!
首先去Pear的List Packages下載Cache_Lite這個安裝包,寫這個教學的時候,穩定的版本是1.7.2,所以我們就下載這個版本,下載下來後解壓縮,然後將檔案放在PEAR的根目錄下(文件目錄如何組織,後面有介紹),然後我們去manual對應的章節看看如何使用。那些關於包的介紹你可以先看看,我們這裡沒有前戲,直接切入主題,下面是Cache_Lite::get()的例子。我們就從這個例子入手,我在例子中增加了中文的註釋
require_once"Cache/Lite.php";//這裡是相對PEAR的位址,找到剛剛下載的套件中Lite.php這個檔案後你就應該知道如何部署這個資料夾了!
$options=array(
'cacheDir'=>'/tmp/',//這裡是Cache的路徑,最好用絕對路徑,我們的範例會有說明
'lifeTime'=>7200,//快取的失效時間,秒為單位
'pearErrorMode'=>CACHE_LITE_ERROR_DIE//報錯模式
);
$cache=newCache_Lite($options);//參數設定完後建立緩存
if($data=$cache->get('id_of_the_page')){//如果id=id_of_the_page這個快取存在的話,則直接將快取資料echo出來
// Cache hit !
// Content is in $data
// (...)
}else{//快取不存在,則產生緩存
// No valid cache found (you have to make and save the page)
// (...)
}
看了上面的例子,是不是發現很簡單?其實快取的關鍵之處不在於如何產生和刪除緩存,而是如何平衡快取靜止和動態的關係,如何在適當的時候重建快取。下面我開始舉例,讓大家體會到快取的好處! ,請在tutor(我們教學中的範例對應的根目錄)下建立檔案cache,*nix作業系統請設定屬性為0777,然後在tutor資料夾下建立cache.php,輸入下面的程式碼
< ?php
require_once"config.php";
require_once"Cache/Lite.php";
//下面的程式碼是計算頁面執行時間,和cache無關
functionget_microtime()
{
list($usec,$sec)=explode(' ',microtime());
return((float)$usec+(float)$sec);
}
$s= get_microtime();
//下面是快取的設定
$options=array(
'cacheDir'=> WEB_DIR."/cache/",
//請在tutor(我們教學中的範例對應的根目錄)
//下建立檔案cache,
//*nix作業系統請設定屬性為0777
'lifeTime'=>10,//10秒失效時間
'pearErrorMode'=> CACHE_LITE_ERROR_DIE
);
$cache=newCache_Lite($options);
$cache_id='cache';//id一定要唯一
//否則會跟別人的cache出現衝突
if($data=$cache->get($cache_id)){
//data是取得資料的結果,如果快取存在且沒有過期,
//直接取出數據
echo$data;
}else{
//否則我們建立快取
//下面我們故意用迴圈來耗時
while($i<10000000)
$i++ ;
$data='快取建立的時間:'.date("Ymd H:i:s");
$data.="<p>沒有快取執行的時間是:".(get_microtime()-$s)."秒";
echo$data;
$cache->save($data);
}
echo"<p>目前頁面耗時:".(get_microtime()-$s)."秒</p>";
?>
在瀏覽器中執行http://127.0.0.1/tutor/cache.php ,然後看看cache的目錄下是不是產生了一個文件,很有成就感吧? !
在web頁面我們發現第一次運行的時間用時大約1秒,快取生成之後用時則只為原來的1/1000,這樣的效率就不需要我再多餘描述了吧! !其實上面這個例子的大致流程是,1.建立快取參數,包括快取的ID;2.根據參數和ID檢查快取是否存在,如果存在,則快取資料被取得在$data變數中,然後echo出來,否則重新產生緩存,將頁面的結果保存在變數中,然後將變數的資料寫入快取。不過這樣的方式很不方便,因為所有的輸出我們必須將其寫到一個變數中,這樣其實是比較麻煩的,要用到很多字串連接,程式碼很難維護,當然簡單的cache最好還是建議採用這樣的方式。不過你別擔心,強大的PEAR不會這麼弱智的,所以它也提供了另一種方式,其實就是獲取緩衝區取出變數的方式,下面看看這個簡單的例子,對應的manual章節在這裡。
< ?php
require_once"config.php";
require_once"Cache/Lite/Output.php";
//注意,這裡require的檔案不一樣了哦
$options=array(
'cacheDir'=> WEB_DIR."/cache/",
'lifeTime'=>10,//10秒失效時間
'pearErrorMode'=> CACHE_LITE_ERROR_DIE
);
$cache=newCache_Lite_Output($options);
$cache_id='obcache';
if(!($cache->start($cache_id))){
//如果不存在,則建立緩存,存在的話,程式自動就將緩存輸出了
?>
這裡你想幹什麼,
包括執行php
包含資料庫查詢只要是php允許的都可以在這裡完成是不是很方便呢
< ?php
$cache->end();//這個千萬別忘了,
//否則快取永遠建立不成功,
//這個函式就是在出來output buffer
}
?>
再去看看cache的目錄下是不是又多了一個檔案?
cache就介紹到這裡,下面有幾個要注意的地方:
1.cache的ID一定要唯一,可以將一些參數整合進來
2.cache的快取路徑最好寫絕對路徑
3.本節的重點在於註釋,請仔細閱讀註釋
另外,透過我的介紹,如何刪除緩存大家可以去看看對應的手冊了,上面的例子在於拋磚引玉,如果上面的例子你會用了,接下的快取操作應該不是難事了。