基于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 相关文章推荐
第十四节--命名空间
Nov 16 PHP
apache php模块整合操作指南
Nov 16 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
php使用websocket示例详解
Mar 12 PHP
php实现mysql封装类示例
May 07 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
PHP 无限级分类
May 04 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
最省空间的计数器
2006/10/09 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
JavaScript的Cookies
2008/01/16 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
js字符串与Unicode编码互相转换
2017/05/17 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python中求对数方法总结
2020/03/10 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
详解anaconda安装步骤
2020/11/23 Python
荷兰超市:DEEN
2018/03/14 全球购物
环境工程大学生自荐信
2013/10/21 职场文书
心理健康心得体会
2014/01/02 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