Bug #12631: Fatal: ob_get_length() returns wrong value when compressed OB is on
| From: | troels at arvin dot dk | Date: | Tue, 07 Aug 2001 18:11:53 +0000 |
| Subject: | Bug #12631: Fatal: ob_get_length() returns wrong value when compressed OB is on | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-62472@lists.php.net to get a copy of this message | ||
From: troels@arvin.dk
Operating system: Linux
PHP version: 4.0.6
PHP Bug Type: Output Control
Bug description: Fatal: ob_get_length() returns wrong value when compressed OB is on
When output buffering is on, using the gzhandler, then ob_get_length()
returns the uncompressed content length in stead of the actual (compressed)
payload.
This is fatal if a Content-Length HTTP-header is sent and the browser
implements HTTP keep-alive. The result is a web-site which appears to be
down or with extremely slow responses.
Example PHP code:
<?php
ob_start('ob_gzhandler');
print "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // 30 a's
print "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; // 30 b's
print "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // 30 a's
header('Content-Length: '.ob_get_length());
ob_end_flush();
?>
If this is saved as http://localhost/ob.php then try the
following wget
command:
wget --header="Accept-Encoding: gzip" --header="Connection: close" -S
http://localhost/ob.php
Notice that wget displays the following error message continuously:
Connection closed at byte 36. Retrying.
Also notice that the web-server told wget to expect 90 bytes (the
uncompressed payload).
--
Edit bug report at: http://bugs.php.net/?id=12631&edit=1