Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/08/2007, 10:40
Saludos
 
Fecha de Ingreso: marzo-2006
Mensajes: 342
Antigüedad: 18 años, 1 mes
Puntos: 0
Al intentar limitar la velocidad de descarga de un ZIP se descarga corrupto....

Aqui teneis la funcion (funciona muy bien en lo que se refiere a limitar la velocidad a 50 kb/s... pero una vez descargado intento extraer el ZIP pero me dice que ná...... (corrupto). Debe ser un problema con los headers, ¿no?

Los comentarios son del autor de la funcion :

Código PHP:
 <?php
function enviar_archivo($archivo$speed
{
    
$ctype="application/zip";
    
    
// Recolectamos información sobre el archivo
    
$archivo_nombre basename($archivo);
  
    
// Empezamos con los headers
    
header("Cache-Control:");
    
header("Cache-Control: public");
    
header("Content-Type: $ctype");
    
    
// Forzamos la descarga en lugar de la apertura
    
$header='Content-Disposition: attachment; filename='.$archivo_nombre;
    
header($header);
    
header("Accept-Ranges: bytes");
    
$tamano filesize($archivo);  
 
 
     
// Si el navegador nos solicita el http_range...
    
if(isset($_SERVER['HTTP_RANGE'])) {
    
// entonces le enviamos sólo el trozo que falta. 
    
list($a$rango)=explode("=",$_SERVER['HTTP_RANGE']);
    
str_replace($rango"-"$rango);
    
$tamano2=$tamano-1;
    
$nueva_longitud=$tamano2-$rango;
    
header("HTTP/1.1 206 Partial Content");
    
header("Content-Length: $nueva_longitud");
    
header("Content-Range: bytes $rango$tamano2/$tamano");
    } else {
    
// Si no le enviamos todo el pack
    
$tamano2=$tamano-1;
    
header("Content-Range: bytes 0-$tamano2/$tamano");
    
header("Content-Length: ".$tamano2);
    }  
    
// Sólo queda abrir el archivo...
    
$puntero_al_fichero fopen("$archivo","rb");
    
// localizar el inicio de la parte que queremos enviar...
    
fseek($puntero_al_fichero,0);
    
// y empezar a enviar. 
    
while(!feof($puntero_al_fichero)) {      
        
set_time_limit(0);      
    
// Ponemos los datos en el buffer...
        
print(fread($puntero_al_fichero,1024*$speed));
    
// Lanzamos el contenido del buffer...
        
flush();
    
// Y a dormir...
        
sleep(1);
    }
    
// archivo descargado
    
fclose($puntero_al_fichero);
    exit;
}

enviar_archivo("zips/ejemplo.zip",50);
?>