VicenteSabuco.com

Compresión gzip en hosting compartido 1&1

Contratar un hosting compartido, conlleva el delegar la gestión del servidor en manos de otros. Suele pasar que el servidor en donde tengamos nuestro sitio alojado no disponga de todos los módulos necesarios para una perfecta optimización de nuestra web. Una de esas optimizaciones es la compresión gzip. Comprimiendo mediante gzip conseguimos reducir el tamaño del html, css y JavaScript a una tercera parte de su tamaño. Siendo esta la manera más eficiente de ahorrar en transferencia de datos. Tema importante también en términos económicos ya que en algunos hostings tenemos transferencia limitada a cierta cantidad.

Paso a describir la forma mediante la cual he conseguido activar la compresión gzip en mi hosting 1&1. Lo primero que hay que hacer es añadir un par de líneas en el .htaccess para que los archivos sean parseados en php5 correctamente:

AddType x-mapp-php5 .php .shtml .html .htm .js .txt .css
AddHandler x-mapp-php5 .php .shtml .html .htm .js .txt .css

Aquí añadimos las extensiones que vayamos a comprimir. Principalmente contenido html y texto como JavaScript o CSS.

Activar la compresión gzip

La activación de la compresión gzip la podemos activar en el php.ini con el siguiente código:

zlib.output_compression = On
zlib.output_compression_level = 9
allow_url_fopen = On

En otros hostings con más módulos activados esto lo suelen hacer a nivel de .htaccess pero a mí no me ha funcionado de esa forma. Con la primera línea estamos activando la compresión en sí. La segunda línea fija el nivel de compresión, los niveles están comprendidos entre 0 y 9. En este caso estamos aplicando la compresión gzip al máximo. Por último se habilitan las envolturas fopen de tipo URL que permiten el acceso a objetos URL como archivos. Las extensiones zlib registran envolturas adicionales.

Problema con las cabeceras de los archivos css y javascript comprimidos

Hasta este punto podremos ver con herramientas como el plugin YSlow de Firefox que la compresión gzip se lleva a cabo. Pero en ciertos navegadores fallan los estilos y el JavaScript contenido en archivos externos. Esto es debido a que la compresión está cambiando las cabeceras de estos archivos a html corriente. La forma de solucionarlo es especificar el tipo de archivo para cada uno de ellos mediante programación.
Lo hacemos con el siguiente código:

$pathinfo = pathinfo($_SERVER['PHP_SELF']);
$extension = $pathinfo['extension'];
if($extension == "css")
{
	header("Content-type: text/css");
}
if($extension == "js")
{
	header("Content-type: text/javascript");
}

Ahora hay que especificar que en cada llamada se consulte este archivo añadiendo esta línea al php.ini:

auto_prepend_file = [RUTA_FISICA]/contentHeader.php

Intenté hacer lo mismo a nivel de php pero siempre conseguía un error 500. Así que tuve que optar por ejecutarlo a nivel de php.ini . Hay que especificar la ruta física dentro del servidor, la cual podemos consultar con el siguiente archivo en php:

$ruta_absoluta = getcwd();
echo 'Ruta física: ' . $ruta_fisica;

Si ejecutamos este código en el directorio donde tengamos el contentHeader.php veremos la información que nos falta para su correcta implementación. Una vez completado todo el php.ini hay que destacar que debemos copiarlo a todas las carpetas donde hayan archivos css y JavaScript. Ya que el php.ini solo se aplica a la carpeta en donde esté contenido.

[Total:2    Promedio:2.5/5]

Artículos relacionados

Sobre el autor Ver todos los posts Web del autor

Jose Emeterio

Consultor SEO y experto en analítica Web, se algo de Wordpress, fotografía y tecnología en general. Cuando quiero desconectar suelo viajar y cocinar.