• 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)


    我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用

     例子:

      当访问一个页面时,先判断是否存在缓存,存在则直接输出缓存文件中的内容,否则,先查询数据库,获得数据,生成缓存文件。

       

    详解PHP缓存机制:

      output_buffering,常用的函数

      ob_start()       开启PHP缓存机制功能

      ob_get_contents()  返回输出缓冲区的内容

      ob_clean()       清空(擦掉)输出缓冲区

      ob_end_clean()     清空(擦除)缓冲区并关闭输出缓冲

      ob_flush()       冲刷出(送出)输出缓冲区中的内容

      ob_end_flush()     冲刷出(送出)输出缓冲区内容并关闭缓冲

      flush()        刷新输出缓冲(刷新程序缓存内容)

    通常是ob_flush();flush()同时一起使用

    使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。
    然后用ob_get_contents()得到缓冲区的数据。

    ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。

    函数ob_end_clean() 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
    此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
    这样的话, 能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。

    面试题:

      简述ob_flush()和flush()的区别!

    答:
    
          ①ob_flush()  冲刷出(送出)输出缓冲区中的内容
          ②flush()    刷新输出缓冲(刷新程序缓存内容)该函数将当前为止程序的所有输出发送到用户的浏览器
    
                 该函数将当前为止程序的所有输出发送到用户的浏览器
                 个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。
    
                 有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。甚至               浏览器也会在显示之前,缓存接收到的内容。
    
                 例如:
    
                    Ⅰ Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到</table> 标记之前,不会显示出整个表格。
    
                    Ⅱ 一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来                   让这些浏览器显示页面内容

      浅谈ob_flush()和flush()的用法!  

    flush和ob_flush的使用上有一些特别注意的地方,造成无法刷新输出缓冲。
    
         一. flush和ob_flush的正确顺序,先ob_flush再flush.
    
          如下:
    
            ob_flush(); flush();
    
            如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。
    
            但是在Linux系统上就无法刷新输出缓冲。
    
         二. 使用ob_flush()前,确保前面的内容大小足够4069字符。
    
           一些Web服务器的output_buffering默认是4069字符或者更大,//一般是php.ini中 output_buffering = 4069
    
          即输出内容必须达到4069字符服务器才会flush刷新输出缓冲,
    
          为了确保flush有效,最好在ob_flush()函数前有以下语句:
    
          print str_repeat(" ", 4096);
    
           以确保到达output_buffering值。

         

    如果要测试PHP缓存机制,需要做如下配置:

    php.in文件
    
      display_errors = On
    
      output_buffering = Off
    
      error_reporting = 设置错误级别
    
            错误级别:
    
                E_ALL      (Show all errors, warnings and notices including coding standards.)
    
                E_ALL & ~E_NOTICE      (Show all errors, except for notices)
    
                E_ALL & ~E_NOTICE & ~E_STRICT          (Show all errors, except for notices and coding standards warnings.)
    
                E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR      (Show only errors)

     

      

    ---- 始终相信这句:
    ----“做每天该做的事,不计结果!”
    ---- 因爲對於編程還只是新手,對很多知識掌握的不牢靠,歡迎大家批評指正~~|=-=|~~
  • 相关阅读:
    PyCharm小技巧
    How to install torcs package in Debian
    QT4.8.6静态编译
    Debian初识(选择最佳镜像发布站点加入source.list文件)
    Dev-C++ 小问题锦集
    ubuntu 12.04lts 安装mysql ,并通过QT连接
    win7下安装ubuntu14.04lts 双系统
    cmake打印变量值
    驾车常识:小轿车灯光
    汽车点火开关的功能介绍
  • 原文地址:https://www.cnblogs.com/Zell-Dinch/p/3901721.html
Copyright © 2020-2023  润新知