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设计模式 Builder(建造者模式)
Jun 26 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 PHP
PHP常量及变量区别原理详解
Aug 14 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扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php获取远程文件内容的函数
2015/11/02 PHP
显示、隐藏密码
2006/07/01 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
brook javascript框架介绍
2011/10/10 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python 中的 else详解
2016/04/23 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
python与js主要区别点总结
2020/09/13 Python
python 实现波浪滤镜特效
2020/12/02 Python
小学门卫岗位职责
2013/12/17 职场文书
大学生村官承诺书
2014/03/28 职场文书
党支部综合考察材料
2014/05/19 职场文书
事业单位考核材料
2014/05/21 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
工作失职检讨书
2015/01/26 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python