Ver Mensaje Individual
  #10 (permalink)  
Antiguo 12/06/2012, 12:56
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Comprimir archivos con gzip en .htaccess

Se puede, pero es el caso más complicado.

Tenés 2 posibilidaes.
Primero deberías ingresar tu panel de control (Cpanel, Webmin, etc) y verificar si en algún lugar tenes la posibilidad de agregar extensiones a tus "handlers de php". Esto es, actualmente tus extensiones que se procesan como php son las, .php, deberñias agregra lo mismo por lo menos para los .html, .css , .js, una vez hecho esto, en los css deberías cambiar, por ejemplo

estilo.css

Código CSS:
Ver original
  1. body{
  2. background-color; red;
  3. }

por

Código PHP:
Ver original
  1. <?php
  2. $archivo = $_SERVER['SCRIPT_FILENAME'];
  3. $expira = 60 * 60 * 24 * 365;
  4. $ExpStr = "Expires:" . gmdate("D,d M Y H:i:s",time() + $expira) . " GMT";
  5. $ft = filemtime($archivo);
  6. $time = time() - $ft;
  7. $eTag = "ci-".md5($archivo.$ft);
  8. header("Content-Type: text/css;charset=utf-8");
  9. header("Cache-Control: public, max-age=$expira");
  10. header($ExpStr);
  11. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT');
  12. header('ETag: "'.$eTag.'"');
  13. ob_start("ob_gzhandler");
  14. ?>
  15. /* aqui abajo pones todo tu código css */
  16. body{
  17. background-color: red;
  18. }

Para lo js, sería bastante similar

<?php
$archivo = $_SERVER['SCRIPT_FILENAME'];
$expira = 60 * 60 * 24 * 365;
$ExpStr = "Expires:" . gmdate("D,d M Y H:i:s",time() + $expira) . " GMT";
$ft = filemtime($archivo);
$time = time() - $ft;
$eTag = "ci-".md5($archivo.$ft);
header("Content-Type: text/javacript;charset=utf-8");
header("Cache-Control: public, max-age=$expira");
header($ExpStr);
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT');
header('ETag: "'.$eTag.'"');
ob_start("ob_gzhandler");
?>
// aqui abajo todo el javascript
var x = 1;


Cambiaría la linea que está en negrita, el content-type debe ser text-javascript

Los html y php(estáticos), más o menos lo mismo
Código HTML:
Ver original
  1. <?php
  2. $archivo = $_SERVER['SCRIPT_FILENAME'];
  3. $expira = 60 * 60 * 24 * 1;
  4. $ExpStr = "Expires:" . gmdate("D,d M Y H:i:s",time() + $expira) . " GMT";
  5. $ft = filemtime($archivo);
  6. $time = time() - $ft;
  7. $eTag = "ci-".md5($archivo.$ft);
  8. header("Content-Type: text/html;charset=utf-8");
  9. header("Cache-Control: public, max-age=$expira");
  10. header($ExpStr);
  11. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT');
  12. header('ETag: "'.$eTag.'"');
  13. ob_start("ob_gzhandler");
  14. ?>
  15. <!DOCTYPE html>
  16. <html lang="es-ar">
  17. <meta charset="utf-8" />
  18. <title>Traductiva - La agencia y su equipo de traductores.</title>

cambia también el content-type, esta vez por text/html


En todos los casos en la linea
$expira = 60 * 60 * 24 * 1;
lo que te interesa es el ultimo número, que indica la cantidad de dias que el archivo va a estar en la cache, en los ejemplos 365 para los js y css y 1 en los html
Esto de la cache es aparte del tema de la compresión, pero te lo paso asi no sea cosa que así como tu hosting no te dejó manejar el mod_deflate, te ponga una restricción para mod_headers

Si tus php son dinámicos (algo que permanentemente actualiza desde una base de datos, por ejemplo, ó un php que procese formularios) solo pones
Código PHP:
Ver original
  1. <?php
  2. ob_start("ob_gzhandler");
  3. ?>
y obvias lo de la cache

Estos fragmentos van siempre al inicio del documento y recordá que te dije que que necesitas procesar esas extensiones (js, css, html) como php activando los handlers correspondientes en el panel de control.

Si eso no e posible, también podés hacerlo, pero bajo la condición que a todos tus archivos los renombres como php
es decir que los llamarías usando
<link href="css/estilo.css.php" rel="stylesheet" type="text/css" /> ó
<script type="text/javascript" src="html5ie.js.php"></script>

Es un poco complejo comparado con la primera solución que te propuse, pero no hay otra forma, dadas las limitaciones que te impone tu servidor

te doy un tip extra
si tenés multiples archivos css, podés usar esta variante
Código PHP:
Ver original
  1. <?php
  2. $archivo = $_SERVER['SCRIPT_FILENAME'];
  3. $expira = 60 * 60 * 24 * 365;
  4. $ExpStr = "Expires:" . gmdate("D,d M Y H:i:s",time() + $expira) . " GMT";
  5. $ft = filemtime($archivo);
  6. $time = time() - $ft;
  7. $eTag = "ci-".md5($archivo.$ft);
  8. header("Content-Type: text/css;charset=utf-8");
  9. header("Cache-Control: public, max-age=$expira");
  10. header($ExpStr);
  11. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT');
  12. header('ETag: "'.$eTag.'"');
  13. ob_start("ob_gzhandler");
  14.  
  15. include('reset.css');
  16. include('principal.css');
  17. // y el resto, repetando el orden en que lo hubieses puesto de hacerlo individualmente
  18. // advertí que los includes estan antes del cierre de php y no después
  19. ?>
Con los js, es similar

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.