三,PHP缓存机制实现页面静态化
页面静态化思路:
因为新闻这种信息对实时性要求不高,并且比较稳定,所以可以这样做:当地一个用户访问某条新闻后,我们使用ob缓存机制,将内容缓存到html页面。当下一次访问时候,直接访问html页面。这样减少访问数据库次数,提高程序的效率,但是如果新闻内容修改,html静态页面必须实时改变,此处将html静态页面设定30s的过期时间,这样确保hrml静态页面和新闻的一直性,但是有30s延迟,没法保证实时性。
程序代码如下:
(1)数据库操作的类文件 ConnDB.class.php
<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/5
* Time: 8:57
*/
class ConnDB{
private static $host = '127.0.0.1';
private static $username = 'root';
private static $password = '7758521Lhy';
private static $db = 'test';
private $conn = null; public function __construct(){
$this->conn = new MySQLi(self::$host,self::$username,self::$password,self::$db);
if(!$this->conn){
echo '数据库连接错误:'.$this->conn->connect_error;
exit();
}
$this->conn->query("set names utf-8");
} public function execute_dql($sql){
$rs = $this->conn->query($sql) or die('查询出错!'.$this->conn->error);
$rsList = array();
if($rs){
while($row = $rs->fetch_assoc()){
$rsList[] = $row;
}
}
$rs->free();
return $rsList;
} public function execute_dml($sql){
$rs = $this->conn->query($sql);
if(!$rs){
$flag = 0;
}else if($this->conn->affected_rows){
$flag = 1;
}else{
$flag = 2;
}
return $flag;
} public function clossDB(){
if($this->conn){
$this->conn->close();
}
}
}
(2)新闻列表显示页面 news_list.php
<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/5
* Time: 15:31
*/
header("Content-Type:text/html;charset=utf-8");
require_once "ConnDB.class.php";
$conn = new ConnDB();
$sql = "select * from news";
$rs = $conn->execute_dql($sql);
$conn->clossDB();
ob_start();
echo "
<a href='add_news.php'>发布文章</a>
<table border='1'>
<tr><th>id</th><th>标题</th><th>详细内容</th></tr>"; foreach($rs as $row){
echo "<tr><td>{$row['id']}</td><td>{$row['title']}</td><td><a href='show_news.php?id={$row['id']}'>详细内容</a></td></tr>";
}
echo "
</table>
";
(3)单条新闻显示页面show_news.php
<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/5
* Time: 9:40
*/
header("Content-Type:text/html;charset=utf-8");
$id = $_GET['id'];
$html_filename = "news_id".$id.".html";
//新闻如果更新,静态页面无法更新,可以设定静态页面过期时间30s,这样30s后,重新生成新的静态页面,
//这样保证静态页面和新闻的一致性,但是没法确保实时性
if(file_exists($html_filename) && filemtime($html_filename)+30 > time()){
echo file_get_contents($html_filename);
exit();
}
require_once "ConnDB.class.php";
$conn = new ConnDB();
$sql = "select * from news where id = {$id} limit 1";
$rs = $conn->execute_dql($sql);
$conn->clossDB();
if($rs){
ob_start();
$row = $rs[0]; echo "
<table border='1'>
<tr><th>{$row['title']}</th></tr>
<tr><td>{$row['content']}</td></tr>
</table>
";
$html_contents = ob_get_contents();
$html_header = "<head><meta http-equiv='content-type=text/html;charset=utf-8'></head>"; file_put_contents($html_filename,$html_header.$html_contents);
}
单纯使用缓存技术存在的不足:
(1)news_list.php中点击“详细内容”时候,跳转到html静态页面时候,显示php页面。比如打开news_id1.html页面时候,地址栏显示http://127.0.0.1/show_news.php?id=1
(2)实时性不完美,存在30s延时。
可以使用真静态技术解决此问题。
三,PHP缓存机制实现页面静态化的更多相关文章
- 利用php的ob缓存机制实现页面静态化
利用php的ob缓存机制实现页面静态化 首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清 ...
- php利用ob缓存机制实现页面静态化方法全解
首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ...
- 使用ob缓存简单实现页面静态化
<?php //接收新闻id,传统的方法查询数据库并显示数据 $id=intval($_GET['id']); //先判断该新闻对于的静态页面是否存在,如果有,则直接返回,如果 //没有,则查询 ...
- 页面静态化3 --- 使用PHP页面缓存机制来完成页面静态化(下)操作一个案例(新闻管理系统)
案例需求: 使用PHP缓存机制完成新闻管理系统的页面静态化数据库表 ecs_article (新闻表)因为新闻这些信息,并不是对实时性要求高,本身这个新闻比较稳定,内容也比较固定,所以我们考虑: 当第 ...
- php页面静态化
如何优化页面响应时间: 动态页面静态化 优化数据库 使用负载均衡 使用缓存 如果页面中的一些内容不经常改动,可以使用动态页面静态化.好处是:减少服务器脚本的计算时间:降低服务器的响应时间. 1.动态U ...
- [转]PHP实现页面静态化的超简单方法
为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态 ...
- PHP实现HTML页面静态化
随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化.一般情况下会从以下方面 ...
- PHP实现页面静态化的简单方法分享
为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态 ...
- PHP 实现页面静态化
PHP文件执行阶段:语法分析->编译->运行 静态html文件执行顺序:运行 动态程序: 连接数据库服务器或者缓存服务器->获取数据->填充到模板->呈现给用户 关于优化 ...
随机推荐
- bootstrap-datepicker 与bootstrapValidator同时使用时,选择日期后,无法正常触发校验
bootstrap-datepicker 与bootstrapValidator同时使用时,选择日期后,无法正常触发校验 (解决办法) http://blog.csdn.net/biedazhangs ...
- Alien::BatToExeConverter 模块应用
## DOS 下批量任务转换成exe二进制可执行文件 Convert a DOS Batch Script to an Executable Alien::BatToExeConverter::ba ...
- MYSQL 问题小总结
mysql 问题小总结 1.MySQL远程连接ERROR 2003(HY000):Can't connect to MySQL server on ‘ip’(111)的问题 通常是mysql配置文件中 ...
- 手机PC文件传输
QQ啥的现在直接无法全部退出,很纠结后台运行,时不时的来条消息,明明电脑QQ还开着,越来越流氓了. 服务端代码: <%@ Page Language="C#" %> & ...
- if_elseif
用MATLAB写了个这样的程序 if ((0 < pwr <=2) ) wf_temp1 = round(temp_wf0/2^7); elseif( (2 < pwr<= 4 ...
- SPSS—回归—二元Logistic回归案例分析
数据分析真不是一门省油的灯,搞的人晕头转向,而且涉及到很多复杂的计算,还是书读少了,小学毕业的我,真是死了不少脑细胞, 学习二元Logistic回归有一段时间了,今天跟大家分享一下学习心得,希望多指教 ...
- 配置 cxf-ws spring bean 文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 关于React的入门级安装和最浅显解释
春节临近,办公室里半片空位,半片浮嚣. 想到将放假,屏幕上的代码也都变成了雀跃的小虫. 无法专心了. 终于还是强迫自己读了半篇文档,写了几坨程序. 这次记录的是关于React,最浅显的内容. ———— ...
- 20155320 2016-2017-2 《Java程序设计》第六周学习总结
20155320 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 输入输出 InputStream的read()方法每次都会尝试读入byte数组长度的数据,并 ...
- MFC 的SetWindowPos 用法
转自于:http://hi.baidu.com/max_new/blog/item/e2bbe607b1f127c57b8947c0.html 许多软件,特别是占桌面面积不是很大的软件,通常都提供了一 ...