利用PHP生成静态HTML页面的好处很多:

1.静态页面不需要Web服务器解释执行,用户打开网页的速度会快些;

2.打开静态页面时,Web服务器不需要访问数据库,减轻了对数据库访问的压力;

3.静态HTML页面对搜索引擎更加友好,使网站在搜索引擎中的排名能够上升。

原理:利用fopen()方法创建文本文件,再用fwrite()方法向文件中写入符合HTML格式的字符串。

因此,用户在后台添加一条新闻后,PHP程序一方面将这条新闻作为一条记录添加到数据库中;另一方面根据这条新闻创建一个静态的HTML页面。

创建HTML页面的过程:首先制作一个新闻页面的模板,然后将这条新闻的各个字段替换掉模板页中的标志内容。最后将替换后的模板页用fwrite()方法写入到创建的文件中。

1.数据库的设计

CREATE TABLE  `news` (
id INT PRIMARY KEY AUTO_INCREMENT ,
title VARCHAR( 30 ) ,
content TEXT,
author VARCHAR( 200 ) ,
TIME DATETIME,
bigclass VARCHAR( 200 ) ,
filepath VARCHAR( 100 )
) ENGINE = INNODB DEFAULT CHARSET = utf8

可以看出,与普通的news表相比,生成静态页面的新闻系统主要多了一个filepath字段,用于将生成的HTML文件的文件名和路径名保存到news表中,便于在新闻表页能建立到这些HTML文件的链接。

2.新闻模板页的制作

在数据库中再建一个表moban,用来保存模板页的HTML代码,之所以要将模板页的代码保存到数据库中,是为了方便能够通过新闻系统后台对模板页的代码进行修改,还能在MOBAN表中保存多个模板页,让用户从后台发布新闻时可以选择任意一套模板。

CREATE TABLE  `moban` (
id INT PRIMARY KEY AUTO_INCREMENT ,
html TEXT
) ENGINE = INNODB DEFAULT CHARSET = utf8

新闻添加页面的程序制作

1.制作新闻添加的前台页面addnews.php

<?php
/** * @Authors peng--jun * @Email   1098325951@qq.com* @Date    2015-11-11 13:24:24* @Link    http://www.cnblogs.com/xs-yqz/* @version $Id$==========================================*/header("Content-type: text/html; charset=UTF-8"); ?>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>添加页面</title>
</head>
<body><h2 align="center">添加新闻页面</h2><form action="add.php" method="post"><table><tr><td width="125">新闻标题:</td><td width="475"><input type="text" name="title"></td></tr><tr><td width="125">发布者:</td><td width="475"><input type="text" name="author"></td></tr><tr><td width="125">所属栏目:</td><td width="475"><input type="text" name="lanmu"></td></tr><tr><td width="125">新闻内容:</td><td width="475"><textarea name="content" id="" cols="30" rows="3"></textarea></td></tr><tr><td width="125"></td><td width="475"><input type="submit" name="submit" value="提交"></td></tr></table></form>
</body>
</html>

2.保存新闻到news表的程序(add.php)

