Para los que quieran comprimir la salida de sus php, aca tiene una clase que lo hace.
Esta clase la hice hace unos dias, asi que si tienen alguna critica o algo que se me halla pasado son aceptadas con justo.
espero alguien la use.
saludos.
Código PHP:
<?
/*
-----------------------------------------------------------------------------------------------------
Esta clase sirve para madar la salida html gzipeada al cliente,
de esta forma la transferenciaa es menor.
Ademas se puede cachear esa salida en el server
para que no se realice el proseso de encryptacion GZIP en cada consulta.
usar :
require("clases/GZipNax.php");
INI(request_uri) o INICH(request_uri,pathcache)
//salida a pantalla
finalizar()
nota: la cache caduca en un dia.
se puede alterar cambiando la funcion control y disponer ahi su pretencion de caducidad.
se puede hacer facilmente heredando la clase GZipNax a una clase hijo y sobreescribiendo la funcion control.
-----------------------------------------------------------------------------------------------------
Esta clase fue creada por Nahuel J. Sciaratta. N(a//x)
*/
class GZipNax
{
var $archivo_cache;
var $puede_comprimir;
var $cachear;
var $rutacache=NULL;
function INICH($direccion,$rcache)//inicializo todo para comprimir y cachear
{
$this->archivo_cache=md5($direccion);
if(ereg('gzip, deflate',$_SERVER["HTTP_ACCEPT_ENCODING"]))
{
$this->puede_comprimir=TRUE;
$this->cachear($rcache);
if ((!file_exists("$this->rutacache/$this->archivo_cache"))|| $this->control("$this->rutacache/$this->archivo_cache"))
{ //echo "entro";
ob_start(); //redirijo salida al buffer
ob_implicit_flush(0);
}else {$this->leercache(); exit;}
}
else
{
$this->puede_comprimir=FALSE;
echo "El Browser no admite archivos GZIP";
}
}
function INI($direccion)//inicializo todo para comprimir
{
$this->archivo_cache=md5($direccion);
if(ereg('gzip, deflate',$_SERVER["HTTP_ACCEPT_ENCODING"]))
{
$this->puede_comprimir=TRUE;
//$this->cachear($rcache);
ob_start(); //redirijo salida al buffer
ob_implicit_flush(0);
}
else
{
$this->puede_comprimir=FALSE;
echo "El Browser no admite archivos GZIP";
}
}
function cachear($ruta)//defino ruta de cache(carpeta)
{
if (!is_dir($ruta)) mkdir ($ruta, 0700);//sino existe creo la carpeta
$this->rutacache=$ruta;
}
function control($ruta)//controlo caducidad
{
if (date("z",time()) != date("z",filemtime($ruta)) )
return TRUE;
}
function finalizar()
{
$contenidos = ob_get_contents();
ob_clean();
// Le avisamos al browser que vamos a enviarle contenido comprimido con gzip
header("Content-Encoding: gzip");
// El header de gzip
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
// Calculamos el tamaño y el CRC
$Size = strlen($contenidos);
$Crc = crc32($contenidos);
// Comprimimos el contenido
$contenidos = gzcompress($contenidos, 9);
// Quitamos el CRC inválido
$contenidos = substr($contenidos, 0, strlen($contenidos) - 4);
// Enviamos el contenido comprimido pero al buffer
echo $contenidos;
// Enviamos el CRC correcto y luego el tamaño original pero al buffer
$this->gzip_PrintFourChars($Crc);
$this->gzip_PrintFourChars($Size);
$contenidos = ob_get_contents(); //tomo el contenido del buffer;
ob_end_clean();
echo $contenidos; //ahora lo envio a pantalla
if ($this->rutacache!=NULL){
$fil2=fopen("$this->rutacache/$this->archivo_cache","w+"); //guardo en cache la salida, pero comprimida.
fwrite($fil2,$contenidos,strlen($contenidos));
fclose($fil2);
}
}
function leercache()
{
header("Content-Encoding: gzip");
//y le envio el archivo comprimido anteriormente.
readfile("$this->rutacache/$this->archivo_cache");
}
function gzip_PrintFourChars($Val)
{
for ($i = 0; $i < 4; $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
}
?>