zoukankan      html  css  js  c++  java
  • PHP缓存技术OB系统函数(总结)

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

  • 相关阅读:
    hadoop2 作业执行过程之作业提交
    Hadoop各个服务端口列表
    基于 Nginx 和 FFmpeg 搭建流媒体服务器
    prometheus
    ubuntu 下dbus的环境搭建和使用
    Hadoop-Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster —
    Exception message: /bin/bash: line 0: fg: no job control
    P3942 将军令 [贪心]
    P3941 入阵曲
    P3941 入阵曲
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11048161.html
Copyright © 2011-2022 走看看