<?php
/** * @Authors peng--jun * @Email   1098325951@qq.com* @Date    2015-11-11 13:30:53* @Link    http://www.cnblogs.com/xs-yqz/* @version $Id$==========================================*/header("Content-type: text/html; charset=UTF-8"); require("include/conn.php");$title=$_POST["title"];$author = $_POST["author"];$lanmu = $_POST["lanmu"];$content = $_POST["content"];date_default_timezone_set('PRC');$time = date("Y-m-d H:i:s");//创建存放当天静态HTML文件$root = $_SERVER['DOCUMENT_ROOT'];$foldername = date("Y-m-d");$folderpath = "list/".$foldername;//目录形式2015-11-11if(!file_exists($folderpath))         //如果该目录不存在mkdir($folderpath);//创建该目录//用时间创建HTML文件的文件名$filename = date("H-i-s").".html";$filepath = $folderpath."/".$filename;if (!file_exists($filepath)) {//从模板中读取模板代码$sql = "select html from moban where id = 1";$rs = mysql_query($sql,$conn)or die("执行错误".mysql_error());$rows = mysql_fetch_row($rs);$moban = $rows[0];  //将模板页代码保存到$moban//替换模板页中相应的标识符$moban = str_replace("-lanmu-", $lanmu, $moban);$moban = str_replace("-title-", $title, $moban);$moban = str_replace("-time-", $time, $moban);$moban = str_replace("-content-", $content, $moban);$moban = str_replace("-author-", $author, $moban);$fp = fopen($filepath, "w");fwrite($fp, $moban);//将替换好的内容写入发到文件中
        fclose($fp);$filepath = $foldername."/".$filename;//保存生成的HTML文件的路径
$sql = "insert into news(bigclass,title,content,filepath,author,time)values('$lanmu','$title','$content','$filepath','$author','$time')";if (mysql_query($sql)) {echo "插入成功";}else{echo "<script>alert('添加失败');location.href='addnews.php';</script>";}}
?>

3.新闻管理后台系统admin.php

<?php
/** * @Authors peng--jun * @Email   1098325951@qq.com* @Date    2015-11-11 15:13:39* @Link    http://www.cnblogs.com/xs-yqz/* @version $Id$==========================================*/header("Content-type: text/html; charset=UTF-8"); require("include/conn.php");$sql = "select * from news order by id desc";$rs = mysql_query($sql,$conn)or die("数据库操作失败".mysql_errno());?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>新闻后台管理系统</title></head><body><h2 align="center">新闻后台管理系统</h2><p align="right"><a href="addnews.php">添加新闻</a></p><table border="1"><thead><tr><th>ID</th><th>新闻标题</th><th>发布者</th><th>发布时间</th><th>操作</th></tr></thead><tbody><?phpwhile ( $rows = mysql_fetch_assoc($rs)) {?><tr><td rowspan="2"><?= $rows['id']?></td><td><a href="list/<?= $rows['filepath']?>"><?= $rows['title']?></a></td><td><?= $rows['author']?></td><td><?= $rows['time']?></td><td rowspan="2"><a href="editnews.php?id=<?= $rows['id']?>">编辑</a><a href="del.php?id=<?= $rows['id']?>">删除</a>    </td></tr><tr><td colspan="3" align="center">内容:<?= $rows['content']?></td></tr><?php         }?></tbody></table></body></html>

该程序每条新闻的标题都是连接到生成的静态HTML文件的URL上($row['filepath']保存了静态文件的URL地址),这样用户才能通过链接打开这些HTML文件。

4.新闻修改页面的制作

(1)获取admin.php页传过来的ID值,根据ID读取原来的记录,显示在该页的表单中供用户修改。

(2)当用户提交修改页面之后,使用用户提交的信息更新news表中对应的记录。

(3)使用用户提交的信息替换模板页中的相应字符,再重新生成同名的HTML文件。

<?php
/** * @Authors peng--jun * @Email   1098325951@qq.com* @Date    2015-11-11 15:54:50* @Link    http://www.cnblogs.com/xs-yqz/* @version $Id$==========================================*/header("Content-type: text/html; charset=UTF-8"); require("include/conn.php");$id = $_GET["id"];//获取当前文件的idif ($_POST["submit"]) {$title=$_POST["title"];$author = $_POST["author"];$lanmu = $_POST["lanmu"];$content = $_POST["content"];$path = $_POST['path'];$time = $_POST["time"];//创建存放当天静态HTML文件$root = $_SERVER['DOCUMENT_ROOT'];$filepath = "list/$path";if (file_exists($filepath)) {//从模板中读取模板代码$sql = "select html from moban where id = 1";$rs = mysql_query($sql,$conn)or die("执行错误".mysql_error());$rows = mysql_fetch_row($rs);$moban = $rows[0];  //将模板页代码保存到$moban//替换模板页中相应的标识符
        echo $moban;$moban = str_replace("-lanmu-", $lanmu, $moban);$moban = str_replace("-title-", $title, $moban);$moban = str_replace("-time-", $time, $moban);$moban = str_replace("-content-", $content, $moban);$moban = str_replace("-author-", $author, $moban);$fp = fopen($filepath, "w");fwrite($fp, $moban);//将替换好的内容写入发到文件中
        fclose($fp);$sql = "update `news` set bigclass = '$lanmu',title = '$title',content ='$content' ,author = '$author' where id = $id";if (mysql_query($sql)) {echo "<script>alert('修改成功');location.href='admin.php'</script>";}else{echo "<script>alert('修改失败');location.href='addnews.php';</script>";}}}$sql = "select * from news where id = $id";$result = mysql_query($sql)or die("操作数据库失败".mysql_errno());$rows = mysql_fetch_assoc($result);?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>新闻修改页面</title></head><body><h3>新闻修改页面</h3><form action="?id=<?= $rows['id']?>" method="post"><table><tr><td width="125">新闻标题:</td><td width="475"><input type="text" name="title" value="<?= $rows['title']?>"></td></tr><tr><td width="125">发布者:</td><td width="475"><input type="text" name="author" value="<?= $rows['author']?>"></td></tr><tr><td width="125">所属栏目:</td><td width="475"><input type="text" name="lanmu" value="<?= $rows['lanmu']?>"></td></tr><tr><td width="125">新闻内容:</td><td width="475"><textarea name="content" id="" cols="30" rows="3"><?= $rows['content']?></textarea></td></tr><tr><td> <input type="hidden" name="time" value="<?= $rows['time']?>"> </td><td> <input type="hidden" name="path" value="<?= $rows['filepath']?>"> </td></tr><tr><td width="125"></td><td width="475"><input type="submit" name="submit" value="提交"></td></tr></table></form></body></html>

5.页面的删除系统del.php

该页面的删除也分为两个部分,其一是将这条新闻的记录从news表中删除;其二是删除该新闻对应的静态HTML文件,这是必要的,否则浏览者还可以通过直接输入html文件的URL访问到该新闻页面。

<?php
/** * @Authors peng--jun * @Email   1098325951@qq.com* @Date    2015-11-11 16:41:58* @Link    http://www.cnblogs.com/xs-yqz/* @version $Id$==========================================*/header("Content-type: text/html; charset=UTF-8"); require("include/conn.php");
$id=$_GET["id"];$sql="select * from news where id=$id";$rs=mysql_query($sql);$rows=mysql_fetch_assoc($rs);$path=$rows["filepath"];    //找到待删除新闻对应的静态html文件的url$root=$_SERVER['DOCUMENT_ROOT'];$filepath="list/".$path;if(file_exists($filepath))unlink($filepath);    //删除静态html文件
    $path=substr($path,0,10);    //找到为存放静态html文件而创建的目录$folderpath="list/$path";$folder=opendir($folderpath);    //打开该目录$n=0;while($f=readdir($folder))    {if($f<>"."&&$f<>"..")    //如果目录中还有其他文件$n++;}closedir();if($n==0)    //目录中已经没有任何文件rmdir($folderpath);    //删除该目录$sql="delete from news where id=$id";    //删除数据表中的记录if(mysql_query($sql))echo "<script language=javascript>alert('删除成功!');window.location='admin.php'</script>";elseecho "<script language=javascript>alert('操作错误!');window.location='admin.php'</script>";
?>

转载于:https://www.cnblogs.com/xs-yqz/p/4951214.html

