您的位置:首页 > 运维架构 > Apache

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

2010-08-03 10:37 1181 查看
使用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文件。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/alin0725/archive/2007/07/26/1709619.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: