案例需求:

使用PHP缓存机制完成新闻管理系统的页面静态化
数据库表 ecs_article (新闻表)
因为新闻这些信息,并不是对实时性要求高,本身这个新闻比较稳定,内容也比较固定,所以我们考虑:
  当第一个用户访问某条新闻后,我们使用PHP缓存机制把页面显示内容缓存到一个静态页面(.html)中,当下次访问时,直接访问html页面即可。

一个新闻列表页,一个新闻详细页,要求点击一篇title的时候,生成一个静态页面,当第二次再打开这个title的链接的时候,有静态页面则取静态页面来显示。

新闻列表页:

新闻详细页:

我们要缓存的就是这个页面!

思路:

1、显示列表页。

2、给列表title添加链接

3、

  ①第一次点击:

    点击title链接触发php程序,生成静态页面。

  ②第二次点击: 

//触发PHP程序,首先去找第一次生成的静态文件是否存在:

//filemtime($filepath) => 返回该文件最后一次修改的时间
if (file_exists($html_path) && (filemtime($html_path)+30>time()) {
//存在直接显示这个文件
  echo file_get_contents($html_path);
  exit;
} else {
//不存在,读取数据库,生成静态文件
  //根据新闻id读取对应的新闻内容
  
}

以上是单纯使用PHP缓存机制完成页面静态化,但如何解决新闻更新,静态页面也更新呢,和将动态网址变为静态网址

解决思路:

  当数据库中新闻内容变更(增加一篇新文章,或者一篇文章的内容被修改)的时候,就让这个新闻对应的静态页面也跟着生成和变更!--通过网站的设计模板创建爱你静态页面。

真静态:

案例:在编辑人员增加一篇新闻的同时,创建一个这篇新闻页面的静态页面

$post = $_POST;
// $id = M('article')->add($post);
$title = $post['title'];
$content = $post['content'];
$id = M('article')->add($post);//框架,添加到数据库
if ($id) {
//生成静态文件
//新闻详细页模板文件路径
$tpl = HTML_PATH.'/news_detail.html';//定义的新闻详细页的模板路径
//要创建的新闻页面
$newfile = HTML_PATH.CONTROLLER_NAME.'/news_detail_id'.$id.'.html';//定义的创建的真静态页面的路径
$tpl = fopen($tpl, 'r');//以只读方式打开模板页面-----关键
$newfile = fopen($newfile, 'w');//以写入方式打开新建文件-------关键
  
  //添加这个”头“到新文件,防止乱码,防止浏览器缓存页面
  $head = "<head><meta http-equiv='Content-Type' content='text/html;Charset=utf-8' /><meta http-equiv='Cache-Control' content='no-cache' /><meta http-equiv='Expires' content='-1' /><meta http-equiv='Pragma' content='no-cache' /></head>";
  fwrite($handle, $head);
    while (!feof($tpl)) {
$con = fgets($tpl);//读取一行
//替换
$con = str_replace(array('<%title%>','<%content%>'), array($title, $content),$con);
//把替换后的文件写入到新文件中
fwrite($newfile, $con);
}
//关闭文件句柄
fclose($tpl);
fclose($newfile);
echo '添加成功,并创建其对应的静态页面';
   jump('新闻列表页面路径');
} else {
echo '新闻添加失败,请重试...';
}

在新闻列表页,当点击链接跳转到详细页面时,直接读取静态页面!

说明:当更新的时候,注意删除原来的静态文件,修改后重新生成新的静态文件取代原来的静态文件。此操作略...

总结:

①为什么静态化

②静态化的方法(使用ob缓存来实现静态化 问题1 实时性不好,有延时;问题2 请求某个查询页面时使用 PHP 动态网站)

③真静态(在添加和修改的时候,可以实时的处理静态页面,问题:如果真静态的数据是海量的就会造成真静态的HTML页面很多,占用磁盘空间大,导致系统性能大幅下降:要查询某个真静态文件会遍历这个磁盘空间。)---如果生成的真静态是海量的,那么不适合使用这个真静态技术。

③要解决真静态的问题,就要用到伪静态技术。

  

最新文章

  1. stm32 hid 键盘描述
  2. js写的ajax
  3. NOIP2014pj子矩阵[搜索|DP]
  4. codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
  5. 【php基础】XML,DTD实例
  6. 数据库通用Jdbc操作
  7. C#操作IIS完整解析
  8. [CSS] 子元素垂直居中的两种方式
  9. Ajax实现页面动态加载,添加数据
  10. gridControl 中CellValueChanged,ShowingEditor,CustomDrawCell的用法
  11. 操作系统PV编程题目总结一
  12. Devexpress Ribbon 动态生成菜单
  13. java中如何获得方法中的参数名
  14. 正则去除html字符串中的注释、标签、属性
  15. Generative Adversarial Nets[Wasserstein GAN]
  16. 《机器学习实战(基于scikit-learn和TensorFlow)》第四章内容的学习心得
  17. 利用 John the Ripper 破解用户登录密码
  18. docker 原理
  19. Nginx配置直接php
  20. 要想有什么样的成就就要有什么样的眼光-SNF快速开发平台

热门文章

  1. CodeIgniter - 数据库的增删改查
  2. thinkphp的mvc理解
  3. loj 1011(状态压缩+记忆化搜索)
  4. MSSQL 2005 列转行应用案例
  5. mtr命令
  6. spring实战三装配bean之Bean的作用域以及初始化和销毁Bean
  7. DP+路径 URAL 1029 Ministry
  8. 【转载】Linux下makefile详解--跟我一起写 Makefile
  9. 【转】执行脚本出现bin/bash: bad interpreter: No such file or directory
  10. Java中的HashTable详解