PHP文件缓存smarty模板应用实例分析


Posted in PHP onFebruary 26, 2016

本文实例分析了PHP文件缓存smarty模板应用。分享给大家供大家参考,具体如下:

一、使用缓存

要开启smarty的缓存,只需将caching设为true,并指定cache_dir即可.
使用cache_lefetime指定缓存生存时间,单位为秒
要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id,如:

$smarty->display('index.tpl',$my_cache_id);

此特性可用于对不同的$_GET进行不同的缓存
 
二、清除缓存

clear_all_cache();//清除所有缓存
clear_cache('index.tpl');//清除index.tpl的缓存
clear_cache('index.tpl',cache_id);//清除指定id的缓存

三、使用自定义缓存方式

设置cache_handler_func使用自定义的函数处理缓存
如:

$smarty->cache_handler_func = "myCache";
function myCache($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null){
}

该函数的一般是根椐$action来判断缓存当前操作:

switch($action){
case "read"://读取缓存内容
case "write"://写入缓存
case "clear"://清空
}

一般使用md5($tpl_file.$cache_id.$compile_id)作为唯一的cache_id
如果需要,可使用gzcompress和gzuncompress来压缩和解压
 
四、局部关闭缓存

要在某些区域使缓存失效(只对需要的缓存),有几种方法:

insert:

定义一个insert标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name='abc'}

参数通过$params传入

也可以做成insert插件,文件名命名为:insert.xx.php,函数命名为:smarty_insert_aa($params,&$smarty),xx定义同上

register_block:

定义一个block:

smarty_block_name($params,$content, &$smarty){return $content;}
//name表示区域名

注册block:

$smarty->register_block('name', 'smarty_block_name', false);
//第三参数false表示该区域不被缓存

模板写法:

{name}内容{/name}

写成block插件:

1)定义一件插件函数:block.cacheless.php,放在smarty的plugins目录
block.cacheless.php的内容如下:

<?php
function smarty_block_cacheless($param, $content, &$smarty) {
   return $content;
}
?>

2) 编写程序及模板

示例程序:testCacheLess.php

<?php
include('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display('cache.tpl');
?>

所用的模板:cache.tpl

已经缓存的:

{$smarty.now}<br>
{cacheless}

 
没有缓存的:

{$smarty.now}
{/cacheless}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用php+mysql一个名片库程序
Oct 09 PHP
php引用地址改变变量值的问题
Mar 23 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
初识PHP
Sep 28 PHP
PHP进程同步代码实例
Feb 12 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP PDOStatement::rowCount讲解
Feb 01 PHP
laravel-admin的图片删除实例
Sep 30 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 #PHP
PHP实现根据时间戳获取周几的方法
Feb 26 #PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 #PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 #PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 #PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 #PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 #PHP
You might like
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
js自定义回调函数
2015/12/13 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
微信小程序实战之轮播图(3)
2017/04/17 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
python列表操作使用示例分享
2014/02/21 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
意向书范文
2014/03/31 职场文书
毕业证委托书范文
2014/09/26 职场文书
优秀党员推荐材料
2014/12/18 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
Android 中的类文件和类加载器详情
2022/06/05 Java/Android