I’m testing my site where i use ob_gzhandler to compress output and got an interesting error. According to docs “If a browser doesn’t support compressed pages this function returns FALSE”.
Here is my test code:
<?php
$res = ob_start( 'ob_gzhandler' ) ;
echo 'My text' ;
var_dump( $res ) ;
I’m using ff5.0 and if i don’t change any headers all works fine, here is the listing:
Live HTTP Headers ouput
http://tester.loc/ob-test/gz.php
GET /ob-test/gz.php HTTP/1.1
Host: tester.loc
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://tester.loc/ob-test/
Cache-Control: max-age=0
HTTP/1.1 200 OK
Date: Wed, 06 Jul 2011 10:37:45 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 126
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Script output:
My text
boolean true
But when i remove Accept-Encoding header, ob_gzhandler still returns true. Listing again:
Live HTTP Headers ouput
http://tester.loc/ob-test/gz.php
GET /ob-test/gz.php HTTP/1.1
Host: tester.loc
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://tester.loc/ob-test/
Cache-Control: max-age=0
HTTP/1.1 200 OK
Date: Wed, 06 Jul 2011 10:35:52 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Length: 109
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Script output
My text
boolean true
So in both cases ob_gzhandler returns true though it supposed to be false in the second sample. Is it my misunderstanding or a bug?
Thanx in advance
It’s the
function itself which will return false, this isn’t what you are calling (directly).
ob_start() only returns false if the callback fails, I don’t think that ob_gzhandler() returning false is the same as it failing.