PHP缓冲ob_start和页面文件缓存

缓存展现在呼吁起头时被另行安装为 session_cache_limiter  的私下认可值.那样,你须求在每一回央浼时调用 session_cache_limiter() for every request (在 session_start() 调用前).

ob_start ob_get_flush 这一个函数是缓存技艺的一种,是缓慢消除服务器压力的,直到项目开支用到才知晓混淆了和缓存的定义,
这些像ob_start ob_get_flush那么些函数皆认为了在编制程序中字符串输出到顾客端上来为了延长期而用到的才具,延迟输出(字符串头阵送到缓冲区要求时在输出到浏览器),是一种输出技艺。最广大的应用是静态化才具(能够完结静态缓存):

设置cache限制为'private'
*/

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

session_cache_limiter('private');
$cache_limiter=session_cache_limiter();
/*设置session的超时时间为30秒*/
session_cache_expire(30);
$cache_expire=session_cache_expire();
/*初始化session*/
session_start();
/*输出结果内容*/
echo "当前的session cache限制棉被服装置为:$cache_limiter<br />";
echo "当前的session过期时间为:$cache_expire minutes";
/*
出口结果为:
the cache limiter is now set to private
the cached session pages expire after 30 minutes

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

*/

ob_start([string output_callback])- 张开输出缓冲区,全部的输出新闻不在直接发送到浏览器,而是保存在出口缓冲区里面,可选得回调函数用于拍卖输出结果消息。

//实例二

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

/*安装caceh限制者为'private'*/
session_cache_limiter('private');
/*返回caceh限制者*/
$cache_limiter=session_cache_limiter();
echo "当前的session cache限制被设置为:$cache_limiter<br />";

php 输出东西,会保留在八个 php 维护的内部存款和储蓄器里,称为 buffer 也行,缓存也行,都是三个意味。然后当以此 buffer 满了,php 会自动往 web server 发送这一个数据。

//实例三

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

$filename="test.mpeg";
$filepath="test.mpeg";
session_start();
/*初始化session*/
session_commit();
/*输出央求的公文*/
header("content-type: audio/x-mpeg");  //恐怕其余类其他文本
header("content-disposition:attachment;filename=".$filename);
header("content-length:".$filesize);
header("content-transfer-encoding:binarynn");
header("pragma:no-cache");
header("expires:0");
$file_contents=file_get_contents($filepath);
print($file_contents

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/');第一个参数是缓存秒数,第1个参数是缓存路线,依据必要配备。
默许意况下,缓存时间是 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
  }
}
?>

本文由365bet体育在线官网发布于关于计算机,转载请注明出处:PHP缓冲ob_start和页面文件缓存

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。