PHP模板引擎Smarty的緩存使用總結(jié)
這里我們將分析一下如何開啟和使用smarty緩存,如何清除smarty緩存以及smarty的全局緩存,部分緩存,局部緩存三種緩存機制。
一、開啟和使用smarty緩存
要開啟smarty的緩存,只需在smarty設(shè)置參數(shù)里面將caching設(shè)為true,并指定cache_dir即可。同時設(shè)置cache_lefetime參數(shù)指定緩存生存時間(單位為秒)。如果要對相同頁面生成多個不同的緩存,可以在display或fetch中加入第二參數(shù)cache_id,如:
此特性可用于對不同的$_GET進行不同的緩存。
二、清除smarty緩存
清除smarty緩存一般有以下幾種方式:
clear_all_cache();//清除所有緩存
clear_cache('index.tpl');//清除指定模板index.tpl的緩存
clear_cache('index.tpl',cache_id);//清除指定模板指定id的緩存
三、全局緩存
全局緩存就是為整個網(wǎng)站的全部頁面都生成緩存頁面。設(shè)置全局緩存首先我們要操作smarty的配置文件,開啟緩存,指定緩存文件目錄,并設(shè)置緩存的存活時間,設(shè)置參數(shù)如下:
$smarty->cache_dir='./cache/'; //設(shè)置存放緩存文件的文件夾
$smarty->caching=1;//開啟緩存 0、FALSE代表關(guān)閉|非0數(shù)字、TRUE代表開啟
$smarty->cache_lifetime=3600//單位為秒(如果填寫-1為永不過期)
接下來我們要去具體的php頁面設(shè)置與之對應的具體緩存文件的名字,在php頁面中可按如下寫法:
需要注意的是:
$smarty->display('與之對應的模板文件名','緩存文件名的補充部分')這個方法。
第二個參數(shù)不是必須的,如果不寫的話,緩存文件名就是模板文件名經(jīng)過加密處理后的文件。但是這樣會碰到一個比較棘手的問題,例如:
http://www.dbjr.com.cn/article.php?id=5
http://www.dbjr.com.cn/article.php?id=7
這兩個個URL對應應該的不同的內(nèi)容,但是生成的緩存文件名都是 article 加密后的結(jié)果。這就會導致用戶想要查詢的是不同的內(nèi)容,訪問的卻是同一個緩存文件。所以建議加上一個輔助參數(shù),將訪問url(包含?后面的所有參數(shù))md5加密是比較靠譜的一種做法。
四、部分緩存
部分緩存就是指定一些文件生成緩存文件,而非網(wǎng)站的全部文件。部分緩存的實質(zhì)其實是部分不緩存,也就是說不是指定哪些文件生成緩存,而是指定具體一些文件不生成緩存?,F(xiàn)在假設(shè)有3個文件:
http://www.dbjr.com.cn/index.php //需要緩存
http://www.dbjr.com.cn/cate.php //需要緩存
http://www.dbjr.com.cn/article.php //不需要緩存
前面兩個文件的php文件里面還是需要寫上$smarty->display('與之對應的模板文件名','緩存文件名的補充部分')這句。
但在第三個文件中我們要特別指明不需要生成緩存,具體的方法是在display指定模板之前寫上下面這段代碼:
$smarty->clear_cache('與之對應的模板文件名');//其實寫在$smarty->display('與之對應的模板文件名')之前還是之后都可以
當然$smarty->display('與之對應的模板文件名')還是要寫,本來就不想生成緩存,第二個參數(shù)也就不需要了。
注意:$smarty->clear_cache()和$smarty->display()的參數(shù)一定要寫成一致的
五、局部緩存
局部緩存就是指定同一頁面下的某些局部地方生成緩存。其實它不是指定哪些局部生成緩存,而是哪些局部不生成緩存(這和部分緩存的操作思想是類似的)。我們先來看下面一個例子:
article.php 文件部分內(nèi)容如下:
<?php
$time=time();
$smarty->assign('time',$lanmuarr);
function insert_timeget(){
return time();
}
$smarty->display('article.html');
對應模板文件article.html部分代碼如下:
<body>
{$time}<!--開啟緩存后,重復刷新這個值不會變-->
{insert name='timeget'}<!--開啟緩存后,重復刷新這個值會變-->
</body>
這里對上面的例子做一下解釋:在PHP中我們只要定義了函數(shù)名為 insert_ (注意下劃線)自定義補充名的自定義函數(shù),在其中返回的值,不需要assign()方法傳遞,就能直接在模板頁面中以{insert name='自定義補充名'}的方式調(diào)用,同時不會受到緩存的影響,而實時刷新。
另外補充的一下是如果你感覺使用 Smarty 緩存不夠爽的話,還可以使用自定義緩存,如何使用自定義緩存呢?
這里需要設(shè)置cache_handler_func使用自定義的函數(shù)處理緩存,如:
$smarty->cache_handler_func="myCache";
function myCache($action,&$smarty_obj,&$cache_content,$tpl_file=null,$cache_id=null,$compile_id=null){
switch($action){
case "read"://讀取緩存內(nèi)容
case "write"://寫入緩存
case "clear"://清空
}
}
- Smarty模板快速入門
- 在smarty模板中使用PHP函數(shù)的方法
- 模板引擎smarty工作原理以及使用示例
- 解析smarty模板中類似for的功能實現(xiàn)
- smarty模板中使用get、post、request、cookies、session變量的方法
- PHP模板引擎smarty詳細介紹
- smarty模板引擎中內(nèi)建函數(shù)if、elseif和else的使用方法
- smarty模板引擎中自定義函數(shù)的方法
- php之Smarty模板使用方法示例詳解
- php Smarty模板生成html文檔的方法
- PHP 基于Yii框架中使用smarty模板的方法詳解
- smarty模板的使用方法實例分析
相關(guān)文章
需要使用php模板的朋友必看的很多個頂級PHP模板引擎比較分析
最近學習php模板技術(shù),找到一篇不錯的關(guān)于php模板的分析為了找到一個好的模板引擎,我在互聯(lián)網(wǎng)上進行搜索,目前已經(jīng)整理出了以下名單2008-05-05使用TinyButStrong模板引擎來做WEB開發(fā)
使用TinyButStrong模板引擎來做WEB開發(fā)...2007-03-03