如何找到使用HTTP协议缓冲数据的位置


How to find out where data is buffered with HTTP protocol?

我正在尝试使用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才能得到相同的结果。