PHP ob缓冲区函数的使用

常用ob系函数:

  • ob_start() - 把输出内容先输出到缓冲区,而不是到浏览器。
  • ob_get_contents() - 返回输出缓冲区的内容
  • ob_flush() - 冲刷出(送出)输出缓冲区中的内容,php output_buffering机制中缓冲的buffer内容满了后把缓冲区的内容输出到客户端。[因此通常需要结合flush()一起使用]
  • ob_clean() - 清空(擦掉)输出缓冲区
  • ob_end_flush() - 冲刷出(送出)输出缓冲区内容并关闭缓冲,在output_buffering机制,通常需要结合flush()一起使用。
  • ob_end_clean() - 清空(擦除)缓冲区并关闭输出缓冲,等效删除缓冲区
  • flush() - 刷新输出缓冲,立即把缓冲区的内容输出到客户端。

ob_flush()或ob_end_flush()和 flush() 通常一起使用:

eg:

ob_flush();
flush();

 

常见使用步骤:

ob_clean(); // 必须放到ob_start() 之前,否则会出现乱码。
//开启缓冲区
ob_start();

......
echo ...
echo ...
......

//获取缓冲区的内容
$str = ob_get_contents();

# 在使用过程中可调用ob_clean();来清除缓冲区内容

//输出缓冲区内容
ob_flush(); 
flush();

//关闭缓冲区
ob_end_clean();

 

基本原则:

  如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器。

 

常见应用场景:

  • 防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。
  • 捕捉对一些不可获取的函数的输出,比如phpinfo()。
  • 对输出的内容进行处理。例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
  • 生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
posted @ 2020-01-02 15:27  纭卿殇  Views(439)  Comments(0Edit  收藏  举报