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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
PHP4实际应用经验篇(8)
Oct 09 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
YII中assets的使用示例
Jul 31 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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 @ at 记号的作用示例介绍
2014/10/10 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
独特的python循环语句
2016/11/20 Python
名片管理系统python版
2018/01/11 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
浅析python中while循环和for循环
2019/11/19 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
工作违纪检讨书
2014/02/17 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
北大自主招生自荐信
2015/03/04 职场文书
清明扫墓感想
2015/08/11 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android