基于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
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
20个PHP常用类库小结
Sep 11 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
PHP连接access数据库
Mar 27 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 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 高手之路(一)
2006/10/09 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP单例模式详细介绍
2015/07/01 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
JavaScript闭包详解
2015/02/02 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
单位未婚证明范本
2014/01/18 职场文书
四个太阳教学反思
2014/02/01 职场文书
仓管员岗位责任制
2014/02/19 职场文书
无保留意见审计报告
2015/06/05 职场文书
入党转正申请书范文
2019/05/20 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL