开发者社区> 问答> 正文

为什么ob_flush(),flush()无法正常工作?

已查找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

展开
收起
落地花开啦 2016-06-17 15:49:13 2466 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    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调用,应该就有效果。

    2019-07-17 19:42:57
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载