搜尋
首頁後端開發php教程Smarty缓存技术总结_PHP教程

大家应该都知道合理使用缓存能有效的减轻网站的服务器压力,php Smarty作为一个非常优秀的php模板引擎,它为我们提供了非常简单而多样化的缓存操作,下面就让我们学习一下smarty缓存操作方面的一些技巧。这里我们将分析一下如何开启和使用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.phpernote.com/article.php?id=5

http://www.phpernote.com/article.php?id=7

这两个个URL对应应该的不同的内容,但是生成的缓存文件名都是 article 加密后的结果。这就会导致用户想要查询的是不同的内容,访问的却是同一个缓存文件。所以建议加上一个辅助参数,将访问url(包含?后面的所有参数)md5加密是比较靠谱的一种做法。

四、部分缓存

部分缓存就是指定一些文件生成缓存文件,而非网站的全部文件。部分缓存的实质其实是部分不缓存,也就是说不是指定哪些文件生成缓存,而是指定具体一些文件不生成缓存。现在假设有3个文件:

http://www.phpernote.com/index.php //需要缓存

http://www.phpernote.com/cate.php //需要缓存

http://www.phpernote.com/article.php //不需要缓存

前面两个文件的php文件里面还是需要写上$smarty->display('与之对应的模板文件名','缓存文件名的补充部分')这句。

但在第三个文件中我们要特别指明不需要生成缓存,具体的方法是在display指定模板之前写上下面这段代码:

$smarty->clear_cache('与之对应的模板文件名');//其实写在$smarty->display('与之对应的模板文件名')之前还是之后都可以

当然$smarty->display('与之对应的模板文件名')还是要写,本来就不想生成缓存,第二个参数也就不需要了。

注意:$smarty->clear_cache()和$smarty->display()的参数一定要写成一致的

五、局部缓存

局部缓存就是指定同一页面下的某些局部地方生成缓存。其实它不是指定哪些局部生成缓存,而是哪些局部不生成缓存(这和部分缓存的操作思想是类似的)。我们先来看下面一个例子:

article.php 文件部分内容如下:

<?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中我们只要定义了函数名为 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"://清空
	}
}

具体这里就不多说了,读者可以参考相关文档,作者对这个了解也不是很清楚,怕分享出来误人哎。

您可能感兴趣的文章

  • PHP缓存技术详解
  • Mysql 数据库缓存cache功能分析,调试以及性能总结
  • 网页缓存控制 Cache-control 常见的取值有private、no-cache、max-age、must-revalidate 介绍
  • smarty include file 使用变量的方法
  • smarty变量操作符总结
  • smarty模板中给信息添加最新标签
  • PHP缓存操作实例详解
  • Smarty模板变量操作符总结

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/764132.htmlTechArticle大家应该都知道合理使用缓存能有效的减轻网站的服务器压力,php Smarty作为一个非常优秀的php模板引擎,它为我们提供了非常简单而多样化...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。