You are here

How to enable gzip compression with Php(T)

Blog Terms: 

Enabling Gzip Compression

In many forums and on many webpages it has been widely proclaimed that to enable gzip compression using php is as easy as adding a single line of code at the beginning of each page. This is not false, however it is not the best way of doing it. Before continuing, here's the code. It takes advantage of Php's buffered output and buffers all output of the script until the Php engine has completed, and then runs all the output through a special function that gzip compresses it before sending it on to the browser.

Here is the code. Just place this at the very top of all your Php pages and it will send gzip-compressed output to the browsers.

Example Code
<?php
    ob_start
("ob_gzhandler");
?>

Comments:

<?php
ob_start(‘ob_gzhandler’);
echo ‘GZIP compression testing string’;
ob_end_flush();
?>

This method is dependant on the Apache server and in addition, the mod_gzip module must be installed and loaded.

Other Methods to Enable Gzip Compression

The method mentioned above is quick and easy, but the downfalls are that it only works on Apache with mod_gzip. Not only that, but according to the Php manual, that is not the preferred method for gzipping.

(From the Php manual at www.php.net)
note that using zlib.output_compression is preferred over ob_gzhandler().
Another method of gzipping is as follows:
Example Code
<?php


// Include this function on your pages
function print_gzipped_page() {

    global 
$HTTP_ACCEPT_ENCODING;
    if( 
headers_sent() ){
        
$encoding false;
    }elseif( 
strpos($HTTP_ACCEPT_ENCODING'x-gzip') !== false ){
        
$encoding 'x-gzip';
    }elseif( 
strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false ){
        
$encoding 'gzip';
    }else{
        
$encoding false;
    }

    if( 
$encoding ){
        
$contents ob_get_contents();
        
ob_end_clean();
        
header('Content-Encoding: '.$encoding);
        print(
"\x1f\x8b\x08\x00\x00\x00\x00\x00");
        
$size strlen($contents);
        
$contents gzcompress($contents9);
        
$contents substr($contents0$size);
        print(
$contents);
        exit();
    }else{
        
ob_end_flush();
        exit();
    }
}

// At the beginning of each page call these two functions
ob_start();
ob_implicit_flush(0);

// Then do everything you want to do on the page
echo 'Hello World';

// Call this function to output everything as gzipped content.
print_gzipped_page();


?>


From http://www.webcodingtech.com/php/gzip-compression.php

There is still no Gzip output function for PHPMyWMS SVGz, later I will try this.