PHP缓存技术OB系统函数(总结)

一、总结

一句话总结:

ob相比于php普通的文件操作多了缓存机制,所以适合做php的页面静态缓存

1、为什么php使用ob做静态文件缓存?

解决header()报错的问题:按照http协议的规定,回应内容不能在回应头之前输出,所以,如果在header()函数前面有内容输出,就会出现错误,但使用了ob_start()后就会将回应内容先放在ob缓存中,不会再消息头发送之前被发送,就解决了header()报错的问题!
php自带的ob【缓存机制】本身就适合做页面静态化

2、ob缓存常用的几个函数?

ob_start():开启缓存机制
ob_get_contents():获取ob缓存中的内容
ob_flush 清空缓存,输出内容,但不关闭缓存

ob_start():开启缓存机制
ob_get_contents():获取ob缓存中的内容
ob_clean()清除ob缓存中的内容,但不关闭缓存
ob_end_clean() 清除ob缓存中的内容,并关闭缓存
ob_flush 清空缓存,输出内容,但不关闭缓存
ob_end_flush 清空缓存,输出内容,并关闭缓存

3、ob缓存实例?

|||-begin

下面说一下用php自带的ob缓存机制实现页面静态化的方法,示例代码如下
<?php $id=$_REQUEST['id']; //判断缓存文件是否存在,如果存在,直接输出
if(file_exists('content'.$id.'.html')){
echo file_get_contents('content'.$id.'.html');
return;
} //开启缓存机制
ob_start(); //到数据库中查询所需要的内容
$conn=mysql_connect("localhost","root","root");
mysql_select('db');
mysql_query('set names utf8'); $sql="select content from table_name where id=$id";
$res=mysql_query($sql);
$row=mysql_fetch_assoc($res);
$content=$row[0]; mysql_free_result($res);
mysql_close($conn);
echo $content;
//将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出
file_put_contents('content'.$id.'.html',ob_get_contents()); ?> 如上述代码所示:
将我们查询到的内容直接保存到html文件中,如果文件存在,之间输出,如果不存在,则访问数据库,执行对应的查询过程
如果要设置文件的过期时间,可以在if语句里面加一个判断条件,用于判断缓存文件是否过期,time()-设置的过期时间

|||-end

基本的操作思路就是文件的操作思路:毕竟ob相比于文件操作多了缓存机制

二、PHP缓存技术OB系统函数--静态缓存与局部缓存

转自或参考:PHP缓存技术OB系统函数--静态缓存与局部缓存
https://blog.csdn.net/haoyunyun888/article/details/51181668

 

主要函数:

 

ob_start()函数:打开输出缓冲区.
函数格式
void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。

ob_get_contents :返回内部缓冲区的内容。
函数格式:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.

ob_get_length:返回内部缓冲区的长度。
函数格式:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.

ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
函数格式:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除

ob_end_flush: 发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
函数格式:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)

ob_implicit_flush:打开或关闭绝对刷新
函数格式:void ob_implicit_flush ([int flag])

说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()

静态缓存的案例:

    public function look(){
if(!is_file('k780.html')){
ob_start();
$this->load->view("k870");
$content=ob_get_contents();
$fb=fopen('k780.html',"w");
fwrite($fb,$content);
fclose($fb);
}else{
echo "I am is copy";
echo file_get_contents('k780.html');
}
}

