分享两种php生成静态html页面的方法

分类:PHP_Python| 发布:佚名| 查看:202 | 发表时间:2015/11/30

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

第一种:利用模板。

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

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

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

 

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

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

1<?php
2ob_start();
3echo "Hello World!";
4$content = ob_get_contents();//取得php页面输出的全部内容
5$fp = fopen("archives/2015/05/19/camnpr.html", "w");
6fwrite($fp, $content);
7fclose($fp);
8?>

我选用的第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数据的一个简单例子

01<?php
02ob_start();//打开浏览器缓存
03//下面是读取xml数据
04$parser = xml_parser_create(); //创建一个parser编辑器
05xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment
06xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数
07$xml_file="1.xml";//指定所要读取的xml文件,可以是url
08$filehandler = fopen($xml_file, "r");//打开文件
09while ($data = fread($filehandler, 4096))
10{
11xml_parse($parser, $data, feof($filehandler));
12}//每次取出4096个字节进行处理
13fclose($filehandler);
14xml_parser_free($parser);//关闭和释放parser解析器
15$name=false;
16$position=false;
17function startElement($parser_instance, $element_name, $attrs) //起始标签事件的函数
18{
19global $name,$position;
20if($element_name=="NAME")
21{
22$name=true;
23$position=false;
24echo "名字:";
25}
26if($element_name=="POSITION")
27{$name=false;
28$position=true;
29echo "职位:";
30}
31}
32function characterData($parser_instance, $xml_data) //读取数据时的函数
33{
34global $name,$position;
35if($position)
36echo $xml_data."
37";
38if($name)
39echo $xml_data."
40";
41}
42function endElement($parser_instance, $element_name) //结束标签事件的函数
43{
44global $name,$position;
45$name=false;
46$position=false;
47}
48//xml数据读取完毕
49$htmlname=$id.".html";//$id可以自己定义 这里代表用户传来的id
50$htmlpath="archives/".$htmlname; //设置路径变量
51$content = ob_get_contents();//取得php页面输出的全部内容
52$fp = fopen($htmlpath, "w");
53fwrite($fp, $content);
54fclose($fp);
55?>
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/php-python/2188.html