Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/05/2005, 19:09
N(a//x)
 
Fecha de Ingreso: abril-2005
Mensajes: 40
Antigüedad: 19 años, 8 meses
Puntos: 0
AQUI!!, Clase para COMPRIMIR la salida del php.

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 ($ruta0700);//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($contenidos9);  
    
// Quitamos el CRC inválido 
    
$contenidos substr($contenidos0strlen($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);  
        }  
    }  

}
?>