Comprimir hojas de estilo via PHP y mod_rewrite
Escrito el 16 Jun, 2009 por Alexis en CSS
Roger Stringer nos enseña como automatizar el proceso de comprimir hojas de estilos y Js “on the fly” por medio de PHP y mod_rewrite.
La velocidad de carga en un sitio es algo fundamental, si tenemos varios hojas de estilos y archivos Js, lo mejor sería tenerlos comprimidos. Si bien podemos comprimir dichos archivos con varias herramientas online o localmente, esta es una receta que nos ahorrara tiempo.
Básicamente se creara un archivo en PHP que “leerá” los CSS y JS y borrara todos los espacios en blanco y nos devolverá un archivo comprimido.
Primeramente crearemos un archivo llamado csszip.php:
<?php ob_start ("ob_gzhandler"); if( isset($_REQUEST['file']) ){ $file = $_REQUEST['file']; $ext = end(explode(".", $file)); switch($ext){ case 'css':$contenttype = 'css';break; case 'js':$contenttype = 'javascript';break; default:die();break; } header('Content-type: text/'.$contenttype.'; charset: UTF-8'); header ("cache-control: must-revalidate"); $offset = 60 * 60; $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT"; header ($expire); $data = file_get_contents($file); $data = compress($data); echo $data; } exit; function compress($buffer) { $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer); return $buffer; }
csszip.php tomara los argumentos dados y comprimirá el archivo.
Ahora, para automatizar el proceso de carga, crearemos una nueva regla en nuestro archivo .htaccess (localizado en el root del directorio).
RewriteEngine On RewriteRule ^(.*).css$ /csszip.php?file=$1.css [L]
Si la regla RerwriteEngine On ya se encuentra presente, la obviamos y procedemos con la siguiente línea.
Cada vez que se envié una consulta a algún archivo .CSS este será comprimido por el archivo csszip.php y la nueva regla en .htaccess
Si deseamos comprimir archivos JS, solo añadimos esta regla:
RewriteRule ^(.*).js$ /csszip.php?file=$1.js [L]
Notaras luego de implementar esta pequeña receta, como el tiempo de carga y el consumo de bandwidth se reducen, lo que se traduce en una página que cargara más rápido y te ahorras algunos megas en tu consumo mensual de bandwidth.
Articulo original escrito por Roger Stringer









