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 相关文章推荐
资料注册后发信小技巧
Oct 09 PHP
mysql5详细安装教程
Jan 15 PHP
使用PHP socke 向指定页面提交数据
Jul 23 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 PHP
PHP return语句的另一个作用
Jul 30 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
YII框架关联查询操作示例
Apr 29 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
js类型检查实现代码
2010/10/29 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python简单日志处理类分享
2015/02/14 Python
Python continue继续循环用法总结
2018/06/10 Python
pycharm安装和首次使用教程
2018/08/27 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python文件和文件夹复制函数
2020/02/07 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
干部行政关系介绍信
2014/01/17 职场文书
优秀经理事迹材料
2014/02/01 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
个性发展自我评价2015
2015/03/09 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
详解Python常用的魔法方法
2021/06/03 Python
JavaScript 定时器详情
2021/11/11 Javascript