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实现ping
Oct 09 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
php获取微信openid方法总结
Oct 10 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
Jquery ui css framework
2010/06/28 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python过滤列表用法实例分析
2016/04/29 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
点球小游戏python脚本
2018/05/22 Python
wxpython绘制圆角窗体
2019/11/18 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
Pygame的程序开始示例代码
2020/05/07 Python
职工运动会邀请函
2014/01/19 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
三好学生个人总结
2015/02/15 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书