简单的说,就是把送往客户端的内容写入文件。实现起来很容易,给你个代码参考一下。<?php
/**
 * 
 *  作者: 徐祖宁 (唠叨)
 *  /club/bbs/showEssence.asp?id=20525
 *
 *  类: outbuffer
 *  功能: 封装部分输出控制函数,控制输出对象。
 * 
 *  方法:
 *  run($proc)                运行php程序
 *    $proc     php程序名
 *  display()                 输出运行结果
 *  savetofile($filename)     保存运行结果到文件,一般可用于生成静态页面
 *    $filename 文件名
 *  loadfromfile($filename)   装入保存的文件
 *    $filename 文件名
 * 
 *  示例:
 *  1.
 *  require_once "outbuffer.php";
 *  $out = new outbuffer();
 *  $out->run("test.php");
 *  $out->display();
 * 
 *  2.
 *  require_once "outbuffer.php";
 *  require_once "outbuffer.php";
 *  $out = new outbuffer("test.php");
 *  $out->savetofile("temp.htm");
 * 
 *  3.
 *  require_once "outbuffer.php";
 *  $out = new outbuffer();
 *  $out->loadfromfile("temp.htm");
 *  $out->display();
 * 
 */class outbuffer {
  var $length;
  var $buffer;
  function outbuffer($proc="") {
    $this->run($proc);
  }
  function run($proc="") {
    ob_start();
    include($proc);
    $this->length = ob_get_length();
    $this->buffer = ob_get_contents();
    $this->buffer = eregi_replace("\r?\n","\r\n",$this->buffer);
    ob_end_clean();
  }
  function display() {
    echo $this->buffer;
  }
  function savetofile($filename="") {
    if($filename == "") return;
    $fp = fopen($filename,"w");
    fwrite($fp,$this->buffer);
    fclose($fp);
  }
  function loadfromfile($filename="") {
    if($filename == "") return;
    $fp = fopen($filename,"r");
    $this->buffer = fread($fp,filesize($filename));
    fclose($fp);
  }
}
?>

解决方案 »

  1.   

    静态网页的实现技术???不会就是用dreamweaver或frontpage编写的吧??
    这年头,大家都用asp或php了嘛
      

  2.   

    呵呵,我想楼主的意思就是唠叨兄写的,用动态产生的“静态”页面……唠叨兄思路不错。不过敢问,静态页面中如有较多“动态”信息,需要“刷新”怎么办?每次都重写?这样效率比较低了……我们可以借此机会看看CSDN的做法,他就不改变旧信息的我觉得似乎这是种偷懒做法~
    我做的静态,在需要改变的地方改成了js调用动态程序……可能有些失去“静态”的本真含义,不过比较准确。大家还有更好的办法?想知道应用XML的处理……
      

  3.   


    动态信息静态化是有条件的。必须在更新频率和访问频率件找到平衡点。
    一般的说,新闻、文章基本无更新,在创建时就可固化。
    留言类,访问量比更新量大,在新增时更新并不影响效率。
    论坛类是比较复杂的,全动态时服务器负担太大,静态又有更新频率较高的问题。
    所以目录列表宜全动态,可以及时反映变换;帖子可以静态,因为并不是所有人都对同一问题感兴趣。
    CSDN的做法的帖子采用XML,发贴时创建,回帖时更新。由于使用XML,所以要比用纯文本方式要好。
      

  4.   

    实现技术
    我解释以上唠叨的程序思路吧。核心思想,是对Output Control Functions函数集的应用。
    具体来说是ob函数集的应用。举个例子:
    <?
    ...
    ob_start(); //开启缓存
    .
    .           //输出你的页面
    .           //此时浏览器上不会有任何输出,而是将输出数据存入内存
    .
    $outbuffer = ob_get_contents(); //将缓存中的的数据赋值给一个变量
    //此时若运行 echo $outbuffer;将按原样输出,即和没用ob_start()效果相同
    $fp = fopen($filename, "w");    //$filename为你想产生静态页面的名字,例如test.htm
    fwrite($fp,$outbuffer);         //将数据写入文件
    fclose($fp);                    //关闭文件至此,产生了一个名为test.htm的静态页面,起显示效果同原来动态程序的输出效果。我想解释得比价清楚了。多写两个有关程序相信会有更深了解