基于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 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
一个可以找出源代码中所有中文的工具
Oct 25 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
支持中文的php加密解密类代码
Nov 27 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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 递归效率分析
2009/11/24 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
xmlHTTP实例
2006/10/24 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
在python中使用nohup命令说明
2020/04/16 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
产品生产计划书
2014/05/07 职场文书
高三霸气励志标语
2014/06/24 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers