Una buena forma de ahorrar ancho de banda en nuestras webs es comprimiendo los archivos que la forman. En esta entrada nos centraremos en la compresión en gzip a través de PHP. Esto es útil cuando necesitamos comprimir los archivos de nuestro sitio web pero no podemos cambiar las directivas del servidor.

Todo lo que hay que hacer es encerrar el código entre dos instrucciones PHP:

<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ?>

  ...
  Todo lo que haya aquí será comprimido.
  ...

<?php if(extension_loaded('zlib')){ob_end_flush();}?>

En la primera línea del ARCHIVO estamos diciendo que si existe la extensión requerida para la compresión instalada en nuestro servidor entonces abrimos un buffer de salida, en el cual quedará almacenado todo el código que le siga(ya puede ser código php, html, css, javascript, texto plano, etc.):

<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ?>

En la última línea DEL ARCHIVO lo que hacemos es enviar el contenido del buffer y deshabilitarlo:

<?php if(extension_loaded('zlib')){ob_end_flush();}?>

¿Dónde podemos aplicar esta técnica?

Pues a cualquier archivo. También lo podemos utilizar para comprimir nuestras hojas de estilo, lo único que tenemos que hacer es cambiar la extensión del archivo de hoja de estilo. Por ejemplo:

// Hoja de estilo original: mihojadeestilo.css
div {width: 90%; background-color: #000 }

p {color: black; font-weight: bold }}

... más estilos

Hoja de estilos comprimida(cambios el nombre de la hoja de estilo a mihojadeestilo.css.php)

// Hoja de estilo original: mihojadeestilo.css.php
<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ?>

div {width: 90%; background-color: #000 }

p {color: black; font-weight: bold }}

... más estilos

<?php if(extension_loaded('zlib')){ob_end_flush();}?>

O también podemos agrupar nuestros archivos javascript en un único archivo y aplicarles compresión:

// Archivo: principal.js.php
<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} ?>

require_once('jquery-1.6.4.min.js');
require_once('jQueryRotate.2.1.js');
require_once('jrumble.1.1.min.js');
?>

 ... Aquí más código javascript

<?php if(extension_loaded('zlib')){ob_end_flush();}?>

Como ves es tan sencillo como cambiar la extensión del archivo y añadir las líneas anteriores al principio y final de éste