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脚本数据库功能详解(下)
Oct 09 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
PHP CURL使用详解
Mar 21 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 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安装攻略:常见问题解答(三)
2006/10/09 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
Yii快速入门经典教程
2015/12/28 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
python 实时遍历日志文件
2016/04/12 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
wxpython布局的实现方法
2019/11/01 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
应届电子商务毕业自荐书范文
2014/02/11 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL