开发者

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

I'm trying to use early flush with php5/apache2 to execute some code, render some json and after that executing another part of the code that take several second but doesn't produce any response. The basic code so far is:

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);

echo 'Page loading'; // code to render;
ob_flush开发者_JAVA技巧();
flush();

sleep(29); // LONG time code to execute

The previous example does not work. I mean it will echo 'Page loading' after 29seconds. If I looked at the http response I have:

(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

My problem is not really why it doesnt work? but How can I checked where my string get buffered? I know that there is different buffer: - php output_buffer, php zlib.buffer - apache mode_deflate / gzip - browser buffering

All php output buffering are off, apache mode_deflate is activated but as you can see the transfer-encoding is "chunked". I have no idea how to find out where is my problem, I'm using HttpFox to see the header and I try to get the content of the HTTP request, HttpFox say that the content is not ready until the 29seconds are done.

Any advice?


Hmm have you tried ob_get_level() ?


Marc B was right...

I had to make a loop of a 1000, with output_buffering activated

$var = 1000;
while(--$var)
    echo 'Page loading'; // code to render;

To be able to see result before the sleep.

I have to to a loop of 100, with output_buffering = off to get the same result.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