基于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来写记数器(详细介绍)
Oct 09 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
PHP合并数组+与array_merge的区别分析
Aug 01 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
PHP Session机制简介及用法
Aug 19 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
使用js画图之画切线
2015/01/12 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
Python实现Kmeans聚类算法
2020/06/10 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
优秀村官事迹材料
2014/01/10 职场文书
省文明单位申报材料
2014/05/08 职场文书
交通事故委托书范本
2014/09/28 职场文书
顶岗实习协议书
2015/01/29 职场文书
指导教师推荐意见
2015/06/05 职场文书
安全生产感想
2015/08/07 职场文书
redis限流的实际应用
2021/04/24 Redis
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS