制作生成静态页面的新闻系统
利用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
制作生成静态页面的新闻系统相关推荐
- 生成静态文件的新闻系统核心代码
在网上看了许多能生成静态页的新闻系统,但基于asp.net的系统极少,闲下时间来自己写了一个,发出来,大家一起研究,代码没做什么优化,只是实现了功能 using System; using Syste ...
- ASP新闻分页,将一篇过长的文章分页,生成静态页面
老话题,新问题:新闻分页,将一篇过长的文章分页,生成静态页面. 问题来源于制作大型新闻文章管理系统,往往碰到文章超长的情况. 现在将他们生成静态页面没有什么问题,但是如何将它们按照某种规则,生成编号为 ...
- PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...
- php生成静态页面并预览
一.前言 最近要找房子搬家,作为一名青漂,每年换房子都要成为习惯了,不过还好,偌大的城市还能容得下身体和灵魂. 这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但 ...
- php读取模板生成静态功能,php 生成静态页面的办法与实现代码详细版
php中主要用到的就是要用到fread()和fwirte().而静态页面生成了之后,就会牵扯到修改的问题.这里可以用到正则匹配的方法来替换模版中改变的部位.不过此种方法太麻烦,值得推荐的方法是直接把原 ...
- Asp.NET生成静态页面并分页
因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ...
- 网站生成静态页面,及网站数据采集的攻、防原理和策略
关于本文: 本着互联网共享主义精神,特写此文献给建站新手,授人以鱼,不如授人以渔,本文所讲的只是方法和原理,希望大家看完此文,能够从中得到些帮助和启发. 本文从一个ASP程序员的角度用 ...
- .NET生成静态页面并分页
转自:http://blog.csdn.net/zdyguilong/archive/2007/05/24/1624491.aspx 因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页 ...
- 织梦手机站 html 插件,织梦DEDECMS手机端生成静态页面插件完整版
织梦DEDECMS手机端生成静态页面插件完整版[已解决] 实现手机端(wap版)静态生成 一.添加后台导航栏目链接 1 打开dede/inc/inc_menu.php,在146行下面添加代码: 二.更 ...
最新文章
- 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )
- mysql 酒店管理设计_酒店管理系统的设计与实现(Myeclipse,MySQL)
- 最大上升子序列和(信息学奥赛一本通-T1285)
- android大智慧安装目录,大智慧新一代目录文件结构
- feign扫描_微服务通信之feign的注册、发现过程
- 一个页面上多个form表单的用json数据格式提交到后台
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
- H3C防火墙——回环流量问题(内网终端通过外网IP访问内部服务器)
- 【记录】帮同学做的一个函数拟合
- 修改判断名字重复,保证名字唯一
- 系统集成(IBMS)软件的功能
- 树莓派python编程自学-基于树莓派的python GPIO编程-常用函数综合整理
- proto_path passed empty directory name. (Use “.“ for current directory.)
- Error starting Tomcat context. Exception
- 驰为 hi12 linux,PC商务体验 Intel四核平板驰为Hi12评测
- 微信小程序 录像 录视频
- 如何盘活新零售5大线上线下交互模式?拥抱用户与收益增长
- 采集存储板第218篇:基于5VFX70T的3U VPX 光纤数据采集存储板
- javaweb_(杨)
- 田纳西大学计算机科学,田纳西大学电气工程与计算机科学