PHP模板引擎Smarty的緩衝使用總結_PHP教程

來源:互聯網
上載者:User
這裡我們將分析一下如何開啟和使用smarty緩衝,如何清除smarty緩衝以及smarty的全域緩衝,部分緩衝,局部緩衝三種緩衝機制。

一、開啟和使用smarty緩衝

要開啟smarty的緩衝,只需在smarty設定參數裡面將caching設為true,並指定cache_dir即可。同時設定cache_lefetime參數指定緩衝存留時間(單位為秒)。如果要對相同頁面產生多個不同的緩衝,可以在display或fetch中加入第二參數cache_id,如:

複製代碼 代碼如下:$smarty->display('index.tpl',$my_cache_id);

此特性可用於對不同的$_GET進行不同的緩衝。

二、清除smarty緩衝

清除smarty緩衝一般有以下幾種方式:
複製代碼 代碼如下:
clear_all_cache();//清除所有緩衝
clear_cache('index.tpl');//清除指定模板index.tpl的緩衝
clear_cache('index.tpl',cache_id);//清除指定模板指定id的緩衝

三、全域緩衝

全域緩衝就是為整個網站的全部頁面都產生快取頁面面。設定全域緩衝首先我們要操作smarty的設定檔,開啟緩衝,指定快取檔案目錄,並設定緩衝的存活時間,設定參數如下:
複製代碼 代碼如下:
$smarty->cache_dir='./cache/'; //設定存放快取檔案的檔案夾
$smarty->caching=1;//開啟緩衝 0、FALSE代表關閉|非0數字、TRUE代表開啟
$smarty->cache_lifetime=3600//單位為秒(如果填寫-1為永不到期)

接下來我們要去具體的php版面設定與之對應的具體快取檔案的名字,在php頁面中可按如下寫法:

複製代碼 代碼如下:$smarty->display('list2.html',md5($_SERVER['REQUEST_URI']));//將當前頁面的URL(包含?後面的所有參數)進行md5加密然後設定快取檔案名

需要注意的是:
複製代碼 代碼如下:
$smarty->display('與之對應的模板檔案名稱','快取檔案名的補充部分')這個方法。

第二個參數不是必須的,如果不寫的話,快取檔案名就是模板檔案名稱經過加密處理後的檔案。但是這樣會碰到一個比較棘手的問題,例如:
複製代碼 代碼如下:
http://www.jb51.net/article.php?id=5
http://www.jb51.net/article.php?id=7

這兩個個URL對應應該的不同的內容,但是產生的快取檔案名都是 article 加密後的結果。這就會導致使用者想要查詢的是不同的內容,訪問的卻是同一個快取檔案。所以建議加上一個輔助參數,將訪問url(包含?後面的所有參數)md5加密是比較靠譜的一種做法。

四、部分緩衝

部分緩衝就是指定一些檔案產生快取檔案,而非網站的全部檔案。部分緩衝的實質其實是部分不緩衝,也就是說不是指定哪些檔案產生緩衝,而是指定具體一些檔案不產生緩衝。現在假設有3個檔案:
複製代碼 代碼如下:
http://www.jb51.net/index.php //需要緩衝
http://www.jb51.net/cate.php //需要緩衝
http://www.jb51.net/article.php //不需要緩衝

前面兩個檔案的php檔案裡面還是需要寫上$smarty->display('與之對應的模板檔案名稱','快取檔案名的補充部分')這句。

但在第三個檔案中我們要特別指明不需要產生緩衝,具體的方法是在display指定模板之前寫上下面這段代碼:
複製代碼 代碼如下:
$smarty->clear_cache('與之對應的模板檔案名稱');//其實寫在$smarty->display('與之對應的模板檔案名稱')之前還是之後都可以

當然$smarty->display('與之對應的模板檔案名稱')還是要寫,本來就不想產生緩衝,第二個參數也就不需要了。

注意:$smarty->clear_cache()和$smarty->display()的參數一定要寫成一致的

五、局部緩衝

局部緩衝就是指定同一頁面下的某些局部地方產生緩衝。其實它不是指定哪些局部產生緩衝,而是哪些局部不產生緩衝(這和部分緩衝的操作思想是類似的)。我們先來看下面一個例子:

article.php 檔案部分內容如下:
複製代碼 代碼如下:

$time=time();

$smarty->assign('time',$lanmuarr);

function insert_timeget(){

return time();

}

$smarty->display('article.html');

對應模板檔案article.html部分代碼如下:
複製代碼 代碼如下:

{$time}

{insert name='timeget'}

這裡對上面的例子做一下解釋:在PHP中我們只要定義了函數名為 insert_ (注意底線)自訂補充名的自訂函數,在其中返回的值,不需要assign()方法傳遞,就能直接在模板頁面中以{insert name='自訂補充名'}的方式調用,同時不會受到緩衝的影響,而即時重新整理。

另外補充的一下是如果你感覺使用 Smarty 緩衝不夠爽的話,還可以使用自訂緩衝,如何使用自訂緩衝呢?

這裡需要設定cache_handler_func使用自訂的函數處理緩衝,如:
複製代碼 代碼如下:
$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"://讀取緩衝內容

case "write"://寫入緩衝

case "clear"://清空

}

}

http://www.bkjia.com/PHPjc/760284.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/760284.htmlTechArticle這裡我們將分析一下如何開啟和使用smarty緩衝,如何清除smarty緩衝以及smarty的全域緩衝,部分緩衝,局部緩衝三種緩衝機制。 一、開啟和使...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.