
Si has llegado hasta aquí es porque tienes un servidor en 1and1 muy barato y necesitas saber como activar la compresión gzip en 1and1. Al ser un hosting compartido por muchos sites no dispone de ninguno de los módulos necesarios para la perfecta optimización de la velocidad de carga de nuestra web, en este caso ni el gzip ni el deflate.
Cuando comprimes los archivos de tipo texto plano como los html, css y JavaScript consigues reducir su tamaño a una tercera parte aproximadamente, esto supone una ventaja en cuanto a rendimiento de carga WPO, un ahorro importante en transferencia de datos y consumo de recursos, sobre todo cuando hay muchos archivos.
En 1&1 no activan Gzip ni Deflate para evitar los consumos de CPU del server que ello supone, asi que tenemos que usar otra librería para la compresión, en este caso Zlib.
Para ello vamos a actuar sobre 3 archivos:
.htaccess
php.ini
contentHeader.php
En el .htaccess añadimos lo siguiente:
AddType x-mapp-php5 .php .shtml .html .htm .js .txt .css
AddHandler x-mapp-php5 .php .shtml .html .htm .js .txt .css
Después activamos la compresión Zlib en el php.ini:
zlib.output_compression = On
zlib.output_compression_level = 9
allow_url_fopen = On
Tras eso hay que especificar que en cada llamada a dicho archivo se llame al tercero necesario contentHeader.php añadiendo esta línea debajo de las anteriores en el php.ini:
auto_prepend_file = [RUTA_ABSOLUTA]/contentHeader.php
Para averiguar la ruta absoluta de tu servidor, guarda estas líneas en un archivo llamado ruta-absoluta.php, lo subes a la raiz de tu servidor y lo ejecutas, lo que salga en pantalla será lo que tengas que indicar como ruta absoluta:
$ruta_absoluta = getcwd();
echo 'Ruta física: ' . $ruta_absoluta;
Una vez hecho acuerdate de borrarlo del servidor porque no es bueno dejar un archivo que da tantas pistas a los hackers.
No te preocupes, para hacertelo más fácil te incluyo una copia en el paquete de ayuda que te puedes descargar.
Si no tenemos php.ini, creamos uno con un editor de texto plano y OJO tenemos que subir uno en cada carpeta de la web en donde haya archivos php, css, js o similares (o sea casi todas). Que no cunda el pánico, para hacerlo puedes descargar este paquete que te ayudará en tal tarea. Más abajo te explico cómo usarlo, lo he traducido al castellano para que sea más fácil.
El tercer archivo que necesitamos para que todo funcione es el ya nombrado contentHeader.php, que podemos crear mediante el siguiente código:
<?php
$pathinfo=pathinfo($_SERVER['PHP_SELF']);
$extension=$pathinfo['extension'];
$offset = 60 * 60 * 24 * 30;
if($extension=='htm'){
header('Content-type: text/html');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
if($extension=='html'){
header('Content-type: text/html');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
if($extension=='css'){
header('Content-type: text/css');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
if($extension=='mid'){
header('Content-type: audio/midi');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
if($extension=='ico'){
header('Content-type: image/x-ico');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
if($extension=='js'){
header('Content-type: text/javascript; charset=utf-8');
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");}
?>
Lo guardas y lo subes a la raíz de tu sitio.
La explicación de cómo funciona todo el proceso es que la compresión cambia las cabeceras de esos archivos a html normal por lo que necesitamos definir correctamente las cabeceras de los archivos css y javascript comprimidos. Puede ocurrir que en ciertos navegadores fallen los estilos y el JavaScript, no queda otra que experimentar con distintas combinaciones en ese archivo.
Es vital para que todo funcione que el php.ini esté presente en todas las carpetas donde hayan archivos css y JavaScript, si no está no se ejecutaran sus directivas.
Para subir una copia de tu archivo php.ini en cada directorio puedes usar el script phpcopy.php que te he indicado antes. Antes de subirlo tienes que editarlo e indicar la ruta absoluta en el servidor de tu sitio (la que has averiguado antes con el script de ruta-absoluta.php), una vez hecho lo subes a la raíz de tu sitio y lo ejecutas.
Tiene 2 modos de uso, lo verás al editarlo, lee y ejecuta el que más te convenga, el que trae por defecto es el más adecuado para la mayoría de los casos.
Si por lo que sea no ha funcionado bien y necesitas borrar los archivos php.ini de cada directorio puedes utilizar el script phpdelete.php, de igual forma lo primero es editarlo e indicar la ruta absoluta de tu sitio en la línea indicada antes de subirlo.
De igual forma he incluido un modelo del archivo php.ini que recomiendo, antes de usarlo debes editarlo y poner tu propia ruta absoluta o no funcionará.
También necesitas indicar la ruta completa para el directorio temporal tmp, si es un WordPress yo te recomiendo que uses wp-content/uploads tal como verás en el ejemplo.
Una vez usados y que todo funcione bien acuérdate de borrarlo todo del servidor, no es bueno dejar archivos de esas características por las repercusiones que puede tener un mal uso de los mismos.
Otra forma más sencilla que le ha funcionado a algunas personas es incluir estas líneas que activan la compresión zlib justo antes del comienzo del html, si usas WordPress debes ponerlo al principio del header.php (antes del DOCTYPE).
<?php
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '1');
?>
Esperamos que te sea de utilidad, no te cortes en dejarnos tus comentarios, están siempre abiertos ;).