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 2000下使用ISAPI方式安装PHP
Sep 05 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php银联网页支付实现方法
Mar 04 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
PHP解决高并发问题
Apr 01 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
详解php协程知识点
2018/09/21 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
js获取视频时长代码
2014/04/10 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
redux-saga 初识和使用
2018/03/10 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
python删除文件示例分享
2014/01/28 Python
linux 下实现python多版本安装实践
2014/11/18 Python
Python中如何获取类属性的列表
2016/12/26 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
2014最新股权信托合同协议书
2014/11/18 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
使用Redis做预定库存缓存功能
2022/04/02 Redis
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js