ID: 49816 User updated by: paul at wcclan dot net Reported By: paul at wcclan dot net Status: Open Bug Type: Output Control Operating System: FreeBSD 7.2-RELEASE-p4 PHP Version: 5.2.11 New Comment:
setting zlib.output_compression to Off fixes the problem. I have no output handlers defined. Is there anything more that might of interrest? Previous Comments: ------------------------------------------------------------------------ [2009-10-08 21:12:05] paul at wcclan dot net possibly interresting php.ini setting: zlib.output_compression = On ------------------------------------------------------------------------ [2009-10-08 21:05:50] paul at wcclan dot net Thanks for the response. As far as I know I didn't make any changes to the compression settings. Anything specific I should look at? The request and headers are as follows: GET /ipinfo HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, */* Accept-Language: nl User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; .NET CLR 3.5.30729; .NET CLR 3.0.30729) UA-CPU: AMD64 Accept-Encoding: gzip, deflate Host: ipv6.wcclan.net Connection: Keep-Alive With flush in code (broken output): HTTP/1.1 200 OK Date: Thu, 08 Oct 2009 20:58:50 GMT Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8k PHP/5.2.11 X-Powered-By: PHP/5.2.11 Content-Encoding: gzip Vary: Accept-Encoding Content-Length: 664 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 Without flush in code (correct output): HTTP/1.1 200 OK Date: Thu, 08 Oct 2009 20:59:19 GMT Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8k PHP/5.2.11 X-Powered-By: PHP/5.2.11 Content-Encoding: gzip Vary: Accept-Encoding Content-Length: 750 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 Your hint about compression is correct. Both the requests are handled with compression. The code using flush returns "garbage" the code not using flush returns correct output. ------------------------------------------------------------------------ [2009-10-08 20:44:01] sjo...@php.net Thank you for bug report. The garbage data you see in the browser is the correct page, but compressed. The data is probably automatically compressed by Apache or PHP, without setting the correct headers. Because the headers are not set, the browser does not uncompress the page. Please check your server settings and confirm this is the problem. There may still be a bug here, in that flush() breaks gzip compression. In that case we need some more information on how the compression is configured. ------------------------------------------------------------------------ [2009-10-08 20:06:52] paul at wcclan dot net Description: ------------ Looping through the output of a process opened with popen while using flush return "garbage" in the browser. Using telnet the intended output can be seen in (likely corrupted) chuncked encoding. Commenting out the flush() in below code fixes the problem. Reproduce code: --------------- <? $handle = popen("whois php.net", "r"); if($handle) { while(!feof($handle)) { $buffer = fgets($handle); echo $buffer . "<br />\r\n"; flush(); } pclose($handle); } ?> Expected result: ---------------- the output of the command whois php.net Actual result: -------------- seemingly random garbage in browser. Above script available through: http://ipv6.wcclan.net/test.php ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49816&edit=1