分享
 
 
 

用libTemplate实现静态网页的生成

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

作者:iwind

原来在dev-club发表的一篇文章,将怎么用模板处理程序PHPlib 中的template.inc实现静态网页的生成,呵呵,居然被列入精华,并被多个网站转载,想来这是荣幸。其实网上这方面的东西很多了,我上此发布的所谓IAMS( iwind 文章管理系统),里面也有,有心人可以看一下。下面我只是简要在总结一次。

现在一般说生成静态网页的方法有三种,一个是配置服务器,大家可以到http://www.devarticles.com/c/b/PHP/ 去找找看,对于这个很多地方都有的。另外一个是用ob_函数控制输出。方法如下:先用ob_start();打开输出缓冲器,然后是对数据的分析,操作等等,跟着用ob_get_contents();获取缓冲区的内容,然后再写入文件。根据这个步骤,可以写出以下程序:

<?php

ob_start();

//主体部分,数据操作,处理,输出等等。。。

require”global.php”;

mysql_connect(“localhost”,”root”,””);

…..

//获取缓冲区内容

$contents=ob_get_contents();

//如果不想输出任何东西,可以加上这句

ob_end_clean();

//写入目的文件

$fp=@fopen($targetFile,”w+”) or die(“打开文件时出错”);

fwrite($fp,$contents);

?>

这样就把这个动态页面的内容写入了静态页面,$targetFile.像有的网站首页内容很多,要调用n多个查询语句时,不妨定时生成静态网页,既大幅提高了访问速度,也减轻了服务器负担。

你可以看出来,我用ob_只是处理单个页面,对于批量写入或更新多个页面,这个方法就不行了。这就是我要讲的第三种方法,用模板。模板是个好东东,现在大家都或多或少在用它,建议还不会简单模板处理的网友,花点时间去学它,一般的模板处理程序都很简单的。用模板实现静态网页的生成是非常简单的,方法就是获取分析结果,把分析结果写入文件。下面就以PHPlib中的template.inc来谈谈如果用模板生成静态网页。

一, 修改template.inc

加入以下的几个函数:

//将分析结果保存到文件中去

function savetofile ($dir,$varname){

$data=$this->finish($this->get_var($varname));

$fp=fopen($dir,"w+");

fwrite($fp,$data);

}

//清除已赋值数组

function renew(){

$this->varkeys=array();

$this->varvals=array();

$this->file=array();

}

第一个函数是结果保存到静态文件中,第二个是把所有的模板分析变量都置为空,以免批量处理时相互影响。

二,实现静态网页生成。

<?php

$itpl->set_file(“main”,”mian.tpl”);

//分析模板变量

…..

//分析mainmains

$tpl->parse("mains","main");

//把分析结果mains存入main.html

$tpl->savetofile("main.html","mains");

//置空

$tpl->renew();//至关重要

?>

呵呵,是不是很简单,main.html就是我们要的内容。下面是一个结合数据库的例子,并用函数封装了起来。

<?php

//$aid是数据库中的文章id,$table是表名称,$template是模板地址,$tpl是template.inc的一个实例

//每一个aid对应一个静态网页地址,都存在一个数据表中

//表的结构类似于 aid target title

// 1 a1.html ….

// 2 a2.html ….

// 3 a3.html ….

function staticInfo($aid){

global $table,$template,$tpl;

//查询数据库

$res=mysql_query(“select * from $table where aid=’$aid’”);

//取出数据

$array=mysql_fetch_array($res);

//读静态网页地址,标题。

$target=$array[“target”];

$title=$array[“title”];

//分析模板

$tpl->set_file(“main”,$template);

//把模板中的{title}变量换成$title

$tpl->set_var(“title”,$title”);

//分析整个模板

$tpl->set_var(“mains”,”main”);

//把mains写入文件

$tpl->savetofile($target,"mains");

//置空

$tpl->renew();

}

?>

这样我们就可以用函数staticInfo()把我们想要处理的任一篇文章都生成静态网页。表$target里也可以包含文章内容,作者,来源等等,方法是一样的。

三,更新静态网页

一篇文章加入数据库后,由于一些原因我们总要修改一些文章。这时候,只要把相应的静态网页重新生成一次即可。这是非常方便的,因为表中已经有了静态网页的目标地址target字段。

可以看出关键所在,一篇文章生成静态网页的关键所在就是$template(模板地址),$target(目标地址)。前者,我们可以先确定,后者可以由你随心所欲的为每篇文章设置一个地址。常用的有1,时间戳 2,时分秒 3,根据文章id。因为这些重复的机会会非常小的。

四,批量生成静态网页.

有了单个文章生成的静态网页的函数了,那么批量生成是非常简单的。就是获取所有的文章aid,然后套入函数即可。

<?php

//引用模板类

require”template.inc”;

//引入函数

require”functions.php”;

//一些变量的定义

$table=”art”;

$template=”template/info.tpl”;

$tpl=new Template(“.”);

//连接mysql,选择数据库

mysql_connect(“localhost”,”root’,””);

mysql_select_db(“article”);

//发送查询语句

$res=mysql_query(“select aid from $table”);

while($r=mysql_fetch_array($res)){

$aid=$r[“aid”];

//生成静态网页

staticInfo($aid);

}

//结束

echo”所有静态网页更新/生成成功”;

?>

上面就是完整的例子。我们做cms的流程可以如下:

1,记者发稿(把稿件内容放入数据库)

2,编辑审查(如果他认为可以发布,那么就可以把这些内容生成静态网页)

3,退回稿件(把生成的静态网页删除,把数据库中的内容删除)

然后,我们访问到的网站内容就都是静态的了。一个问题就是,这种方法会不会占用很多空间内?http://www.iitong.com/php 有上千篇文章了,只占用了20M空间。反过来说,如果你有10000篇文章的话,你不会吝啬到只买200M的空间吧?

或许你对生成静态的文章列表感到困惑,其实方法是一样的,就是 计算页码 分析每个页码的内容  写入文件。 分析每个页码的内容,当然是写个函数咯,如果你一页一页的生成,恐怕被人嘲笑 ^_^。

静态网页不仅仅是可以减轻服务器负担,提高访问速度,也可以方便地做镜像网站,方便地备份,减少被攻击损失程度,加快还原速度。当然静态网页也会给大家带来诸多不便的地方,你需要在动态和静态之间做出平衡,也可以在静态网页中加入js调用的php代码,来达到计数,即时更新等目的。(完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有