PHP缓冲ob_start和页面文件缓存

ob_start ob_get_flush 这些函数是缓存技术的一种,是减轻服务器压力的,直到项目开发用到才知道混淆了和缓存的概念,
这些像ob_start ob_get_flush这些函数都是为了在编程中字符串输出到客户端上去为了延长时间而用到的技术,延迟输出(字符串先发送到缓冲区需要时在输出到浏览器),是一种输出技巧。最常见的应用是静态化技术(可以实现静态缓存):

把要输出代码的先保存到缓存区在用ob_get_contents();取得内容写入文件

php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数。

ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。

ob_end_flush - 结束(发送)输出缓冲区的内容,关闭输出缓冲区。

php 输出东西,会保存在一个 php 维护的内存里,称为 buffer 也行,缓存也行,都是一个意思。然后当这个 buffer 满了,php 会自动往 web server 发送这些数据。

也就是说每次 echo,并不一定会输出东西,而是保存在 buffer 里。

ob_start() 的意思,可以理解为(但是实际上和我下面的说法有区别),这个 buffer 由 ob_ 系列函数来来控制,也就是,PHP 不会维护自己的 buffer,不会自动把buffer 的内容自动发送到 web server,直到你 ob_end() 或者类似的 ob 操作。

ob_函数一般用来捕获当前的输出,跟效率是没什么关系的。至于为什么捕获输出,原因很多,例如我捕捉输出,缓存到一个文件里,下次请求就可以直接读这个 cache 文件的内容作为输出了。

 代码如下 复制代码

ob_start(); 

2 内容 

3 echo ob_get_contents() ;

例子

 

 代码如下 复制代码
<?php
//打开缓冲区
ob_start();
?>
php页面的全部输出
<?php
//取得php页面输出的全部内容
$content = ob_get_contents();
//创建一个文件,并打开,准备写入
$fp = fopen(“1.html”, “w”);
//把php页面的内容全部写1.html
fwrite($fp, $content);
fclose($fp);
?>

而缓存是一个很大的概念,一般用来解决大型网站高负载问题,像下面雨中漫步讲的 就是一种缓存技术的实现,当然除了内存缓存还有文件、页面缓存,比如想uchome 中系统配置变量,一般不需要改变的设置生成文件是文件缓存,用到这些数据直接通过读取文件读取而不直接从数据库读取,这些都是为了避免再次查询数据减轻访问压力问题而设置的。

网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个。废话不多说,直接看代码吧!

使用说明:

1、实例化

 代码如下 复制代码

$cache = new Cache();

2、设置缓存时间和缓存目录

$cache = new Cache(60, '/any_other_path/');第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置。
默认情况下,缓存时间是 3600 秒,缓存目录是 cache/

3、读取缓存

 代码如下 复制代码

$value = $cache->get('data_key');4、写入缓存

$value = $cache->put('data_key', 'data_value');完整实例:

$cache = new Cache();

//从缓存从读取键值 $key 的数据
$values = $cache->get($key);

//如果没有缓存数据
if ($values == false) {
 //insert code here...
 //写入键值 $key 的数据
 $cache->put($key, $values);
} else {
 //insert code here...
}
Cache.class.php

<?php
class Cache {
 private $cache_path;//path for the cache
 private $cache_expire;//seconds that the cache expires

 //cache constructor, optional expiring time and cache path
 public function Cache($exp_time=3600,$path="cache/"){
  $this->cache_expire=$exp_time;
  $this->cache_path=$path;
 }

 //returns the filename for the cache
 private function fileName($key){
  return $this->cache_path.md5($key);
 }

 //creates new cache files with the given data, $key== name of the cache, data the info/values to store
 public function put($key, $data){
  $values = serialize($data);
  $filename = $this->fileName($key);
  $file = fopen($filename, 'w');
     if ($file){//able to create the file
         fwrite($file, $values);
         fclose($file);
     }
     else return false;
 }

