基于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 相关文章推荐
Oracle 常见问题解答
Oct 09 PHP
PHP新手上路(十)
Oct 09 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
Yii支持多域名cors原理的实现
Dec 05 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
laravel框架中控制器的创建和使用方法分析
Nov 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
PHP中MD5函数使用实例代码
2008/06/07 PHP
PHP6 先修班 JSON实例代码
2008/08/23 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
js编写简易的计算器
2020/07/29 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python:print格式化输出到文件的实例
2018/05/14 Python
django项目搭建与Session使用详解
2018/10/10 Python
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
商务英语专业毕业生自荐信
2013/11/05 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
2015年维修工作总结
2015/04/25 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