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

  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11048161.html
Copyright © 2011-2022 走看看