ob_flush(),flush()无法正常工作
代码一:能正常工作的代码
';
ob_flush();
flush();
sleep(1);
}
?>
代码二:不能工作的代码
';
ob_flush();
flush();
sleep(1);
}
?>
代码二中,先输出str_pad
(' ', 4096),接着再循环输出1,2,3,……,与代码一的区别仅在于代码一每次循环都需要echo str_pad
(' ', 4096),为什么代码二无法正常运行。
运行环境:
win + php5.3.8
回复内容:
已查找php手册,但没有找到问题的原因。具体如下。
代码一:能正常工作的代码
';
ob_flush();
flush();
sleep(1);
}
?>
代码二:不能工作的代码
';
ob_flush();
flush();
sleep(1);
}
?>
代码二中,先输出str_pad
(' ', 4096),接着再循环输出1,2,3,……,与代码一的区别仅在于代码一每次循环都需要echo str_pad
(' ', 4096),为什么代码二无法正常运行。
运行环境:
win + php5.3.8
PHP中默认的buffer是4096kb,在output到达buffer大小前都会缓存起来,调用flush可以输出buffer中的内容到client。
至于你说的第二个例子不起作用问题,我觉得可能是因为PHP中默认是开启了buffer的,这时候的buffer level是1,你再使用ob_start,buffer level就变为2了,现在flush的内容还是被缓冲到level为1的buffer中,而还未到达默认buffer的size,就不能间隔输出内容了。
另外第二个地理,你可以去掉开头的ob_start调用,应该就有效果。
cache需要达到一定的长度才会在浏览器输出显示的.
Forccy的回答基本正确。稍作补充:
首先,使用如下的方式开启缓存:
if (ob_get_level() == 0) ob_start();
代码二中
echo str_pad(' ', 4096);
向缓冲区中输入了4096字节的内容,这时是不会向下一级别的缓冲区输出的。只有超出了这个容量才会输出。
推荐阅读
-
Win10 build 15019中Gmail等多种谷歌服务无法在正常工作
-
Win10 build 15019中Gmail等多种谷歌服务无法在正常工作
-
苹果M1又出新问题:快速切换屏幕保护程序无法正常工作
-
mysql正常启动后,代码无法连接,报 mysqladmin flush-hosts
-
win10更新KB5003214导致系统托盘无法正常工作的两种方法
-
epson针式打印机与微型打印机无法正常工作现象的有效解决方法介绍
-
Windows11中耳机无法正常工作怎么办?win11耳机插电脑没声音的解决方法汇总
-
因为曾经错误安装过PHP5.2而导致IIS7无法正常工作,显示500错误
-
hhvm 无法正常工作,请问如何安装hhvm_fastcgi请指点。
-
苹果M1又出新问题:快速切换屏幕保护程序无法正常工作