我正在尝试使用php5/apache2的早期刷新来执行一些代码,呈现一些json,然后执行代码的另一部分,这些部分需要几秒钟的时间,但不会产生任何响应。到目前为止的基本代码是:
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
echo 'Page loading'; // code to render;
ob_flush();
flush();
sleep(29); // LONG time code to execute
前面的例子不起作用。我的意思是,它将在29秒后回复"页面加载"。如果我查看http响应,我会得到:
(Status-Line) HTTP/1.1 200 OK
Date Mon, 04 Jul 2011 19:49:19 GMT
Server Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.3.0
X-Powered-By PHP/5.3.0
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Keep-Alive timeout=5, max=100
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/html
我的问题不是为什么它不起作用?但是我如何检查字符串的缓冲位置?我知道有不同的缓冲区:-php输出缓冲区,php zlib.buffer-apache mode_deflate/gzip-浏览器缓冲
所有php输出缓冲都关闭,apachemode_deflate被激活,但正如您所看到的,传输编码是"分块的"。我不知道如何找出我的问题所在,我正在使用HttpFox查看标头,并尝试获取HTTP请求的内容,HttpFox说,直到29秒完成,内容才准备好。
有什么建议吗?
嗯,你试过ob_get_level((吗?
Marc B是对的。。。
我不得不在输出缓冲激活的情况下循环1000
$var = 1000;
while(--$var)
echo 'Page loading'; // code to render;
能够在睡觉前看到结果。
我必须循环到100,output_braining=off才能得到相同的结果。