ob_flush():这个函数将送出缓冲的内容,如果想进一步处理缓冲区内容的话需要在ob_flush()之前调用ob_get_content(),因为ob_flush()之后缓冲区的内容就会被丢弃,而不是将缓冲区销毁。ob_end_flush()会将缓冲区销毁和ob_end_clean()一样。
那什么是缓冲呢,缓冲就是内存地址的空间。PHP的缓冲默认是开启的,在PHP.ini中ouotput_buffering配置,缓冲区大小是4096k,当PHP执行echo 或者是 print时,是将数据先写入PHP的buffer中,当buffer写满,会将这些数据通过tcp输出到浏览器显示。你可以通过ob_start()手动激活output_buffer机制,使得即便超过1kb也不会真通过tcp传递给浏览器buffer,因为ob_start()已经将PHP buffer设置的足够大,只有知道脚本结束或者使用ob_end_flush()函数,才会将数据传送给浏览器。
具体流程:echo/print --- php buffer --- tcp buffer(系统buffer) --- 浏览器buffer --- 显示器显示
论flush()和ob_flush()的区别
没有开启缓存:
flush():在没有开启缓冲区时,脚本输出的内容都在服务器端处于等待输出的状态 ,flush()可以将等待输出的内容立即发送到浏览器
开启缓存:
flush():在开启缓存时使用flush() ,不会像浏览器发送任何数据,因为数据都在缓冲区中没有处于等待输出的状态的数据。
ob_flush() :通过上面的定义我们得知,它就是将缓冲的内容送出来,也就是将数据变成处于等待输出的状态,但是并不会发送到客户端,然后使用flush()就能将数据在浏览器上输出