php生成静态html页面的方法(2种方法)


Posted in PHP onSeptember 14, 2015

因为每次用户点击动态链接的时候都会对服务器发送数据查询的要求,对于一个访问量可能达百万千万级别的网站来说 这无疑是服务器一个大大的负担,所以把动态数据转换成静态html页面就成了节省人力物力的首选。

因为此前没有相应的经验 刚开始的时候觉得这个技术很神秘,但在看了一些例子以后发现并不是那么复杂(不过网上的资料并不是特别详细),经过一个上午加中下午的试验 终于把该做的任务完成了 下面是一些心得和一个简单的例子

希望大虾们不要笑话我哈

一般来说 用php转换输出html页面有两种办法 引用大虾的文章如下:

第一种:利用模板。

目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。

这里我用smarty做例子,说明如何生成静态页:

<?php
require("smarty/Smarty.class.php");
$t = new Smarty;
$t->assign("title","Hello World!");
$content = $t->fetch("templates/index.htm");
//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>

第二种方法:利用ob系列的函数。

这里用到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是 保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取 缓冲区的内容,相当于上面的那个fetch(),道理一样的。

<?php
ob_start();
echo "Hello World!";
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>

我选用的第2种方法 也就是用ob系列的函数

我刚开始看这个的时候有点不太明白 后来才知道ob是output buffering的意思 也就是输出缓存

当你准备输出的时候 所有的数据都保存在ob里面 服务器解析完php以后 把所有要输出到客户端的html代码都存放在ob里面 如果我们要输出html静态页面 只要把缓存取出来写入一个html页面即可

所以原理其实是很简单的

这里用到了几个函数 由于我初学php 很多函数我还不了解 所以这里也说明一下 希望可以帮助大家

ob_start():开始“捕捉”缓存 也就是从这里开始 打开浏览器的缓存

ob_end_flush():关闭浏览器缓存

ob_get_content():读取缓存内容

fopen(”文件路径”,”打开模式”)打开文件 这个函数的打开模式有好几种 下面介绍几种主要的模式:

“r” 只读方式打开,将文件指针指向文件头。

“r+” 读写方式打开,将文件指针指向文件头。

“w” 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

“w+” 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

fwrite(”文件名称”,”写入内容”) 写入文件

fclose() 关闭文件

由于我要转换的html文件非常多 可能有几百个 所以这里不能静态指定fopen的路径 大家可以设置一个路径变量 里面可以保存用户传来的id等信息 方便进行html文件命名 下面是我结合上次php读取xml数据的一个简单例子

<?php
ob_start();//打开浏览器缓存
//下面是读取xml数据
$parser = xml_parser_create(); //创建一个parser编辑器
xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数
$xml_file="1.xml";//指定所要读取的xml文件,可以是url
$filehandler = fopen($xml_file, "r");//打开文件
while ($data = fread($filehandler, 4096)) 
{
xml_parse($parser, $data, feof($filehandler));
}//每次取出4096个字节进行处理
fclose($filehandler);
xml_parser_free($parser);//关闭和释放parser解析器
$name=false;
$position=false;
function startElement($parser_instance, $element_name, $attrs) //起始标签事件的函数
{
global $name,$position;
if($element_name=="NAME")
{
$name=true;
$position=false;
echo "名字:";
}
if($element_name=="POSITION")
{$name=false;
$position=true;
echo "职位:";
}
}
function characterData($parser_instance, $xml_data) //读取数据时的函数
{
global $name,$position;
if($position)
echo $xml_data."<br />";
if($name)
echo $xml_data."<br />";
}
function endElement($parser_instance, $element_name) //结束标签事件的函数
{
global $name,$position;
$name=false;
$position=false;
}
//xml数据读取完毕
$htmlname=$id.".html";//$id可以自己定义 这里代表用户传来的id
$htmlpath="archives/".$htmlname; //设置路径变量
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen($htmlpath, "w");
fwrite($fp, $content);
fclose($fp);
?>

以上内容就是给大家分享的php生成静态html页面的方法(2种方法),希望大家喜欢。

PHP 相关文章推荐
PHP.MVC的模板标签系统(二)
Sep 05 PHP
实用函数8
Nov 08 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
php解决约瑟夫环示例
Apr 09 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
PHP概率计算函数汇总
Sep 13 #PHP
整理php防注入和XSS攻击通用过滤
Sep 13 #PHP
教你识别简单的免查杀PHP后门
Sep 13 #PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 #PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 #PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 #PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 #PHP
You might like
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
浅析php数据类型转换
2014/01/09 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
基于JQUERY的多级联动代码
2012/01/24 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
python使用super()出现错误解决办法
2017/08/14 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python使用python-docx读写word文档
2019/08/26 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
老龄工作先进事迹
2014/08/15 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
css3 选择器
2022/05/11 HTML / CSS