设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> 网络编程 >> PHP >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
Li的横向排列自适应宽度…
Hibernate配置文件中映射…
Hibernate核心接口简介
Hibernate对多表关联查询
通过反射填充泛型集合Li…
模板,PHPLIB处理方式
表单验证类 Validator f…
PHP中基于Linux的搜索引…
Eclipse+JBoss+MySQL开发…
Linux+Apache+Mysql+PHP…
  用libTemplate实现静态网页的生成           
用libTemplate实现静态网页的生成
 

  作者: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”,””);
  …..
  //获取缓冲区内容
  =ob_get_contents();
  //如果不想输出任何东西,可以加上这句
  ob_end_clean();
  //写入目的文件
  =@fopen(,”w+”) or die(“打开文件时出错”);
  fwrite(,);
?>

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

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

  一, 修改template.inc
加入以下的几个函数:
//将分析结果保存到文件中去
 function savetofile (,){
  =->finish(->get_var());
  =fopen(,"w+");
  fwrite(,);
 }
 //清除已赋值数组
  function renew(){
  ->varkeys=array();
  ->varvals=array();
  ->file=array();
  }

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

  二,实现静态网页生成。
<?php
->set_file(“main”,”mian.tpl”);
//分析模板变量
…..
//分析mainmains
->parse("mains","main");
//把分析结果mains存入main.html
->savetofile("main.html","mains");
//置空
->renew();//至关重要
?>

  呵呵,是不是很简单,main.html就是我们要的内容。下面是一个结合数据库的例子,并用函数封装了起来。
<?php
//,,,.inc的一个实例
//每一个aid对应一个静态网页地址,都存在一个数据表中
//表的结构类似于 aid   target    title
//        1   a1.html   ….
//        2   a2.html   ….
//        3   a3.html   ….
function staticInfo(){
  global ,,;
  //查询数据库
  =mysql_query(“select * from where aid=’);
  //取出数据
  =mysql_fetch_array();
  //读静态网页地址,标题。
  =;
2004092615=;
//分析模板
->set_file(“main”,);
//把模板中的{ title}变量换成2004092615
->set_var(“title”,);
//分析整个模板
->set_var(“mains”,”main”);
//把mains写入文件
->savetofile(,"mains");
//置空
->renew();
}
?>

  这样我们就可以用函数staticInfo()把我们想要处理的任一篇文章都生成静态网页。表

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

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

  四,批量生成静态网页.
有了单个文章生成的静态网页的函数了,那么批量生成是非常简单的。就是获取所有的文章aid,然后套入函数即可。
<?php
 //引用模板类
require”template.inc”;
//引入函数
require”functions.php”;
//一些变量的定义
=”art”;
=”template/info.tpl”;
=new Template(“.”);
 //连接mysql,选择数据库
mysql_connect(“localhost”,”root’,””);
mysql_select_db(“article”);
//发送查询语句
=mysql_query(“select aid from );
while(=mysql_fetch_array()){
  =;
  //生成静态网页
  staticInfo();
}
//结束
echo”所有静态网页更新/生成成功”;
?>

  上面就是完整的例子。我们做cms的流程可以如下:
1,记者发稿(把稿件内容放入数据库)
2,编辑审查(如果他认为可以发布,那么就可以把这些内容生成静态网页)
3,退回稿件(把生成的静态网页删除,把数据库中的内容删除)

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

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

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

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2006-11-9
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:admin    责任编辑:admin 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持