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 相关文章推荐
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
php 静态变量的初始化
Nov 15 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
php编程每天必学之表单验证
Mar 01 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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应用JSON技巧讲解
2013/02/03 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
玩转方法:call和apply
2014/05/08 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python中文编码知识点
2019/02/18 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
工程造价管理专业大专生求职信
2013/10/06 职场文书
建筑学专业自荐书
2014/07/09 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
大国崛起英国观后感
2015/06/02 职场文书
外科护士长工作总结
2015/08/12 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书