72 PHP 输出缓冲
来源:互联网 发布:plc功能块编程标准 编辑:程序博客网 时间:2024/04/30 23:18
PHP中刷新输出缓冲
buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入 一个字符,操作系统并不会立即把这个字符直接写入到磁盘,而是先写入到buffer,当写满了一个buffer的时候,才会把buffer中的数据写入磁 盘,当然当调用内核函数flush()的时候,强制要求把buffer中的脏数据写回磁盘。
在PHP中与刷新缓冲相关的函数有三个:
1). flush
刷新PHP程序的缓冲,而不论PHP执行在何种情况下。该函数将当前为止程序的所有输出发送到用户的浏览器。 但是该函数不会对服务器或客户端浏览器的缓存模式产生任何影响,也不会对PHP本身的缓存产生任何影响。
2).ob_flush
该函数对PHP本身的的缓存进行输出。PHP本身的缓存受php.ini中的output_buffering的控制。ob_flush()的作用就是将本来存在输出缓存中的内容取出来,设置为等待输出状态,但不会直接发送到客户端,这时你就需要先使用ob_flush()再使用flush(),客户端才能立即获得脚本的输出。
3).ob_implicit_flush
这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。
以下是举例:
- <?php
- ob_end_clean();
- echo
str_pad(" " ,256); - for
( $i=100;$i>0; $i--) { -
echo $i, '<br/>'; -
flush(); -
sleep(1); - }
- ?>
- <?php
- echo
str_pad(" " ,256); - for
( $i=100;$i>0; $i--) { -
echo $i, '<br />' ; -
ob_flush(); -
flush(); -
sleep(1); - }
- ?>
- <?php
- ob_implicit_flush(true);
- echo
str_pad(" " ,256); - for
( $i=100;$i>0; $i--) { -
echo $i, '<br />' ; -
ob_flush(); -
sleep(1); - }
- ?>
另外我们还需要注意刷新缓冲不光受以上几方面的影响,还受以下影响:
1). 个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函 数产生的结果不会立即被发送到客户端浏览器。甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
2). PHP安装模式的影响。以上方式对于PHP以Apache模块方式安装的情况,可以直接使用。
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 4k
gzip off;
PHP函数说明:
2.相关flush类似函数如下
- flush
- ob_ clean
- ob_ end_ clean
- ob_ end_ flush
- ob_ flush
- ob_ get_ clean
- ob_ get_ contents
- ob_ get_ flush
- ob_ get_ length
- ob_ get_ level
- ob_ get_ status
- ob_ gzhandler
- ob_ implicit_ flush
- ob_ list_ handlers
- ob_ start
- output_ add_ rewrite_ var
- output_ reset_ rewrite_ va
- 72 PHP 输出缓冲
- php输出缓冲问题!
- php缓冲输出flush
- PHP刷新输出缓冲
- php输出缓冲机制
- PHP 缓冲输出
- PHP输出缓冲控制
- PHP输出缓冲(二)-- 缓冲配置
- 剖析PHP中的输出缓冲
- 剖析PHP中的输出缓冲
- PHP flush刷新输出缓冲
- PHP中刷新输出缓冲
- PHP中刷新输出缓冲
- 剖析PHP中的输出缓冲
- PHP中刷新输出缓冲
- PHP中刷新输出缓冲
- PHP输出缓冲(三)-- 相关缓冲函数
- 剖析PHP中的输出缓冲 flush之类
- (笔记)鼠标移动到一个 元素上所触发的事件
- Java基础——IO流(四)
- exit函数 和 _exit函数区别
- NGUI-实例化问题
- 书籍介绍
- 72 PHP 输出缓冲
- C++基础---失控指针、迷途指针、野指针、悬浮指针及空指针
- Tarjan 算法求LCA(Least Common Ancestors)
- lua实现继承、多态
- CentOS 64位上编译Hadoop 2.6.0源码包
- python抓取新浪微博配图
- IOS 友盟错误分析
- Search for a Range
- 关于时间管理的一些沉淀