怎样立即输出缓存区内容?使用了flush()但总是不能立即看到输出。

seai 2010-11-14 01:10:52
<?php
ob_start();
ob_end_clean();
ob_implicit_flush(true);
ob_end_flush();
for($i=1;true;$i++){
echo $i.'<br/>';
ob_flush();
flush();
sleep(1);
}
?>

环境:rhel5.5+apache+php5.3.2+firefox3.6
...全文
231 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
seai 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yangball 的回复:]

记得我以前做过这个,但需要配合服务器配置,所以没再研究下去了。
[/Quote]


证实是gzip的问题,不过我在.htaccess文件关闭似乎没起作用,在httpd.conf文件中关闭重起才起作用的。不知道是不是.htaccess文件问题,还是不能通过.htaccess文件关闭gzip。
床上等您 2010-11-15
  • 打赏
  • 举报
回复
记得我以前做过这个,但需要配合服务器配置,所以没再研究下去了。
seai 2010-11-15
  • 打赏
  • 举报
回复
配置文件中去掉了mod_deflate.so模板,请求页面时响应头还是gzip,这是怎么回事呢?
seai 2010-11-15
  • 打赏
  • 举报
回复
重新测试确定了问题的所在:浏览器观察不到效果,但在命令脚步执行方式能观察到效果。说明是浏览器缓存的原因。请大家帮忙解决一下。谢了。
小斌online 2010-11-15
  • 打赏
  • 举报
回复
你不先输出全部内容,他咋个给你压缩
seai 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 helloyou0 的回复:]

检查你的apache有无压缩输出
[/Quote]


等下我关了压缩试试看。如果是压缩的原因,请问有没有办法,保证各种配置环境下都能做到“立即”输出到页面的要求?
helloyou0 2010-11-15
  • 打赏
  • 举报
回复
检查你的apache有无压缩输出
seai 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alex_best 的回复:]

我在我机器上已经试过了,没有问题!~每隔一秒 输出一个

引用 1 楼 alex_best 的回复:

PHP code

<?php
ob_start();
for($i=1;true;$i++){
ob_flush();
echo $i.'<br/>';
flush();
sleep(1);
}
?>
[/Quote]

你的环境是什么,我确定你给的代码在我的环境中是不行的:环境:rhel5.5+apache+php5.3.2+firefox3.6。
igaojie 2010-11-14
  • 打赏
  • 举报
回复
我在我机器上已经试过了,没有问题!~每隔一秒 输出一个

[Quote=引用 1 楼 alex_best 的回复:]

PHP code

<?php
ob_start();
for($i=1;true;$i++){
ob_flush();
echo $i.'<br/>';
flush();
sleep(1);
}
[/Quote]
seai 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 std01 的回复:]

如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的!加上这句就好了:
echo str_repeat(' ',256);
[/Quote]

加了这个也没用,而且我加的是4096。

<?php
ob_start();
for($i=1;$i<=5;$i++){
ob_flush();
echo str_repeat(' ',4096);
echo $i.'<br/>';
flush();
sleep(1);
}
?>

另外还请大家看明白了,cache内容长度的要求是IE的特点,firefox并无这样的要求。不论怎么说,我加了4096了,还不够?
std01 2010-11-14
  • 打赏
  • 举报
回复
如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的!加上这句就好了:
echo str_repeat(' ',256);
seai 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alex_best 的回复:]

PHP code

<?php
ob_start();
for($i=1;true;$i++){
ob_flush();
echo $i.'<br/>';
flush();
sleep(1);
}
[/Quote]


你确定你的代码是正确的吗?我在自己的环境上测试还是没用:
<?php
ob_start();
for($i=1;$i<=5;$i++){
ob_flush();
echo $i.'<br/>';
flush();
sleep(1);
}
改成这样,可以看到,明显是一次性输出所有内容,而不是每一秒钟输出一部分内容。
igaojie 2010-11-14
  • 打赏
  • 举报
回复

<?php
ob_start();
for($i=1;true;$i++){
ob_flush();
echo $i.'<br/>';
flush();
sleep(1);
}

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