Chinaunix

标题: php如何控制ie7的输出缓存 [打印本页]

作者: sunceenjoy    时间: 2008-01-30 17:40
标题: php如何控制ie7的输出缓存
<?
set_time_limit(0);
ob_start();
ob_implicit_flush ();
for($i = 1; $i <= 4096; $i++ ) print(" ");

For($j = 1; $j <= 40; $j++) {
echo $j."<BR>";
flush();
ob_flush();
sleep(1);
}
?>



上面这段程序在ie6上能正常实现想要的效果:只要程序一运行,就一个一个输出从1-40

但在ie7下表现如下:
如果程序运行的时间足够长(比如50秒),总要等个好几秒,才能开始慢慢输出,如果时间才几秒的话,则完全没有用,要等到程序运行完毕才输出结果。
奇怪的是,测试过程中,总会有1到2次正常,出现ie6的效果.
另外,我让另外一位朋友在ie7上测试,他测试的结果倒是没有问题的。

今天在firefox(5.0)上测试了一下,也不行.由于项目需要(见http://sunceenjoy.1gb.in/demo.php),必须这么干,但因此已经苦恼万分,请各位多发表自己的意见,你们是如何解决的??

[ 本帖最后由 sunceenjoy 于 2008-2-3 11:56 编辑 ]
作者: liuxingyuyuni    时间: 2008-01-30 17:44
标题: set_time_limit(0)
:wink:试试这个
作者: sunceenjoy    时间: 2008-01-30 17:48
楼上的。那只是控制运行时间。跟这个有什么关系了.另外加了也没有用。我原来的就有。
作者: liuxingyuyuni    时间: 2008-01-30 18:02
标题: 因为我这运行...SO...SORRY
( ! ) Fatal error: Maximum execution time of 30 seconds exceeded in D:\www\phpinfo.php on line 10
Call Stack
# Time Memory Function Location
1 0.0013 60016 {main}( ) ..\phpinfo.php:0
作者: liuxingyuyuni    时间: 2008-01-30 18:07
标题: 我同时使用Opera,Firefox,Netscape,IE都试了都是新版
set_time_limit(0)加上这个语句后都正常运行直到结束,维有一次,apache一个进程好像死了.晕
作者: sunceenjoy    时间: 2008-01-30 18:10
你上面出现的错误只是超出默认执行时间了,我已经加上set_time_limit(0); 了,还是依旧。

[ 本帖最后由 sunceenjoy 于 2008-1-30 18:18 编辑 ]
作者: sunceenjoy    时间: 2008-01-30 18:11
你测试的时候用的什么版本啊。要要只是我一个人出问题倒也罢了。
作者: liuxingyuyuni    时间: 2008-01-30 18:16
标题: 统统是最新版,我这确实没有问题.
不过APACHE确实死了一次!这个千真万确.没截图可惜
作者: liuxingyuyuni    时间: 2008-01-30 18:19
标题: http://59.46.16.49/~bianjiang/pic.JPG

作者: sunceenjoy    时间: 2008-01-31 09:04
多谢你的回答。我再试下。
作者: sunnyfun    时间: 2008-01-31 16:31
这么做肯定无法达到预期的效果的,原因是ie内部有个缓冲,当缓冲满的时候才开始显示。用js模拟吧。
作者: carset    时间: 2008-02-01 14:59
这样的事情,最简单的.就是使用js.

如果不能使用js,可以使用 refresh 标签(不过这个标签听说要被废掉啦.但至少现在还是可以用的)
作者: sunceenjoy    时间: 2008-02-02 09:44
谢谢大家回答。出于某种情况,才要这么搞的。我搞了个php的上传进度条,要是另外开个东西搞进度。效果会很差的。
作者: sunnyfun    时间: 2008-02-02 09:59
标题: 回复 #13 sunceenjoy 的帖子
又是上传进度条......在php下面不是很轻松就能搞出来的东西
作者: sunceenjoy    时间: 2008-02-03 11:30
这个是我做的一个进度条的东西,你们可以测试一下
http://sunceenjoy.1gb.in/demo.php
作者: sunnyfun    时间: 2008-02-03 13:37
看不到一个一个出来,一下子就出来了,测试失败。
我在内网上网。
作者: 郁闷RMB    时间: 2008-02-03 16:06
要加上ob_clean()
ob_start()和ob_clean()要成对出现!
还有楼主,你为什么要写那么多无用的代码??用下面的就可以了
<?
set_time_limit(0);
ob_start();
For($j = 1; $j <= 40; $j++) {
echo $j."<BR>";
sleep(1);
flush();
ob_flush();
ob_clean();
}
?>

搞忘记说了.一般进度条那些web页面的效果,都是用js或ajax在客户端表现的.你干嘛用php.

[ 本帖最后由 郁闷RMB 于 2008-2-3 16:09 编辑 ]
作者: carset    时间: 2008-02-03 17:18
php 5 下的实时进度条是不可能的(目前有一个方法是修改php源码+补丁) 据说php6可以.但没有尝试过.如果不要做实时的进度条.不如直接放一个gif图片.
作者: sunnyfun    时间: 2008-02-04 13:05
原帖由 carset 于 2008-2-3 17:18 发表
不如直接放一个gif图片.

哈哈,这个强
作者: sunceenjoy    时间: 2008-02-05 10:19
原帖由 carset 于 2008-2-3 17:18 发表
php 5 下的实时进度条是不可能的(目前有一个方法是修改php源码+补丁) 据说php6可以.但没有尝试过.如果不要做实时的进度条.不如直接放一个gif图片.

老兄,怎么不可能,我的链接你看了吗?
只要你能通过里面的测试,而这就是我要解决的问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2