Foros del Web » Programando para Internet » PHP »

Clase Descarga, Limitar velocidad y cantidad.

Estas en el tema de Clase Descarga, Limitar velocidad y cantidad. en el foro de PHP en Foros del Web. Hola, encontre un script para limitar la velocidad de una descarga, lo adapte y modifique a mis necesidades, haciendo esta clase en donde esta todo ...
  #1 (permalink)  
Antiguo 08/12/2006, 09:51
Avatar de Wdeah  
Fecha de Ingreso: julio-2005
Ubicación: Argentina
Mensajes: 109
Antigüedad: 18 años, 8 meses
Puntos: 0
Clase Descarga, Limitar velocidad y cantidad.

Hola, encontre un script para limitar la velocidad de una descarga, lo adapte y modifique a mis necesidades, haciendo esta clase en donde esta todo junto.
Basicamente lo que necesito es: Limitar la velocidad de descarga y la cantidad de descargas simultaneas por ip.
Lo estoy ejecutando en localhost, y me da resultados, pero hay un problema y es que cuando pongo "pausar" la descarga el script se sigue ejecutando, y con varias personas haciendo lo mismo, supongo una sobrecarga para el server..
La ideas es: empieza la descarga y se añade a la base de datos el nombre del archivo y la ip desde la que se lo esta descargando, cuando se termina de descargar o el usuario cancela la descarga, la fila se borra..
quizas hay alguna otra forma de hacer esto, o simplemente mejorar este script.. por eso queria que lo vieran.. gracias.

Código PHP:
<?
ignore_user_abort 
(true);

set_time_limit(0);

class 
Descarga
{
    function 
Descarga ($file$speed)
    {
        if ( !
is_file ($file) )
        {
            
header 'HTTP/1.0 404 Not Found' );
            exit ();
        }
        else
        {
            
$link mysql_connect ('localhost''root''');
            
mysql_select_db ('descargas'$link);

            
$sql "SELECT * FROM descargandose WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
            
$result mysql_query($sql);
            if ( 
mysql_num_rows($result) >= 1)
            {
                exit (
'Solo 1 descarga a la vez.');
            }
            else
            {
                
$sql "INSERT INTO descargandose (name, ip) VALUES ('".$file."', '".$_SERVER['REMOTE_ADDR']."')";
                
mysql_query ($sql);
            
            
                
$fsize filesize ($file);
                
$ctype $this->file_type basename $file ) );

                
header 'Cache-Control: no-store, no-cache, must-revalidate' );
                
header 'Content-Type: ' $ctype );
                
header 'Content-Disposition: attachment; filename=' str_replace ' ''-'$file ) );
                
header 'Content-Length: ' $fsize );
            
                
$fp fopen ($file'rb');

                while ( !
feof ($fp) )
                {
                    if ( 
connection_aborted ())
                    {
                        
$this->abort();
                        break;
                    }

                    print ( 
fread ($fp, (1024 $speed)) );

                    
flush();

                    
sleep(1);

                }

                
fclose ($fp);
            
                
$sql "DELETE FROM descargandose WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
                
mysql_query($sql);
                exit ();
            }
        }
    }

    function 
file_type $file )
    {
        
$ext strtolower (substr (strrchr ($file'.'), 1));
        
$mime = array
        (
            
'doc'  => 'application/msword',
            
'gif'  => 'image/gif'
           
// sigue, pero lo corte para que no se haga muy extenso el post
        
);
            return isset (
$mime[$ext]) ? $mime[$ext] : 'application/octet-stream';
    }

    function 
abort ()
    {
        
$link mysql_connect ('localhost''root''');
        
mysql_select_db ('descargas'$link);
        
$sql "DELETE FROM descargandose WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
        
mysql_query($sql);
        exit ();
    }
}
?>
  #2 (permalink)  
Antiguo 13/07/2013, 11:39
 
Fecha de Ingreso: abril-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Clase Descarga, Limitar velocidad y cantidad.

Hola,

ha pasado mucho tiempo desde que este post fue escrito, pero escribo con la ilusion de que alguien pueda responer.

He usado el codigo mostrado aqui, adaptandolo a mis necesidades, pero me encuentro con un problema que no puedo explicar: mientras se esta produciendo una descarga el sitio deja de responder a otras peticiones.
¿Alguien tiene una idea de que es lo que pasa?

Muchas gracias por anticipado
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 06:56.