Foros del Web » Programando para Internet » PHP »

AQUI!!, Clase para COMPRIMIR la salida del php.

Estas en el tema de AQUI!!, Clase para COMPRIMIR la salida del php. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/05/2005, 19:09
 
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);  
        }  
    }  

}
?>
  #2 (permalink)  
Antiguo 10/05/2005, 20:43
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 20 años, 3 meses
Puntos: 2
De acuerdo

Disculpame la ignorancia!!!
Que gano yo con comprimir mis páginas en PHP!????

o que uso le puedo dar a esto?!!!

Gracias espero tu respuesta!!
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #3 (permalink)  
Antiguo 11/05/2005, 06:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
N(a//x)

El ejemplo que mencionas en la documentación de tu própia classe no es completo/correcto .. Si usas classe no puedes (esto lo sabras mejor que yo) llamar a una "función" (método) sin haber instanciado el objeto (un $comprime_pagina=new tuobjeto(); .. y luego usar sus métodos (publicos) tipo: $comprime_pagina->metodo();

Intenta dar un ejemplo de uso completo (como usarlo en un caso concreto ..)

Un saludo,
  #4 (permalink)  
Antiguo 11/05/2005, 06:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Cita:
Iniciado por JALF
Disculpame la ignorancia!!!
Que gano yo con comprimir mis páginas en PHP!????

o que uso le puedo dar a esto?!!!

Gracias espero tu respuesta!!
Basicamente lo que ganas es en ahorro de consumo de trasnferencia entre cliente-servidor (bytes) y en consecuencia tiempo de esta (en "descargar la página") ..

Comprimir una página no es todo "bonito" .. tiene sus "contra" .. ahí estás sumando un proceso más (tiempo) en el servidor (lo que hace PHP) y otro más en el "cliente" (tu navegador) para descomprimir la página. Es decir . .con una conexión rápida y un cliente "lento" (PC) probablemente sea peor usar compresión que no usarla .. Pero en una conexión lenta y un cliente "rápido" .. puede que ganes algo. Todo hay que evaluarlo ..

Un saludo,
  #5 (permalink)  
Antiguo 11/05/2005, 11:30
 
Fecha de Ingreso: abril-2005
Mensajes: 40
Antigüedad: 19 años, 8 meses
Puntos: 0
a si se me paso esa parte.

require("clases/GZipNax.php");

$gzip= new GzipNax();

$gzip->INI(request_uri); //o $gzip->INICH(request_uri,pathcache)
//salida a pantalla
$gzip->finalizar();

bue' es asi.
chau.
  #6 (permalink)  
Antiguo 30/05/2011, 13:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: AQUI!!, Clase para COMPRIMIR la salida del php.

Hola estoy haciendo un csv al vuelo y necesitaria que en vez de que se baje el csv me baje un archivo .gz (Comprimido) esto es posible con tu objeto?, yo hago el csv con echo directamente y ponia los heades para que se descargue y funcionaba

Millon de gracias


Santa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:57.