PHP生成静态HTML的技术原理

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

PHP页面的静态化很有必要,尤其是在CMS系统中,一些内容一旦生成,基本上不会有变化,这时如果用html将页面静态化,无疑会减少服务其解析PHP页面的负担。以下是看书学来的PHP静态化技术,记录之以备不时之需。
无论是利用框架还是简单的脚本,原理基本一致:就是利用PHP进行文件操作,替换html模板中的动态元素。

用Replace函数即php的str_replace函数将模版文件中读取的内容中的关键字替换成变量中的内容,从而实现简单的模板分离。

1.新增与回显

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

Java代码   收藏代码
  1. <html>  
  2. <head>  
  3. <title>添加一条新记录</title>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  5. </head>  
  6.   
  7. <body>  
  8.  <p><h1>添加一条新记录</h1></p>  
  9.  <form name="form1" method="post" action="insert.php">  
  10.    <table width="500" border="0" cellspacing="0" cellpadding="0">  
  11.      <tr>  
  12.        <td>标题</td>  
  13.        <td><input name="title" type="text" id="title"></td>  
  14.      </tr>  
  15.      <tr>  
  16.        <td>内容</td>  
  17.        <td><textarea name="body" cols="35" rows="5" id="body"></textarea></td>  
  18.      </tr>  
  19.      <tr>  
  20.        <td colspan="2"><input type="submit" name="Submit" value="Submit">  
  21.        <input type="reset" name="Submit2" value="Reset"></td>  
  22.      </tr>  
  23.    </table>  
  24. </form>  
  25. </body>  
  26. </html>  
 

模板文件template.htm: 

Java代码   收藏代码
  1. <html>   
  2. <head>   
  3. <title>%title%</title>   
  4. </head>   
  5. <body>   
  6. <H1>%title%</H1>   
  7. <hr>   
  8. <pre>%body%</pre>   
  9. </body>   
  10. </html>    

 php

Java代码   收藏代码
  1. <?php  
  2. //Replace函数用于将从模版文件中读取的内容中的关键字替换成变量中的内容  
  3. function Replace($row, $title='', $body='')  
  4. {  
  5.     //替换参数中的关键字  
  6.     $row   = str_replace("%title%", $title, $row);  
  7.     $row   = str_replace("%body%", $body, $row);  
  8.     //返回替换后的结果  
  9.     return $row;  
  10. }  
  11. //主程序开始  
  12. @mysql_connect("localhost""root","1981427")               //选择数据库之前需要先连接数据库服务器  
  13. or die("数据库服务器连接失败");  
  14. @mysql_select_db("test")                    //选择数据库mydb  
  15. or die("数据库不存在或不可用");  
  16. //将表单中的数据通过$_POST方式获取然后存储在相应的变量中  
  17. $title = $_POST['title'];  
  18. $body = $_POST['body'];  
  19.   
  20. //生成文件名  
  21. $filename = 'S'.date("YmdHis").'.htm';  
  22. //执行SQL语句  
  23. $query = mysql_query("insert into news values('$title', '$body', '$filename')");  
  24. //根据SQL执行语句返回的bool型变量判断是否插入成功  
  25. if($query)  
  26. {  
  27.     //模版文件指针  
  28.     $f_tem = fopen("template.htm","r");  
  29.     //生成的文件指针  
  30.     $f_new = fopen('new.htm',"w");  
  31.     //$f_new = fopen($filename,"w");  
  32.     //循环读取模版文件,每次读取一行  
  33.     while(!feof($f_tem))   
  34.     {  
  35.         $row = fgets($f_tem);  
  36.         $row = Replace($row, $title, $body);            //替换读入内容中的关键字  
  37.         fwrite($f_new, $row);           //将替换后的内容写入生成的HTML文件  
  38.     }  
  39.     //关闭文件指针  
  40.     fclose($f_new);  
  41.     fclose($f_tem);  
  42.     //提示  
  43.   echo "数据插入成功";  
  44. }  
  45. else  
  46.     echo "数据插入失败";  
  47. mysql_close();                                  //关闭与数据库服务器的连接  
  48. ?>  

 生成新的html页:new.html

Java代码   收藏代码
  1. <html>   
  2. <head>   
  3. <title>文章标题</title>   
  4. </head>   
  5. <body>   
  6. <H1>文章标题</H1>   
  7. <hr>   
  8. <pre>这里是文章主体</pre>   
  9. </body>   
  10. </html>   

2.修改与回显edit.php

Java代码   收藏代码
  1. <?php  
  2. //主程序开始  
  3. @mysql_connect("localhost""root","orbit")             //选择数据库之前需要先连接数据库服务器  
  4. or die("数据库服务器连接失败");  
  5. @mysql_select_db("test")                    //选择数据库mydb  
  6. or die("数据库不存在或不可用");  
  7. $query = mysql_query("select * from news where title='这是标题'");  
  8. //根据SQL执行语句返回的bool型变量判断是否插入成功  
  9. $row = mysql_fetch_array($query);  
  10. ?>  
  11. <html>  
  12. <head>  
  13. <title>修改一条新记录</title>  
  14. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  15. </head>  
  16.   
  17. <body>  
  18.  <p><h1>修改一条新记录</h1></p>  
  19.  <form name="form1" method="post" action="mdf_to_staitc.php">  
  20.    <table width="500" border="0" cellspacing="0" cellpadding="0">  
  21.      <tr>  
  22.        <td>标题</td>  
  23.        <td><input name="title" type="text" id="title" value="<?php echo $row['title']?>"></td>  
  24.      </tr>  
  25.      <tr>  
  26.        <td>内容</td>  
  27.        <td><textarea name="body" cols="35" rows="5" id="body"><?php echo $row['body']?></textarea></td>  
  28.      </tr>  
  29.      <tr>  
  30.      <input name="filename" type="hidden" value="<?php echo $row['filename']?>">  
  31.        <td colspan="2"><input type="submit" name="Submit" value="Submit">  
  32.      </tr>  
  33.    </table>  
  34. </form>  
  35. </body>  
  36. </html>  

