原文地址:https://www.bbsmax.com/A/x9J2vXWVJ6/

一句话总结:

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

  1. 下面说一下用php自带的ob缓存机制实现页面静态化的方法,示例代码如下

  2. <?php

  3.  

  4.        $id=$_REQUEST['id'];

  5.  

  6.        //判断缓存文件是否存在,如果存在,直接输出

  7.        if(file_exists('content'.$id.'.html')){

  8.            echo file_get_contents('content'.$id.'.html');

  9.            return;

  10.        }

  11.  

  12.        //开启缓存机制

  13.        ob_start();

  14.  

  15.        //到数据库中查询所需要的内容

  16.        $conn=mysql_connect("localhost","root","root");

  17.        mysql_select('db');

  18.        mysql_query('set names utf8');

  19.  

  20.        $sql="select content from table_name where id=$id";

  21.        $res=mysql_query($sql);

  22.        $row=mysql_fetch_assoc($res);

  23.        $content=$row[0];

  24.  

  25.        mysql_free_result($res);

  26.        mysql_close($conn);

  27.        echo $content;

  28.        //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出

  29.        file_put_contents('content'.$id.'.html',ob_get_contents());

  30.  

  31. ?>

  32.  

  33. 如上述代码所示:

  34. 将我们查询到的内容直接保存到html文件中,如果文件存在,之间输出,如果不存在,则访问数据库,执行对应的查询过程

  35. 如果要设置文件的过期时间,可以在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()

静态缓存的案例:

  1.    public function look(){

  2.        if(!is_file('k780.html')){

  3.            ob_start();

  4.            $this->load->view("k870");

  5.            $content=ob_get_contents();

  6.            $fb=fopen('k780.html',"w");

  7.            fwrite($fb,$content);

  8.            fclose($fb);

  9.        }else{

  10.            echo "I am is copy";

  11.            echo file_get_contents('k780.html');

  12.        }

  13.    }

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

  1.     <div class="top_uinfo" id="aaaa"></div>

  2.            <script>

  3.                $(function(){

  4.                    $.get('pos',function(e){

  5.                        $('#aaaa').html(e);

  6.                    })

  7.                })

  8.            </script>

  9.    public function pos(){

  10.        if(!empty($_COOKIE['name'])){

  11.            echo $_COOKIE['name'];

  12.            echo '<a href="logout">退出</a>';

  13.        }else{

  14.            echo '<a href="login">登陆</a>';

  15.        }

  16.    }



 

三、利用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()-设置的过期时间


相关推荐

MySQL 查询速度优化 与性能优化总结[转载]

基础概念简述锁数据库通过锁机制来解决并发场景 — 共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源;写锁是排他的,并且会阻塞其他的读锁和写锁。简单提下乐观锁和悲观

$zbp对象函数:zblog更新缓存[清空缓存并重新编译模板]函数

更新缓存分下面三部,.如果前面两部已经执行过了 则可直接使用misc_statistic()来更新各种数据和缓存.require '../../../../zb_system/function

nginx如何调用php(nginx+php运行原理) (转载)

转自:http://t.zoukankan.com/echojson-p-10830302.html采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是

zblog php 全站纯静态化 Zblog静态化缓存 Seo插件

本插件生成首页静态化,分类页,文章页纯静态文件后 网站打开速度会有明显提升.减轻服务器负担.可以手动批量生成可以根据条件自动触发,可设置: 更新文章时,是否自动更新上下篇 更新文章时,是否自动更新

php禁止浏览器对页面进行缓存header()设置

php禁止浏览器对页面进行缓存header()设置 以下三行是为了对不同浏览器进行兼容处理header("Cache-Control:no-cache"); header(&qu

php mysqli_query() 函数用法

mysqli_query(mysql连接,sql语句) 的使用:参数一:MySQL 连接参数二:sql语句参数三:可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需

php组相关的函数大全

函数名函数简介array新建一个数组array_change_key_case返回字符串键名全为小写或大写的数组array_chunk将一个数组分割成多个array_column返回数组中指定的一列a

php字符串处理函数大全

函数名函数简介addcslashes以 C 语言风格使用反斜线转义字符串中的字符addslashes使用反斜线引用字符串bin2hex函数把ASCII字符的字符串转换为十六进制值choprtrim 的

C/C++ GDI自绘之 双冲绘制技术 解决GDI绘图效率问题

Windows绘图原理我们在Windows环境下看到各种元素,如菜单、按钮、窗口、图像,都是“画”出来的。这时的屏幕,就相当于一块黑板,而Windows下的各种GDI要素,如画笔、画刷等,就相当于彩色

25,垃圾站群阶段性总结需要注意的

本文档适合初期理解混乱的新手小白做垃圾站,做精品站的请绕路...没有看过前面24个文档的新手不建议看此文档,前面看过了,那么你不理解的问题以及即将问的问题或者未来的问题基本没有多少了---------