已查找php手册,但没有找到问题的原因。具体如下。
代码一:能正常工作的代码
<?php
set_time_limit(0);
ob_start();
$i = 1;
while (true) {
echo str_pad(' ', 4096);
echo $i++, '<br />';
ob_flush();
flush();
sleep(1);
}
?>
代码二:不能工作的代码
<?php
set_time_limit(0);
ob_start();
echo str_pad(' ', 4096);
ob_flush();
flush();
$i = 1;
while (true) {
echo $i++, '<br />';
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调用,应该就有效果。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。