制作生成静态页面的新闻系统相关推荐

  1. 生成静态文件的新闻系统核心代码

    在网上看了许多能生成静态页的新闻系统,但基于asp.net的系统极少,闲下时间来自己写了一个,发出来,大家一起研究,代码没做什么优化,只是实现了功能 using System; using Syste ...

  2. ASP新闻分页,将一篇过长的文章分页,生成静态页面

    老话题,新问题:新闻分页,将一篇过长的文章分页,生成静态页面. 问题来源于制作大型新闻文章管理系统,往往碰到文章超长的情况. 现在将他们生成静态页面没有什么问题,但是如何将它们按照某种规则,生成编号为 ...

  3. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程

    1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...

  4. php生成静态页面并预览

    一.前言 最近要找房子搬家,作为一名青漂,每年换房子都要成为习惯了,不过还好,偌大的城市还能容得下身体和灵魂. 这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但 ...

  5. php读取模板生成静态功能,php 生成静态页面的办法与实现代码详细版

    php中主要用到的就是要用到fread()和fwirte().而静态页面生成了之后,就会牵扯到修改的问题.这里可以用到正则匹配的方法来替换模版中改变的部位.不过此种方法太麻烦,值得推荐的方法是直接把原 ...

  6. Asp.NET生成静态页面并分页

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ...

  7. 网站生成静态页面,及网站数据采集的攻、防原理和策略

    关于本文:         本着互联网共享主义精神,特写此文献给建站新手,授人以鱼,不如授人以渔,本文所讲的只是方法和原理,希望大家看完此文,能够从中得到些帮助和启发. 本文从一个ASP程序员的角度用 ...

  8. .NET生成静态页面并分页

    转自:http://blog.csdn.net/zdyguilong/archive/2007/05/24/1624491.aspx 因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页 ...

  9. 织梦手机站 html 插件,织梦DEDECMS手机端生成静态页面插件完整版

    织梦DEDECMS手机端生成静态页面插件完整版[已解决] 实现手机端(wap版)静态生成 一.添加后台导航栏目链接 1 打开dede/inc/inc_menu.php,在146行下面添加代码: 二.更 ...

最新文章

  1. 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )
  2. mysql 酒店管理设计_酒店管理系统的设计与实现(Myeclipse,MySQL)
  3. 最大上升子序列和(信息学奥赛一本通-T1285)
  4. android大智慧安装目录,大智慧新一代目录文件结构
  5. feign扫描_微服务通信之feign的注册、发现过程
  6. 一个页面上多个form表单的用json数据格式提交到后台
  7. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
  8. H3C防火墙——回环流量问题(内网终端通过外网IP访问内部服务器)
  9. 【记录】帮同学做的一个函数拟合
  10. 修改判断名字重复,保证名字唯一
  11. 系统集成(IBMS)软件的功能
  12. 树莓派python编程自学-基于树莓派的python GPIO编程-常用函数综合整理
  13. proto_path passed empty directory name. (Use “.“ for current directory.)
  14. Error starting Tomcat context. Exception
  15. 驰为 hi12 linux,PC商务体验 Intel四核平板驰为Hi12评测
  16. 微信小程序 录像 录视频
  17. 如何盘活新零售5大线上线下交互模式?拥抱用户与收益增长
  18. 采集存储板第218篇:基于5VFX70T的3U VPX 光纤数据采集存储板
  19. javaweb_(杨)
  20. 田纳西大学计算机科学,田纳西大学电气工程与计算机科学

热门文章

  1. python爬虫超时重试_Python爬虫实例(三):错误重试,超时处理
  2. matlab 极坐标作图polar
  3. 【 FPGA 】设置多周期路径约束
  4. WPF中的动画——(二)From/To/By 动画
  5. 使用Tensorflow操作MNIST数据
  6. 关于jquery动态改变css样式后,对象获取不到的解决办法
  7. windows下命令行启动tomcat
  8. VS2012经常使用的快捷方式完成最全面
  9. 【总结+计划】2015一月份总结+2015二月份计划——全栈实践
  10. きゃらコレ! -ALICESOFT- 汉化补丁