使用php 的緩衝區功能和apache的url重寫功能實現靜態html生成實例

 

使用php 的緩衝區功能和apacheurl重寫功能實現靜態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文件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章