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 preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
phpize的深入理解
Jun 03 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
微信红包随机生成算法php版
Jul 21 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
PHP实现用户登录的案例代码
May 10 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
nodejs教程之入门
2014/11/21 NodeJs
javascript最基本的函数汇总
2015/06/25 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
python数据清洗系列之字符串处理详解
2017/02/12 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
error和exception有什么区别
2012/10/02 面试题
单位在职证明范本
2014/01/09 职场文书
优秀教师先进事迹
2014/01/22 职场文书
初一体育教学反思
2014/01/29 职场文书
世界读书日的活动方案
2014/08/20 职场文书
孔庙导游词
2015/02/04 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang