首页 > 建站教程 > PHP教程 >  PHP简易实现批量生成html静态页面正文

PHP简易实现批量生成html静态页面

原理:PHP中str_replace替换函数的运用,

首先需要一个数据库,我叫他newsdata. 和一张表:(news) 具体如下图:



提一点,新闻内容和后面说到的html路径的类型设为了TEXT,在MySQL—Front中会显示MEMO,不影响调用,要查看内容点击下面会弹出一六进制编辑器即可查看内容



接着你可以创建一个connect.php用于连接数据库,好处是以后直接引用(require_once)就ok,也可以直接在php文件中进行书写



然后就是建模板文件(model.html),因为我们只需要调用数据,改想改的内容就ok,其他像什么导航啊,页脚啊,左边右边背景杂七杂八都不变。我就最简单的实现,(对头,懒遭了!)搞懂了当然可以扩展啊,写一个和我写的一样各种炫酷霸道的模板 [手动滑稽],要替换哪里,花括号一括起就开整。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{news_title}</title>
</head>
<body>
    新闻标题:{news_title}//调用
    新闻内容:{news_contents}//调用
</body>
</html>
顺带简单写一个发布表单(modelform.html),提交到马上要说,主要的add.php文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>modelform</title>
</head>
<body>
    <form method="post" action="add.php">
        新闻标题:<input type="text" name="news_title" id=""><br/>
        新闻内容:<textarea name="news_contents" cols="50" rows="10"></textarea><br/>
        <input type="submit" value="发布">
    </form>
</body>
</html>
接下来就是重点了 add.php
<?php
header("content-type:text/html;charset=utf-8");
//引用连接数据库文件
require_once("connect.php");

//获取表单数据
$title=$_POST["news_title"];
$content=$_POST["news_contents"];

//建一个txt,值自增,用作命名
$countFile="count.txt";

//文件不存在则创建
if (!file_exists($countFile)) {
    fopen($countFile,"wb");
}

$handle=fopen($countFile,"rb");
$num=fgets($handle,20);

//每次增加1
$num=$num+1;
fclose($handle);

//更新$num
$handle=fopen($countFile,"wb");
fwrite($handle,$num);
fclose($handle);

//获取html路径,可自定义
$extend=".html";
$path="news".$num.$extend;

//插入数据
$sql="INSERT news(news_title,news_contents,news_path) VALUES('".$title."','".$content."','".$path."');";
$conn->query($sql);

/**---开始替换---**/
//打开html模板
$handle=fopen("model.html","rb");

//读取模板内容
$str=fread($handle,filesize("model.html"));

//替换 str_replace("被替换的","替换成","在哪替换")
//为什么在$str里替换?因为上面我们才读取的模板内容,肯定在模板里换撒
$str=str_replace("{news_title}", $title, $str);
$str=str_replace("{news_contents}",$content,$str);
fclose($handle);

//把替换的内容写进生成的html文件
$handle=fopen($path,"wb");
fwrite($handle,$str);
fclose($handle);
OK!