background image

 

复制代码 代码如下:
 
<?php

//通过 ini_set('output_buffering', 0)并不生效
//应该编辑/etc/php.ini,设置 output_buffering=0 禁用 output buffering 机制
//ini_set('output_buffering', 0); //彻底禁用 output buffering 功能
for

 (

$i

 = 0; 

$i

 < 10; 

$i

++) {

echo

 

$i

 . '<br/>';

flush

(); 

//通知操作系统底层,尽快把数据给客户端浏览器

sleep(

$i

 + 1); 

//

}
?>
 
现象:与刚才显示并不一致,禁用了 php buffering 机制之后,在浏览器可以断断续续看到
间断性输出,不必等到脚本执行完毕才看到输出。这是因为,数据没有在 php 
output_buffering 中停留。写数据的顺序依次是

echo

->tcp buffer->browser

3.当 output_buffering=4096.,输出数据大于一个 buffer,不调用 ob_start()

 

复制代码 代码如下:
 
#

//创建一个 4kb 大小的文件

$dd

 

if

=/dev/zero of=f4096 bs=4096 

count

=1

<?php

for

 (

$i

 = 0; 

$i

 < 10; 

$i

++) {

echo

 

file_get_contents

('./f4096') . 

$i

 . '<br/>';

sleep(

$i

 +1);

}
?>
 
现象:响应还没结束(http 连接没有关闭),断断续续可以看到间断性输出,浏览器界面不
会一直保持空白。尽管启用了 php output_buffering 机制,但依然会间断性输出,而不是一
次性输出,是因为 output_buffering 空间不够用。每写满一个 php buffering,数据就会发送
到客户端浏览器。
4.当 output_buffering=4096, 输出数据大于一个 tcp buffer, 调用 ob_start()

 

复制代码 代码如下:
 
<?php
ob_start(); 

//开启 php buffer

for

 (

$i

 = 0; 

$i

 < 10; 

$i

++) {

echo

 

file_get_contents

('./f4096') . 

$i

 . '<br/>';