 //returns cache for the given key
 public function get($key){
  $filename = $this->fileName($key);
  if (!file_exists($filename) || !is_readable($filename)){//can't read the cache
   return false;
  }
  if ( time() < (filemtime($filename) + $this->cache_expire) ) {//cache for the key not expired
   $file = fopen($filename, "r");// read data file
         if ($file){//able to open the file
             $data = fread($file, filesize($filename));
             fclose($file);
             return unserialize($data);//return the values
         }
         else return false;
  }
  else return false;//was expired you need to create new
  }
}
?>

时间: 2024-10-28 20:39:42

PHP缓冲ob_start和页面文件缓存的相关文章

通过云存储实现海量的HTML页面文件缓存

背景 对于大部分使用者而言,他们都是使用对象存储OSS进行图片.大文件等存储的应用.其实OSS本身并不会给自身定位,只要OSS提供了相应的功能,我们就能应用起来,解决一些原来看似非常烦恼的问题,我在这里分享一个利用OSS解决网页Html缓存的方案. 我们知道,缓存对于一个网站来说非常重要,几乎是解决性能问题的牛皮糖,缓存会有很多种,常见的有内存的缓存.文件级别的缓存.内存的缓存不太适合太多的内容,缓存的一般是比较关键和热点的内容:文件级别的缓存,涉及到磁盘IO,速度比内存慢了很多.但是相对复杂的

Chrome浏览器清除页面js文件缓存的方法

Chrome浏览器清除页面js文件缓存 Chrome浏览器清除js缓存方法虽然简单,但有些人还是不太会,有些人会去设置里面清除有时候没有用,这里写一下简单步骤,使用一次以后就会了,而且速度更快 1.打开需清缓存的页面(如:元素编辑页面),再按F12调出开发模式框 2.勾选 Network标签下 Disable cache选项 (如果之前已勾选直接下一步) 3.按F5或右键"重新加载"刷新页面内容 (刷新页面后本页面相关js缓存已清除) 4.页面重新加载完成再按F12隐藏开发模式框就ok

PHP文件缓存类实现代码_php技巧

php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.页面缓存类 代码如下 : <?php /*include( "cache.php" ); $cache = new cache(30); $cache->cacheCheck(); echo date("Y-m-d H:i:s"); $cache->caching(); */ class cache { //缓存目录 var

php文件缓存实例代码

php教程文件缓存实例代码 缓存在实际使用当中应用很广泛,可以减轻对服务器数据库教程的访问,提高运行速度.目前很多cms内容管理系统中频繁使用缓存机制来提高系统运行的效率 cache.php 代码如下: php代码 <?  /* 用户需要事先定义的常量: _cachepath_        模板缓存路径 _cacheenable_        自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 _recachetime_        自动重新缓存间隔时间,单位为秒,未定义或为空,表示

页面的缓存与不缓存设置

HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务器端.本文 讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情况.       HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等.       HTTP1.0中通过Pragma 控制页面缓存

app-Android 文件缓存策略

问题描述 Android 文件缓存策略 需求是这样的: 打开Android app访问服务器端的页面,第一次访问服务端,第二次就可以直接读缓存:在服务端有数据更新的时候,可以定时的更新,清除缓存,重新访问服务端的页面,谁有完整的demo(ps:使用文件缓存的策略),谢谢! 解决方案 莫有人知道吗?急用,有个案例参考下

php 数据库缓存:php文件缓存数据

 在做网吧看看的时候,由于页面中存在电影的搜索功能(用户输入)这个功能由于不能够做成静态化,那么就只能够动态,用动态的时候会对数据库,服务器压力带来很大的考验所以就只能用到缓存数据的方式了数据缓存的形式包括:1.将数据缓存到内存,相信大家这个就会想到了Memcached.memcached是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.2.用文件来缓存数据.将数据保存到文件中,用key=>value的形式

ASP小技巧:禁用html页面的缓存

缓存|技巧|禁用|页面 1.在Asp页面首部<head>加入     Response.Buffer   =   True     Response.ExpiresAbsolute   =   Now()   -   1     Response.Expires   =   0     Response.CacheControl   =   "no-cache"     Response.AddHeader   "Pragma",   "No-

ASP.NET 2.0中的页面输出缓存

asp.net|缓存|页面 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出