使用php 的缓冲区功能和apache的url重写功能实现静态html生成实例

 

使用 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文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值