使用php 的緩衝區功能和apache的url重寫功能實現靜態html生成實例
使用Mysql5.0 +php5.0+ apache2.2(開啓url重寫模塊:去掉apache配置文件中LoadModule rewrite_module modules/mod_rewrite.so 前面的#號後重起服務器即可。)
數據庫articles的表:
create table article
(
article_id int not null auto_increment,
article_title varchar(200),
article_author varchar(100),
article_datecreate datetime,
article_content text,
article_postip varchar(15),
article_filepath varchar(500),
primary key (article_id)
);
網站目錄結構(/表示網站根目錄):
/Article.php
/Articlelist.php
/Createarticle.php
/Article/.htaccess
各文件的內容:
Article.php (用於創建文章,使用fckeditor進行文章編輯)代碼如下:
<?php
if(isset($_POST['submit']))
{
$title = $_POST['title'];
$author = $_POST['author'];
$articlecontent = $_POST['FCKeditor1'];
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("YmdHis");
$filename = '/article/' . $date . '.html';
//
$mysqli = @new mysqli('localhost','root','','articles');
if(mysqli_connect_errno()){
echo "數據庫連接失敗!";
EXIT;
}
$mysqli -> set_charset("utf8");
$query = "insert into article
(article_title,article_author,article_datecreate,article_content,article_postip,article_filepath)
values('$title','$author','$date','$articlecontent','$ip','$filename')";
$mysqli -> query($query);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>添加文章</title>
</head>
<body>
<form method="post">
<div>
<p>標題:<input name="title" type="text" /></p>
<p>作者:<input name="author" type="text" /></p>
<p>
<?php
include("./fckeditor/fckeditor.php") ;
$sBasePath = "./fckeditor/";
$oFCKeditor = new FCKeditor('FCKeditor1') ;
$oFCKeditor->BasePath = $sBasePath ;
$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?> </p>
<p><input name="submit" type="submit" value="提交" /></p>
</div>
</form>
</body>
</html>
Articlelist.php (文章列表)代碼如下:
<?php
$mysqli = @new mysqli('localhost','root','','articles');
if(mysqli_connect_errno()){
echo "數據庫連接失敗!";
EXIT;
}
$query = 'select article_title,article_filepath from article order by article_id asc';
$mysqli -> set_charset("utf8");
$res = $mysqli -> query($query);
$articlelist = "";
if($res -> num_rows > 0){
for($i = 0 ; $i < $res -> num_rows ; $i++){
$row = $res -> fetch_array(MYSQLI_ASSOC);
$title = $row['article_title'];
$filepath = $row['article_filepath'];
$articlelist .= "<a href=/"".$filepath."/">$title</a><br>";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文章列表</title>
</head>
<body>
<?php
echo $articlelist;
?>
</body>
</html>
Createarticle.php(生成靜態html,生成的靜態html文件在article目錄中)代碼如下:
<?php
ob_start();
$title = "錯誤";
$articlebody = "網頁不存在,可能已被管理員刪除!!!!";
if(isset($_GET['id'])){
$mysqli = @new mysqli('localhost','root','','articles');
if(mysqli_connect_errno()){
echo "數據庫連接失敗!";
EXIT;
}
$mysqli -> set_charset("utf8");
$filename = "/article/".$_GET['id'].".html";
$query = "select * from article where article_filepath='".$filename."'";
$res = $mysqli -> query($query);
if($res -> num_rows > 0)
{
$row = $res -> fetch_array(MYSQLI_ASSOC);
$title = $row['article_title'];
$articlebody = $row['article_content'];
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $title ?></title>
</head>
<body>
<p><?php echo $articlebody; ?></p>
<p></p>
</body>
</html>
<?php
if($res -> num_rows > 0){
$info = ob_get_contents(); //得到緩衝區的內容並且賦值給$info
$file = fopen(".".$filename,'w'); //打開文件info.txt
fwrite($file,$info); //寫入信息到info.txt
fclose($file); //關閉文件info.txt
}
ob_end_flush();//輸出全部內容到瀏覽器
?>
.htaccess(在article目錄下,用於實現url重寫)代碼如下:
rewriteengine on
rewritebase /
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^([0-9]*)/.html createarticle.php?id=$1 [T]
說明:從程序可以看出,文章的第一次請求其實不是真正的html文件,實際上是動態文件createarticle.php文件的執行結果,之後便生成了html文件。