简单的说,就是把送往客户端的内容写入文件。实现起来很容易,给你个代码参考一下。<?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);
}
}
?>
/**
*
* 作者: 徐祖宁 (唠叨)
* /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);
}
}
?>
解决方案 »
- 各位好,我打算学习php,请问该如何下手呢?
- 18:44:37 Apr 11, 2007 PDT 这种时间格式要怎么转化为datetime格式呢?谢谢先!
- 高手们好!php里怎么处理同一时刻只有一个用户提交数据?内详 谢谢先~~
- PHP怎么样简便准确的获得昨日的时间和日期?
- 一直对一个问题困惑不解:为什么csdn总是这么热
- [求助]设计多用户程序时,权限分配的设计方法?
- 怎么改成英文的..
- 本人欲申请版主之位,支持的请跟贴!谢谢!
- 初学PHP和APACHE,遇到问题请兄弟们帮忙
- 请教各位:怎么样在这里输入指数?laosan(老三)
- php如何接收使用POST方式的HTTP请求?急!!
- 业务逻辑应该封装在什么地方好?
这年头,大家都用asp或php了嘛
我做的静态,在需要改变的地方改成了js调用动态程序……可能有些失去“静态”的本真含义,不过比较准确。大家还有更好的办法?想知道应用XML的处理……
动态信息静态化是有条件的。必须在更新频率和访问频率件找到平衡点。
一般的说,新闻、文章基本无更新,在创建时就可固化。
留言类,访问量比更新量大,在新增时更新并不影响效率。
论坛类是比较复杂的,全动态时服务器负担太大,静态又有更新频率较高的问题。
所以目录列表宜全动态,可以及时反映变换;帖子可以静态,因为并不是所有人都对同一问题感兴趣。
CSDN的做法的帖子采用XML,发贴时创建,回帖时更新。由于使用XML,所以要比用纯文本方式要好。
我解释以上唠叨的程序思路吧。核心思想,是对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的静态页面,起显示效果同原来动态程序的输出效果。我想解释得比价清楚了。多写两个有关程序相信会有更深了解