局部缓存(即在你所要想做的项目基础上进行添加,添加完成之后进行添加静态缓存.

     <div class="top_uinfo" id="aaaa"></div>
<script>
$(function(){
$.get('pos',function(e){
$('#aaaa').html(e);
})
})
</script> public function pos(){
if(!empty($_COOKIE['name'])){
echo $_COOKIE['name'];
echo '<a href="logout">退出</a>';
}else{
echo '<a href="login">登陆</a>';
}
}

 

三、利用php的ob缓存机制实现页面静态化

转自或参考:利用php的ob缓存机制实现页面静态化
https://www.cnblogs.com/ds-3579/p/5648801.html

利用php的ob缓存机制实现页面静态化

首先介绍一下php中ob缓存常用到的几个常用函数
ob_start():开启缓存机制
ob_get_contents():获取ob缓存中的内容
ob_clean()清除ob缓存中的内容,但不关闭缓存
ob_end_clean() 清除ob缓存中的内容,并关闭缓存
ob_flush 清空缓存,输出内容,但不关闭缓存
ob_end_flush 清空缓存,输出内容,并关闭缓存
flush强制刷新输出缓存中的内容
按照http协议的规定,回应内容不能在回应头之前输出,所以,如果在header()函数前面有内容输出,就会出现错误,但使用了ob_start()后就会将回应内容先放在ob缓存    中,不会再消息头发送之前被发送,就解决了header()报错的问题!

下面说一下用php自带的ob缓存机制实现页面静态化的方法,示例代码如下
<?php
    
        $id=$_REQUEST['id'];
        
        //判断缓存文件是否存在,如果存在,直接输出
        if(file_exists('content'.$id.'.html')){
            echo file_get_contents('content'.$id.'.html');
            return;
        }
        
        //开启缓存机制
        ob_start();
        
        //到数据库中查询所需要的内容
        $conn=mysql_connect("localhost","root","root");
        mysql_select('db');
        mysql_query('set names utf8');
        
        $sql="select content from table_name where id=$id";
        $res=mysql_query($sql);
        $row=mysql_fetch_assoc($res);
        $content=$row[0];
        
        mysql_free_result($res);
        mysql_close($conn);
        echo $content;
        //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出
        file_put_contents('content'.$id.'.html',ob_get_contents());

?>
       
如上述代码所示:
将我们查询到的内容直接保存到html文件中,如果文件存在,之间输出,如果不存在,则访问数据库,执行对应的查询过程
如果要设置文件的过期时间,可以在if语句里面加一个判断条件,用于判断缓存文件是否过期,time()-设置的过期时间

PHP缓存技术OB系统函数(总结)的更多相关文章

  1. php缓存技术——memcache常用函数详解

    php缓存技术——memcache常用函数详解 2016-04-07 aileen PHP编程 Memcache函数库是在PECL(PHP Extension Community Library)中, ...

  2. PHP - 输出缓存 - 关于ob系列函数和flush函数

    偶然机会看到了flush().知道他的神奇功能可以用在异步传输的comet 模式之后,于是我去试了试这个方法.然后翻手册去看了看什么意思.发现它神奇的和ob类函数在一起.有点好奇,先放一放,来说flu ...

  3. PHP中ob系列函数讲解(浏览器缓存技术) (转)

    Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况. 输出控制函数不对使用 header() 或 setcooki ...

  4. PHP输出缓存ob系列函数

    ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担. ob的基本原则:如果 ...

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

    PHP输出缓存ob系列函数详解 ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额 ...

  6. php缓存技术常用函数

    OB缓存系列函数(输出缓存) ob_start()函数:打开输出缓冲区. 函数格式 ob_start(void) 说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在ob缓冲区 ...

  7. 最近开始研究php的缓存技术,来个系统自带的OPcache

    最近开始研究php的缓存技术,来个系统自带的OPcache php5.5以上版本  系统自带 PHP5.2-5.4 可通过扩展来安装 OPcache是 zend出品  比apc的优势在于  长期更新 ...

  8. 从原理到场景 系统讲解 PHP 缓存技术

    第1章课程介绍 此为PHP相关缓存技术的课堂,有哪些主流的缓存技术可以被使用? 第1章 课程介绍 1-1课程介绍1-2布置缓存的目的1-3合理使用缓存1-4哪些环节适合用缓存 第2章 文件类缓存 2- ...

  9. 《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——2.4 双路组相联高速缓存...

    本节书摘来自异步社区<现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)>一书中的第2章,第2.4节,作者:[美]Curt Schimmel著,更多章节内容可以访问云 ...

随机推荐

  1. JNI-java native interface(java本地接口)

    什么是JNI java native interface(java本地接口) ABI: application binary interface (应用程序二进制接口) 为什么要使用JNI * 复用很 ...

  2. 如何根据字典值的大小,对字典中的项排序---Python数据结构与算法相关问题与解决技巧

    实际案例: 某班英语成绩以字典形式存储为: { 'LiLei' : 90, 'Jim' : 88, 'Lucy': 92 } 如何根据成绩高低,计算学生排名 -- 根据分数,进行排名,并且把排名信息添 ...

  3. Item-Based Collaborative Recommender System

    与User-Based Collaborative Recommender System认为‘类似的用户会对同一个item给出类似的打分’不同,Item-Based Collaborative Rec ...

  4. "CoolShell puzzle game" writeup

    地址:http://fun.coolshell.cn/ Fuck your brain 看到一大串符号,还以为是 js 代码,结果放到 Chrome 控制台执行没有任何结果,然后搜了一下发现有一门叫B ...

  5. [Linux] 020 RPM 包的命名原则与其依赖性

    1. RPM 包命名原则 例如:httpd-2.2.15-15.e16.centos.1.i686.rpm 字符 释义 httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 e16.ce ...

  6. 通过JS,用a标签代替form中的submit

    ---恢复内容开始--- 有时候在使用表单的时候,不一定会用到表单中的input_submit来提交表单数据,可能会用a.button等来代替 然后自然而然地想到了用JS中的提交表单数据的动作 < ...

  7. 一波骚操作,我把 SQL 执行效率提高了 10,000,000 倍!

    作者:风过无痕-唐 http://www.cnblogs.com/tangyanbo/p/4462734.html 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: create  ...

  8. mysql高级知识

    2 数据约束 2.1什么数据约束 ​ 对用户操作表的数据进行约束 2.2 默认值 作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值. 注意: 1)对默认值字段插入null是可以的. 2)对 ...

  9. java虚拟机笔记-1

    java虚拟机学习笔记 Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行.Java程序的运行需要Java虚拟机.Java API和Java Class文件的配合.Java虚 ...

  10. emit写了个实体转换程序

    就我自己知道的,automapper是常用的,还是比较合适好用.不过我一般采用MVVM模式,其实就是简单的model名称不同而已,而这些转换器升级,扩展的很多,功能丰富,但是我用不到啊,又不能按照自己 ...