您的位置:首页 > 其它

四,真静态技术实现页面静态化

2016-08-05 17:07 411 查看
真静态技术就是在添加新闻时候产生一个html静态文件,等再次修改新闻时候,再重新产生html静态文件,这样保证html静态文件和数据表内容完全一致。

实例如下:

(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 getInsertId(){
return $this->conn->insert_id;
}

public function clossDB(){
if($this->conn){
$this->conn->close();
}
}
}


(2)产生文件名字代码页getHtmlName.php

<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/9
* Time: 21:29
*/

function getHtmlName($id){
return "news_id".$id.".html";
}


(3)显示新闻列表页面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 "getHtmlName.php";
require_once "ConnDB.class.php";
$conn = new ConnDB();
$sql = "select * from news";
$rs = $conn->execute_dql($sql);
$conn->clossDB();
echo "
<a href='add_news.php'>发布文章</a>
<table border='1'>
<tr><th>id</th><th>标题</th><th>详细内容</th><th>修改</th></tr>";

foreach($rs as $row){
$url = getHtmlName($row['id']);
echo "<tr><td>{$row['id']}</td><td>{$row['title']}</td><td><a href= {$url}>详细内容</a></td><td><a href= update_news.php?id={$row['id']}>修改</a></td></tr>";
}
echo "
</table>
";


(4)添加新闻的页面 add_news.php

<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/5
* Time: 15:34
*/
?>
<center>发布新闻</center>
<form method="post" action="newsAction.php">
<table>
<tr><th>新闻标题:</th><td><input type="text" name="title"></td></tr>
<tr><th>新闻内容:</th><td><input type="text" name="content"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="发布"></td></tr>
</table>
<input type="hidden" name="opt" value="add">
</form>


(5)修改新闻的代码页 update_news.php

<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/9
* Time: 21:48
*/
require_once "ConnDB.class.php";

$id = $_GET['id'];
$conn = new ConnDB();
$rs = $conn->execute_dql("select * from news where id = {$id}");
$conn->clossDB();
if($rs && $row = $rs[0]){
?>
<form action="newsAction.php" method="post">
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="hidden" name="opt" value="up">
标题:<input type="text" name="title" value="<?=$row['title']?>"><br/>
内容:<input type="text" name="content" value="<?=$row['content']?>"><br/>
<input type="submit" value="修改" />
</form>
<?php } ?>


(6)处理添加或修改函数代码页:newsAction.php

<?php
/**
* Created by PhpStorm.
* User: 58
* Date: 2016/8/5
* Time: 15:37
*/
require_once "ConnDB.class.php";
require_once "getHtmlName.php";
$conn = new ConnDB();
$opt = $_POST['opt'];
$title = $_POST['title'];
$content = $_POST['content'];
if($opt == 'add'){
$sql = "insert into news(title,content) VALUES ('{$title}','{$content}')";
$rs = $conn->execute_dml($sql);
$id = $conn->getInsertId();
}else if($opt == 'up'){
$id = $_POST['id'];
$sql = "update news set title='{$title}',content='{$content}' where id = '{$id}'";
$rs = $conn->execute_dml($sql);
}
$conn->clossDB();
if(!$id){
exit();
}
$file_name  = getHtmlName($id);

if(!$rs){
echo '执行失败!';
exit();
}else if($rs == 1){
echo '执行成功!';
}else{
echo '执行成功,但是没有行改变!';
}
$fp_tmp = fopen("template.tpl","r");
$fp_html_file = fopen($file_name,"w");
while(!feof($fp_tmp)){
$row = fgets($fp_tmp);
$row = str_replace("%title%",$title,$row);
$row = str_replace("%content%",$content,$row);
fwrite($fp_html_file,$row);
}
fclose($fp_tmp);
fclose($fp_html_file);


(7)生成静态文件的模板template.tpl

<html>
<head>
<meta http-equiv="content-type=text/html;charset=utf-8"/>
<title>%title%</title>
</head>
<body>
<h1>%title%</h1>
<hr/>
<pre>%content%</pre>
</body>
</html>


真静态技术解决了php缓存机制的缺陷,它的优点有三个:

(1)减少服务器对数响应的负荷;

(2)加载不用调动数据库,响应速度快;

(3)便于优化引擎。

但是真静态技术也存在一定缺陷。比如:

(1)空间占用比较大;

(2)生成的文件多了,服务器对html文件的响应负担也比较重。

一个系统使用真静态进行页面静态化,需要生成海量页面静态文件,可以考虑使用伪静态来处理。可以继续优化:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: