`
lonestone
  • 浏览: 92947 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用ob_start()控制缓冲,给页面做文件缓存,加速页面

阅读更多

我们可能都有这样的经验,用php写了一个打开好几个数据库,几十次数据查询的首页,速度慢是可想而知啊,但是这个页面不大好做模板生成静态页,太麻烦了。怎么办了?我使用了这个解决方案,控制php的输出缓冲,截获处理后的html,保存成文件,然后的请求就检查这个文件的时间,若在设置的时间内,直接读取,发送。如果已经超时,就重新读取动态页面。

<?php
//--------------------------------------------------------------------------
//文件名:index.php
//描述:主站首页
//需求:PHP4(http://www.php.net)

//Copyright(C),www.cnfdc.com.cn,2005,AllRightsReserved.

//作者:lonestone(wangyong.yichang@gmail.com)

//--------------------------------------------------------------------------
//缓存文件名和缓存时间

$cachefilename='./cache/index.cache';
$cachetime=3600;

//强制更新缓存
if($_GET['c'])
{
echoCacheFile();
die();
}

//检测缓存是否存在
if(file_exists($cachefilename))
{
$lastmodifytime=filemtime($cachefilename);
if($lastmodifytime&&(time()-$lastmodifytime)>$cachetime)
{
echoCacheFile();
}
else
{
echoReadCache();
}
}
else
{
echoCacheFile();
}


//生成HTML并缓存成文件
functionCacheFile()
{
global$cachefilename;
//打开输出缓存
ob_start();

//这里开始链接数据库,查询,用ADODB+SMARTY技术。

$tpl->Display("index.html");
//处理完成,截获缓冲内容


//得到缓存内容

$content=ob_get_contents();
//清空缓冲区,否则最终还是会输出给浏览器,这样就会有两个首页了
ob_end_clean();
//写入文件,若不可写则返回缓存
if(is_writable($cachefilename))
{
$handle=fopen($cachefilename,"w");
fwrite($handle,$content);
fclose($handle);
}
else
{
returnReadCache()."outdated";
}

return$content.'newcache';

}

//读取缓存文件
functionReadCache()
{
global$cachefilename;
$handle=fopen($cachefilename,"r");
$content='';
while(!feof($handle))
{
$line=fgets($handle);
$content.=$line;
}
fclose($handle);
return$content.'cachedat'.date("Y-m-dH:i:s",filemtime($cachefilename));
}


分享到:
评论

相关推荐

    用PHP的ob_start();控制您的浏览器cache!

    必须使用`ob_end_flush()`或`flush()`等函数显式输出缓冲区内容。 3. **ob_get_contents** - **函数格式**:`ob_get_contents();` - **说明**:获取当前输出缓冲区的内容。如果输出缓冲未开启,则返回`FALSE`。 ...

    用php的ob_start来生成静态页面的方法分析

    在开始之前还是提一下三个函数吧:”ob_start()、ob_end_clean()、ob_get_contents()” ob_start():是打开缓冲区的,就是要把您需要生成的静态文件的内容缓存在这里; ob_get_contents():是读出缓冲区里的内容,下面...

    php基于ob_start(ob_gzhandler)实现网页压缩功能的方法

    在实际应用中,除了`ob_start('ob_gzhandler')`,还可以结合其他优化手段,比如使用PHP缓存(如APC、eAccelerator)、优化数据库查询、合并CSS和JS文件、减少HTTP请求次数等,以进一步提升网站性能。 总之,`ob_...

    php缓存生成html类

    `saveCacheFile()` 方法则在缓存文件不存在或已过期时保存当前缓冲区的内容。 在实际应用中,你可以在每个需要缓存的PHP页面开始处调用 `HtmlCache::startCache()`,在结束处调用 `HtmlCache::endCache('unique_...

    php利用ob_start()清除输出和选择性输出的方法

    这样做的好处包括:可以对输出内容进行后期处理,防止重复的数据库查询或文件读写操作,以及实现页面的静态化缓存。 使用 `ob_start()` 函数可以打开输出缓冲。当输出缓冲被激活后,脚本不会立即输出内容(除HTTP头...

    PHP中ob_start函数的使用说明

    在实际开发中,`ob_start()` 与其他输出控制函数组合使用,可以帮助解决很多问题,比如在生成动态内容时防止意外的输出污染文件头,或者实现分页加载、页面局部刷新等复杂功能。正确理解并运用这些函数,能够提升PHP...

    解析PHP中ob_start()函数的用法

    以上场景只是`ob_start()`功能的一部分,实际上,配合其他`ob_`系列函数(如`ob_get_contents()`、`ob_end_clean()`、`ob_end_flush()`等),还可以实现更多高级功能,例如处理输出过滤、控制浏览器缓存、生成压缩后...

    php中 ob_start等函数截取标准输出的方法

    我想将PHP脚本中输出的东西收集在一起,于是使用了ob_start和ob_end_flush这两个函数,确实有达到收集输出内容的作用,但同时也将这些打印到了控制台界面中。我想问的是有没有办法,阻止PHP像控制台输出信息。该软件...

    用PHP ob_start()控制浏览器cache、生成html实现代码

    2. **ob_start()**:启动输出缓冲区,之后的非文件头信息会被存储而不是立即发送。 3. **ob_get_contents()**:返回当前缓冲区中的内容。若缓冲区未激活,将返回`FALSE`。 4. **ob_get_length()**:返回缓冲区内容的...

    php使用ob_start()实现图片存入变量的方法

    `ob_start()`函数在这种场景下就显得尤为重要,它可以帮助我们将输出缓冲区开启,以便于捕获图片的二进制数据。下面将详细阐述如何使用`ob_start()`配合其他函数来实现这个功能。 `ob_start()`是PHP的输出控制函数...

    php缓存实现原理

    通过`ob_start()`开启缓冲,执行`phpinfo()`,然后使用`ob_get_contents()`获取缓冲区的内容,并写入到文件。 ```php ob_start(); // 开启缓冲区 phpinfo(); // 输出phpinfo信息 $info = ob_get_contents(); // ...

    php页面缓存方法小结

    在PHP中实现页面缓存,主要依赖于输出缓冲(output buffering)机制提供的ob系列函数,以及通过文件存储实现的静态页面缓存机制。 ob系列函数是PHP中用于控制输出缓冲区的一组函数,它们包括: 1. ob_start():当...

    控制PHP的输出:缓存并压缩动态页面

    ob_start()函数用于开启输出缓冲,使得所有发送到浏览器的输出都会首先存入到内部缓存中,而不是直接输出。ob_get_contents()函数可以获取当前输出缓冲区的内容,ob_get_length()用来获取当前输出缓冲区的内容长度。...

    php中flush()、ob_flush()、ob_end_flush()的区别介绍

    在实际开发中,结合使用 `ob_start()`, `ob_clean()`, `ob_get_contents()` 等相关函数,可以灵活地控制和管理PHP的输出缓冲,实现诸如分块传输、HTML压缩、内容替换等多种优化策略。了解这些函数的差异和使用场景,...

    PHP 缓存详情机制

    浏览器会在下次访问同一页面时尝试使用缓存中的数据,从而减少网络请求,加快页面加载速度。 #### 三、PHP缓存控制函数详解 在PHP中,有一些内置函数可以帮助开发者更好地控制缓存行为。下面我们逐一介绍这些函数...

    php输出掌握的学习笔记__1.docx

    PHP 输出掌握的学习笔记主要涉及如何使用PHP的输出控制函数,如`ob_start()`,`ob_get_contents()`,`ob_end_clean()`等,以管理和处理脚本的输出内容。这些函数在处理HTTP头信息、错误处理、内容缓存等方面非常有用...

    关于缓存的一点心得

    7. **`ob_start()`, `ob_get_contents()`, `ob_end_flush()`**:这些函数用于控制PHP的输出缓冲机制,对于实现页面缓存非常关键。 8. **`ob_flush()`, `ob_clean()`, `ob_end_clean()`**:这些函数则用于清除或结束...

    PHP输出缓存ob系列函数详解

    输出缓存ob系列函数是一组专门用于控制输出缓冲的函数集合。虽然输出缓存通常被误认为是output cache,但它的正确名称是output buffering,简称ob。它的工作原理是将PHP脚本的输出暂存于服务器内存中,直到脚本执行...

Global site tag (gtag.js) - Google Analytics