基于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
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
php合并数组中相同元素的方法
Nov 13 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
discuz目录文件资料汇总
Dec 30 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript闭包详解
2015/02/02 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
连接pandas以及数组转pandas的方法
2019/06/28 Python
python数组循环处理方法
2019/08/26 Python
wxpython布局的实现方法
2019/11/01 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
详解django中Template语言
2020/02/22 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
什么是测试驱动开发(TDD)
2012/02/15 面试题
公司培训欢迎词
2014/01/10 职场文书
优质服务演讲稿
2014/05/14 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL