ThinkPHP静态缓存简单配置和使用方法详解


Posted in PHP onMarch 23, 2016

本文实例讲述了ThinkPHP静态缓存简单配置和使用方法。分享给大家供大家参考,具体如下:

根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存。

启用静态缓存:

ThinkPHP官方手册写道

要使用静态缓存功能,需要开启HTML_CACHE_ON 参数,并且在项目配置目录下面增加静态缓存规则文件 htmls.php,两者缺一不可。否则静态缓存不会生效。

在配置文件Conf\config.php的array()中加上:

'HTML_CACHE_ON' => true,//开启静态缓存
'HTML_PATH' => '__APP__/html',//静态缓存文件目录,HTML_PATH可任意设置,此处设为当前项目下新建的html目录

静态规则定义:

ThinkPHP官方手册写道

静态规则的定义有三种方式:

Return Array(
'ActionName'=>array('静态规则','静态缓存有效期','附加规则'), //第一种
'ModuleName:ActionName'=>array('静态规则','静态缓存有效期','附加规则'),//第二种
'*'=>array('静态规则','静态缓存有效期','附加规则'),//第三种
…更多操作的静态规则
)

第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:

'read'=>array('{id}','60')

其中,{id} 表示取$_GET['id'] 为静态缓存文件名,第二个参数表示缓存60秒。

第二种是定义某个模块的操作的静态规则,例如,我们需要定义Blog模块的read操作进行静态缓存

'Blog:read'=>array('{id}',-1)

第三种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如

'*'=>array('{$_SERVER.REQUEST_URI|md5}')
//根据当前的URL进行缓存。

我这里在静态缓存规则文件 htmls.php中写:

<?php
return array(
'getHtml' => array('{:action}', -1),//-1表示永久缓存
);
?>

上面的静态缓存规则表示定义所有的getHtml操作的静态规则为:

'getHtml'=>array('{:action}',-1)

{:action}表示当前操作名为静态缓存文件名。

同样在\Lib\Action\IndexAction.class.php文件中写:

<?php
class IndexAction extends Action{
  //在当前项目的html目录下生成getHtml.shtml
  public function getHtml() {
   header('Content-type:text/html;charset=utf-8');
   $this->assign('title', '生成html文件');
   $this->assign('info', '生成html文件');
   $this->display();
  }
}
?>

在\Tpl\default\index\getHtml.html中写:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <title>{$title}</title>
 </head>
 <body>
  <h2>{$info}</h2>
 </body>
</html>

然后在浏览器中输入:http://127.0.0.1/myApp/index.php/index/getHtml,可看到预期的页面。

刷新页面后,浏览器地址栏会发生变化,如下:

ThinkPHP静态缓存简单配置和使用方法详解

ps:如果用的apache,firefox和opera可能会不支持shtml文件,可以在httpd.conf文件中找到"AddType text/html .shtml","AddOutputFilter INCLUDES .shtml",分别去掉前面的"#"即可。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
php Smarty 字符比较代码
Feb 27 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
解析argc argv在php中的应用
Jun 24 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 #PHP
ThinkPHP项目分组配置方法分析
Mar 23 #PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 #PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 #PHP
ThinkPHP路由机制简介
Mar 23 #PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 #PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 #PHP
You might like
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
python生成日历实例解析
2014/08/21 Python
Python Tkinter基础控件用法
2014/09/03 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
python函数的万能参数传参详解
2019/07/26 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
Final类有什么特点
2012/04/25 面试题
蔬菜基地的创业计划书
2014/01/06 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
致接力运动员加油稿
2015/07/21 职场文书
德能勤绩工作总结
2015/08/11 职场文书
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python