基于PHP生成静态页的实现方法


Posted in PHP onMay 10, 2013

t1.php

<?php
// 方法一根据模版生成静态页面
// replaceTemplateString函数用于替换模板中指定字符串
function replaceTemplateString($templateString) {
    // 用来替换的变量
    $title = "文章标题";
    $body = "这里是文章主体";
    // 替换模板中指定字符串
    $showString = str_replace ( "%title%", $title, $templateString );
    $showString = str_replace ( "%body%", $body, $showString );
    // 返回替换后的结果
    return $showString;
}

$template_file = "template.html";
$new_file      = "new.html";
// 模版文件指针
$template_juBing = fopen ( $template_file, "r" );
// 要生成的文件指针
$newFile_juBing = fopen ( $new_file, "w" );
// 方式一获取整体模板内容字符串,替换后赋给新文件
$templateString = fread ( $template_juBing, filesize ( $template_file ) );
$showString = replaceTemplateString ( $templateString ); // 替换模板中字符串
fwrite ( $newFile_juBing, $showString ); // 将替换后的内容写入生成的HTML文件
/*
// 方式二循环读取模版每行内容字符串,替换后依次添加到新文件
while ( ! feof ( $template_juBing ) ) { // feof() 函数检测是否已到达文件末尾。如果文件指针到了末尾或者出错时则返回 TRUE。否则返回FALSE(包括 socket 超时和其它情况)。
    $templateString = fgets ( $template_juBing ); // fgets(file,length) 从文件指针中读取一行并返回长度最多为 length - 1 字节长度的字符串,包括换行符。如果没有指定 length,则默认为 1K,或者说 1024 字节。
    $showString = replaceTemplateString ( $templateString );
    fwrite ( $newFile_juBing, $showString ); // 第一次往打开的指针文件中写入内容时会替换指针文件中原有内容,在该文件指针关闭前,fwrite函数再添加内容会在已添加内容之后
}
*/
// 关闭文件指针
fclose ( $newFile_juBing );
fclose ( $template_juBing );
 
/*
数据库与静态页的关系
通常数据库内添加一条信息同后,生成一个该信息的静态页面,所以最好在数据库表中添加一字段存储对应静态页面的路径文件名,方便以后的修改,删除
模版的替换
一般来说,如果需要修改静态HTML页面的模版,通常的做法是将所有的已经生成的HTML页面删除,然后重新创建新的HTML页面。(或者说全部重新覆盖生成)
静态页上的动态操作
有些时候,在创建的静态HTML页上面也需要进行一些动态操作。例如,新闻系统中的每篇新闻要统计点击率。
可通过一个宽和高都为0像素的图像控件来隐藏的调用一个php页面来实现页面计数器功能,如
<img width='0' height='0' src='counter.php?fileid=S001'>
链接目录的静态页
通常对于使用静态页面的系统来说,往往将连接列表的目录页也生成静态HTML文件供访问者浏览
注意的是因为每增加或者减少一条数据库信息都会对链接列表产生影响,因此,每次对数据库信息进行添加和删除时都需要更新链接目录的静态页。
分页的设计可以通过创建多个链接目录的静态页来完成。
*/

// 方法二根据缓冲区生成
ob_start (); // 当缓冲区激活时,并且有ob_end_clean()的情况下,所有输出打印的非文件头信息均不会输出打印到页面,而是保存在内部缓冲区。如果没有ob_end_clean(),则信息既被存在内部缓冲区,也被输出打印
?>
this is test Output Control
<?php
echo "<br>this is test Output Control<br>";
include_once 'cache/newFile.php';
$contents = ob_get_contents (); // 获取缓冲区到此为止存储的信息,缓冲区只保存会向页面浏览器输出打印的内容,php执行代码等不会保存
// $contents = ob_get_clean(); // 获取缓冲区到此为止存储的信息,并关闭清除缓冲区
// ob_end_flush();//输出打印缓冲区到此为止存储的信息,并关闭清除缓冲区
ob_end_clean (); // 关闭清除缓冲区的内容
file_put_contents ( $new_file, $contents );// 向文件写入内容
?>

template.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>%title%</title>
</head>
<body>
<H1>%title%</H1>
<hr>
<pre>%body%</pre>
</body>
</html>
PHP 相关文章推荐
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
php实现图片上传、剪切功能
May 07 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 PHP
PHP RabbitMQ消息列队
May 11 PHP
深入PHP数据缓存的使用说明
May 10 #PHP
基于PHP常用函数的用法详解
May 10 #PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 #PHP
PHP 自定义错误处理函数的使用详解
May 10 #PHP
PHP 类相关函数的使用详解
May 10 #PHP
解析PHP缓存函数的使用说明
May 10 #PHP
基于PHP选项与信息函数的使用详解
May 10 #PHP
You might like
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
php-msf源码详解
2017/12/25 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
js select option对象小结
2013/12/20 Javascript
js 通用订单代码
2013/12/23 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
python-numpy-指数分布实例详解
2019/12/07 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
事业单位接收函
2014/01/10 职场文书
争论的故事教学反思
2014/02/06 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
停车位租赁协议书
2014/09/24 职场文书
代收款委托书范本
2014/10/01 职场文书
商铺门面租房协议书
2014/10/21 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
Python数据处理的三个实用技巧分享
2022/04/01 Python