设为首页 收藏本站
查看: 781|回复: 0

[经验分享] PHP生成静态HTML的技术原理

[复制链接]

尚未签到

发表于 2017-3-31 09:43:47 | 显示全部楼层 |阅读模式
  PHP页面的静态化很有必要,尤其是在CMS系统中,一些内容一旦生成,基本上不会有变化,这时如果用html将页面静态化,无疑会减少服务其解析PHP页面的负担。以下是看书学来的PHP静态化技术,记录之以备不时之需。

无论是利用框架还是简单的脚本,原理基本一致:就是利用PHP进行文件操作,替换html模板中的动态元素。
  用Replace函数即php的str_replace函数将模版文件中读取的内容中的关键字替换成变量中的内容,从而实现简单的模板分离。

  1.新增与回显
  insert.htm文件代码:在标题和内容框中分别输入:“这是标题”和“这是内容”

<html>
<head>
<title>添加一条新记录</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p><h1>添加一条新记录</h1></p>
<form name="form1" method="post" action="insert.php">
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>标题</td>
<td><input name="title" type="text" id="title"></td>
</tr>
<tr>
<td>内容</td>
<td><textarea name="body" cols="35" rows="5" id="body"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Submit">
<input type="reset" name="Submit2" value="Reset"></td>
</tr>
</table>
</form>
</body>
</html>
   模板文件template.htm: 


<html>
<head>
<title>%title%</title>
</head>
<body>
<H1>%title%</H1>
<hr>
<pre>%body%</pre>
</body>
</html>  
  php

<?php
//Replace函数用于将从模版文件中读取的内容中的关键字替换成变量中的内容
function Replace($row, $title='', $body='')
{
//替换参数中的关键字
$row   = str_replace("%title%", $title, $row);
$row   = str_replace("%body%", $body, $row);
//返回替换后的结果
return $row;
}
//主程序开始
@mysql_connect("localhost", "root","1981427")//选择数据库之前需要先连接数据库服务器
or die("数据库服务器连接失败");
@mysql_select_db("test")//选择数据库mydb
or die("数据库不存在或不可用");
//将表单中的数据通过$_POST方式获取然后存储在相应的变量中
$title = $_POST['title'];
$body = $_POST['body'];
//生成文件名
$filename = 'S'.date("YmdHis").'.htm';
//执行SQL语句
$query = mysql_query("insert into news values('$title', '$body', '$filename')");
//根据SQL执行语句返回的bool型变量判断是否插入成功
if($query)
{
//模版文件指针
$f_tem = fopen("template.htm","r");
//生成的文件指针
$f_new = fopen('new.htm',"w");
//$f_new = fopen($filename,"w");
//循环读取模版文件,每次读取一行
while(!feof($f_tem))
{
$row = fgets($f_tem);
$row = Replace($row, $title, $body);//替换读入内容中的关键字
fwrite($f_new, $row);//将替换后的内容写入生成的HTML文件
}
//关闭文件指针
fclose($f_new);
fclose($f_tem);
//提示
echo "数据插入成功";
}
else
echo "数据插入失败";
mysql_close();//关闭与数据库服务器的连接
?>

  生成新的html页:new.html

<html>
<head>
<title>文章标题</title>
</head>
<body>
<H1>文章标题</H1>
<hr>
<pre>这里是文章主体</pre>
</body>
</html>
  2.修改与回显edit.php

<?php
//主程序开始
@mysql_connect("localhost", "root","orbit")//选择数据库之前需要先连接数据库服务器
or die("数据库服务器连接失败");
@mysql_select_db("test")//选择数据库mydb
or die("数据库不存在或不可用");
$query = mysql_query("select * from news where title='这是标题'");
//根据SQL执行语句返回的bool型变量判断是否插入成功
$row = mysql_fetch_array($query);
?>
<html>
<head>
<title>修改一条新记录</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p><h1>修改一条新记录</h1></p>
<form name="form1" method="post" action="mdf_to_staitc.php">
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>标题</td>
<td><input name="title" type="text" id="title" value="<?php echo $row['title']?>"></td>
</tr>
<tr>
<td>内容</td>
<td><textarea name="body" cols="35" rows="5" id="body"><?php echo $row['body']?></textarea></td>
</tr>
<tr>
<input name="filename" type="hidden" value="<?php echo $row['filename']?>">
<td colspan="2"><input type="submit" name="Submit" value="Submit">
</tr>
</table>
</form>
</body>
</html>
  php


<?php
//Replace函数用于将从模版文件中读取的内容中的关键字替换成变量中的内容
function Replace($row, $title='', $body='')
{
//替换参数中的关键字
$row   = str_replace("%title%", $title, $row);
$row   = str_replace("%body%", $body, $row);
//返回替换后的结果
return $row;
}
//主程序开始
@mysql_connect("localhost", "root","orbit")//选择数据库之前需要先连接数据库服务器
or die("数据库服务器连接失败");
@mysql_select_db("test")//选择数据库mydb
or die("数据库不存在或不可用");
mysql_query("update news set title='".$_POST['title']."',body='".$_POST['body']."' where filename='".$_POST['filename']."' ");
$query = mysql_query("select * from news where filename='".$_POST['filename']."' ");
//根据SQL执行语句返回的bool型变量判断是否插入成功
while($record = mysql_fetch_array($query))
{
echo "<pre>";
print_r($record);
//模版文件指针
$f_tem = fopen("template.htm","r");
//生成的文件指针
$f_new = fopen($record['filename'],"w");
//循环读取模版文件,每次读取一行
while(!feof($f_tem))
{
$row = fgets($f_tem);
$row = Replace($row, $record['title'], $record['body']);//替换读入内容中的
fwrite($f_new, $row);//将替换后的内容写入生成的HTML文件
}
//关闭文件指针
fclose($f_new);
fclose($f_tem);
}
mysql_close();//关闭与数据库服务器的连接
?>
mysql_close();//关闭与数据库服务器的连接
?>
  3.一般的CMS都会记录内容被浏览的信息,例如浏览次数或者浏览者的IP信息等,静态页面要记录这些信息,可以在模板中加入一个长宽都为0的图片,指向计数脚本。
  以记录浏览次数为例:

<img width='0' height='0' src='counter.php?fileID=S001' />

这样,计数操作可以放到counter.php中进行,又不会破坏网页的静态性。
  <?php

$query = mysql_query("update counter set count+=1 where fileid='".$fileid."' ");

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-357967-1-1.html 上篇帖子: 浅谈PHP生成HTML的思路 下篇帖子: 确保PHP应用程序的安全[3]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表