php

Java代码   收藏代码
  1. <?php  
  2. //Replace函数用于将从模版文件中读取的内容中的关键字替换成变量中的内容  
  3. function Replace($row, $title='', $body='')  
  4. {  
  5.     //替换参数中的关键字  
  6.     $row   = str_replace("%title%", $title, $row);  
  7.     $row   = str_replace("%body%", $body, $row);  
  8.     //返回替换后的结果  
  9.     return $row;  
  10. }  
  11. //主程序开始  
  12. @mysql_connect("localhost""root","orbit")             //选择数据库之前需要先连接数据库服务器  
  13. or die("数据库服务器连接失败");  
  14. @mysql_select_db("test")                    //选择数据库mydb  
  15. or die("数据库不存在或不可用");  
  16.   
  17. mysql_query("update news set title='".$_POST['title']."',body='".$_POST['body']."' where filename='".$_POST['filename']."' ");  
  18. $query = mysql_query("select * from news where filename='".$_POST['filename']."' ");  
  19. //根据SQL执行语句返回的bool型变量判断是否插入成功  
  20. while($record = mysql_fetch_array($query))  
  21. {  
  22.     echo "<pre>";  
  23.     print_r($record);  
  24.     //模版文件指针  
  25.     $f_tem = fopen("template.htm","r");  
  26.     //生成的文件指针  
  27.     $f_new = fopen($record['filename'],"w");  
  28.     //循环读取模版文件,每次读取一行  
  29.     while(!feof($f_tem))   
  30.     {  
  31.         $row = fgets($f_tem);  
  32.         $row = Replace($row, $record['title'], $record['body']);    //替换读入内容中的  
  33.         fwrite($f_new, $row);           //将替换后的内容写入生成的HTML文件  
  34.     }  
  35.     //关闭文件指针  
  36.     fclose($f_new);  
  37.     fclose($f_tem);  
  38. }  
  39. mysql_close();                                  //关闭与数据库服务器的连接  
  40. ?>  
  41.   
  42. mysql_close();                                  //关闭与数据库服务器的连接  
  43. ?>  

3.一般的CMS都会记录内容被浏览的信息,例如浏览次数或者浏览者的IP信息等,静态页面要记录这些信息,可以在模板中加入一个长宽都为0的图片,指向计数脚本。

以记录浏览次数为例:
<img width='0' height='0' src='counter.php?fileID=S001' />
这样,计数操作可以放到counter.php中进行,又不会破坏网页的静态性。

<?php

Java代码   收藏代码
  1. $query = mysql_query("update counter set count+=1 where fileid='".$fileid."' ");  
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
12天前
|
移动开发 HTML5
唯美首页纯静态html源码
唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码
11 0
唯美首页纯静态html源码
|
1月前
|
数据采集 存储 JavaScript
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
本文旨在介绍如何利用PHP中的simple_html_dom库结合爬虫代理IP技术来高效采集和分析汽车之家网站的电动车参数。通过实际示例和详细说明,读者将了解如何实现数据分析和爬虫技术的结合应用,从而更好地理解和应用相关技术。
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
|
3月前
|
Shell PHP
php案例:截取sy.66969.cn/sh.html中的sh怎么做?
php案例:截取sy.66969.cn/sh.html中的sh怎么做?
php案例:截取sy.66969.cn/sh.html中的sh怎么做?
|
3月前
|
存储 移动开发 前端开发
(2)需要的html典例以及PHP基础
(2)需要的html典例以及PHP基础
34 0
(2)需要的html典例以及PHP基础
|
4月前
|
数据采集 监控 JavaScript
巧用简单工具:PHP使用simple_html_dom库助你轻松爬取JD.com
本文将介绍如何使用PHP语言和一个简单的第三方库simple_html_dom来爬取JD.com的商品信息。simple_html_dom是一个轻量级的HTML解析器,它可以方便地从HTML文档中提取元素和属性,而无需使用正则表达式或DOM操作。本文将通过一个实例来展示如何使用simple_html_dom库来爬取JD.com的商品名称、价格、评分和评论数,并将结果保存到CSV文件中。本文还将介绍如何使用代理IP技术来避免被目标网站封禁或限制。
巧用简单工具:PHP使用simple_html_dom库助你轻松爬取JD.com
|
4月前
|
PHP
【PHP学习】—PHP文件嵌套HTML(四)
【PHP学习】—PHP文件嵌套HTML(四)
|
4月前
|
应用服务中间件 网络安全 nginx
nginx 配置 静态html
nginx 配置 静态html
95 0
|
5月前
|
搜索推荐 API SEO
Angular 服务器端渲染的静态 HTML 变为客户端的动态应用的过程
Angular 服务器端渲染的静态 HTML 变为客户端的动态应用的过程
66 1
|
8月前
|
PHP
PHP - Laravel 未转义输出,输出 HTML 标签到页面展示({!! $变量 !!})
PHP - Laravel 未转义输出,输出 HTML 标签到页面展示({!! $变量 !!})
121 0