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 相关文章推荐
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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+ajax无刷新上传图片实例代码
2015/11/17 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
angularJs的ng-class切换class
2017/06/23 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
课改先进个人汇报材料
2014/01/26 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
英文道歉信
2015/01/20 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
售后服务质量承诺书
2015/04/29 职场文书
行政撤诉申请书
2015/05/18 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
windows安装python超详细图文教程
2021/05/21 Python
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技