常用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,或者整页缓存中使用。