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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php实现中文转数字
Feb 18 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
PHP 中使用ajax时一些常见错误总结整理
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中include()与require()的区别说明
2010/03/10 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
如何在PHP中生成随机数
2020/06/04 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
python with statement 进行文件操作指南
2014/08/22 Python
Python实现建立SSH连接的方法
2015/06/03 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
联谊会开场白
2015/06/01 职场文书
校园广播稿范文
2015/08/19 职场文书
创业计划书之花店
2019/09/20 职场文书