php实现边执行边输出 ob_start(); for ($i = 0; $i < 100; $i++) { echo "waiting...<br>"; flush(); ob_flush(); sleep(1); } ob_end_flush(); 以上这段代码怎么不是慢慢输出的,而是一次就输出了啊??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这与浏览器有关. 在ie6,ff2,ff3,我下面的代码可以执行.但要求php.ini output_buffering = Off才行.这个就当是玩就行了,没有什么实际意义.ob_end_clean();ob_implicit_flush(true);for ($i=10; $i>0; $i--){ echo $i . "<br/>"; sleep(1);} 还是不行,是不是php或者apache哪里要设置啊?我也是IE6 IE6新开的窗口,前256个字节是不立即显示的。你先输出一段无用文字就可以了。ob_end_clean();ob_implicit_flush(true);for($i=0;i<26;$i++) echo "<span></span>";for ($i=10; $i>0; $i--){ echo $i . "<br/>"; sleep(1);} php.ini output_buffering = Off已经设置了 虽然是很老前的话题了,还是帮忙给楼上的各位纠正下吧,以免误导后生首先,可以确定,php.ini output_buffering = Off这样的做法是完全错的(看来都没搞清楚ob的用途)这只是关闭缓冲区,关闭缓冲区当然会把内容推送到浏览器,但绝不推荐这样的,缓冲区在绝大部分时候是很有用的。正确的代码应该如下:<?phpignore_user_abort(true);header( 'Content-Type: text/html;charset=utf-8' );echo 'begin...<br>';flush(); //直接推送到浏览器for($i=0;$i<10;$i++){ echo 'loading '.$i.'0%<br>'; // 如果浏览器已关闭 if ( connection_aborted() ) { exit; //如果希望关了浏览器后程序继续执行,把这行去掉即可 } flush(); sleep(1);}echo 'ok';经实验,上面的header是必须的,否则浏览器还是会到执行完毕才显示。用的是flush,而并非ob_的方法,flush可以把内容直接推送到浏览器,而ob只是推送到apache的缓冲区 再补充下,刚发现IE6里有问题,输出一定长度的空格即可解决,完整代码如下:<?phpignore_user_abort(true);header( 'Content-Type: text/html;charset=utf-8' );echo str_pad("",1000); //输出1000个空格echo 'begin...<br>';flush();for($i=0;$i<10;$i++){ echo 'loading '.$i.'0%<br>'; if ( connection_aborted() ) { exit; } flush(); sleep(1);}echo 'ok'; 你应该将ob_flush 和 flush 一起用吧服务器端设置了缓存的话 只有flush应该无法立即推送到浏览器端的 本帖最后由 xuzuning 于 2011-07-05 19:40:04 编辑 这个程序为什么不能遍历文件夹下的所有文件和文件夹? 请教一个mysql的问题 php!!菜鸟求教 php数据库常用操作类 调用JS文件不能运行了 站内搜索大小写的问题 php 关注/粉丝 每增加一个粉丝就有一个提示 关于php中几个函数的使用方法? 高分求解,关于cookie的问题! 无法用与Oracle连接的函数? pear国内为什么使用的这么少? 新手请教大家关于PHP判断的语句
在ie6,ff2,ff3,我下面的代码可以执行.
但要求php.ini output_buffering = Off才行.这个就当是玩就行了,没有什么实际意义.ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
echo $i . "<br/>";
sleep(1);
}
ob_implicit_flush(true);
for($i=0;i<26;$i++) echo "<span></span>";for ($i=10; $i>0; $i--)
{
echo $i . "<br/>";
sleep(1);
}
ignore_user_abort(true);
header( 'Content-Type: text/html;charset=utf-8' );
echo 'begin...<br>';
flush(); //直接推送到浏览器
for($i=0;$i<10;$i++)
{
echo 'loading '.$i.'0%<br>';
// 如果浏览器已关闭
if ( connection_aborted() )
{
exit; //如果希望关了浏览器后程序继续执行,把这行去掉即可
}
flush();
sleep(1);
}echo 'ok';
经实验,上面的header是必须的,否则浏览器还是会到执行完毕才显示。
用的是flush,而并非ob_的方法,flush可以把内容直接推送到浏览器,而ob只是推送到apache的缓冲区
<?php
ignore_user_abort(true);
header( 'Content-Type: text/html;charset=utf-8' );
echo str_pad("",1000); //输出1000个空格
echo 'begin...<br>';
flush();
for($i=0;$i<10;$i++)
{
echo 'loading '.$i.'0%<br>';
if ( connection_aborted() )
{
exit;
}
flush();
sleep(1);
}echo 'ok';
服务器端设置了缓存的话 只有flush应该无法立即推送到浏览器端的