大流量程序设计与实现--系列三
接上篇.....
二、完成一个简单的新闻管理系统-页面静态化(全站静态化)
1、使用ob缓存机制
1.1 表的结构
create table news(
id int unsigned primary key auto_increment,
title varchar(128) not null default '',//注意要写default,才更高效
content varchar(256) not null default '',
filename varchar(125) not null default '' //缓存数据存放文件
)engine=MyISAM charset utf8
1.2 newsList.php
//列出新闻列表
//这里,使用简单方式来操作
<?php
$con = mysql_connect("localhost", "root", "root");
if(!$con){
die("connect error");
}
mysql_select_db("database", $con);
$sql = "select * from news";
$res = mysql_query($sql, $con);
while($row = mysql_fetch_assoc($res)){
echo $row['id'].' : '.$row['title'].'\n';
}
//关闭资源(通常不需要手动释放,会被自动释放)
mysql_free_result($res);
//关闭连接(通常不需要手动关闭,因为是非持久的,会被自动释放)
mysql_close($con);
1.3 静态页面的文件名,有讲究
1.3.1 唯一性
1.3.2 利于seo
ob_start();
echo "<head><meta http-equiv='content-type' content='text/html;charset=utf8'";
echo "your contents";
$obContents = ob_get_contents();
file_put_contents("news-id-".$id.".html", $obContents);
1.3.3 //先判断需要的id的缓存文件是否存在
$html_file = 'news-id-'.$id.'.html';
if(file_exists($html_file)){
echo file_get_contents($html_file);
exit();
}
1.4 静态页面的变化
1.4.1 设置一分钟之内,自动从数据库更新
if(file_exsits($html_file) && filemtime($html_file)+60 >= time()){
}
1.4.2 每次更新文章,同时生成一下静态文件,模板替换技术
读入模板、正则表达式或者其它替换技术,把结果替换掉占位符
输出静态页面html
尽量不要用$_REQUEST来接收,因为有安全隐患,手册上有说明
能用单引号,就不要用双引号,前者效率更高。
view视图/界面层
controller控制层:接收数据,并调用相应的model完成任务,结果分配给view
model业务模型层
mvc里面的model模型层可再分为:
dao类(data access object数据访问对象db.class.php)
数据持久层(pdo 为了支持不同的数据库)
1.4.2.1 添加时候的静态化:insert.php
$sql = "insert into news values(null, '$title', '$contents', '')";
if(mysql_query($sql, $con)){
//生成静态文件
$id = mysql_insert_id();
$html_filename = 'news-id-'.$id.'.html';
$html_fp = fopen($html_filename, 'w');
//把模板文件读取进来
//file_get_contents();//但是读取大文件的时候,会出现读不全
//所以这里一行一行的读取
$fp = fopen('news.tpl', 'r');//千万注意打开方式w
while( !feof($fp) ){
//一行一行的读取
$row = fgets($fp);
//把占位符 替换掉。
$row = str_replace('%title%', $title, $row);
$row = str_replace('%content%', $content, $row);
fwrite($html_fp, $row);
}
//关闭文件,必须关闭,关闭顺序可以任意
fclose($html_fp);
fclose($fp);
echo "添加成功!点击查看";
}else{
die("添加失败");
}
1.4.3 直接删除相应的静态缓存文件
1.4.3.1 更新时候静态化
1.4.3.2 首页静态化,非常重要,因为访问量大
待发布......