Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: erikcatala en 3 Febrero 2014, 04:05 AM

Título: Añadir limte a las descargas
Publicado por: erikcatala en 3 Febrero 2014, 04:05 AM
Bueno pues me he bajado un Directory Lister (http://www.directorylister.com/) en PHP y modificado un poco a mi gusto.

El problema es que quiero limitar las descaras a X Kb pero no se como hacerlo. He buscado por Internet y la mayoría es para un archivo especifico.

Así es como lo tengo ahora: http://getmoneyfuckbitches.uni.me/download.php?file=Downloads.rar (http://getmoneyfuckbitches.uni.me/download.php?file=Downloads.rar)

Esta subido a http://getmoneyfuckbitches.uni.me/ (http://getmoneyfuckbitches.uni.me/)


Si alguien me puede decir por donde buscar o echarme una mano se le agradecería :)
Título: Re: Añadir limte a las descargas
Publicado por: engel lex en 3 Febrero 2014, 04:34 AM
puedes usar una salida (impresion) que imprima ej 1kb y haga un wait por x tiempo para regular la velocidad a base de cantidades conocidas y tiempos conocidos
Título: Re: Añadir limte a las descargas
Publicado por: #!drvy en 3 Febrero 2014, 04:46 AM
CitarEl problema es que quiero limitar las descaras a X Kb pero no se como hacerlo. He buscado por Internet y la mayoría es para un archivo especifico.

Que quieres decir con eso ?

O como ? Explicate mas..

Saludos
Título: Re: Añadir limte a las descargas
Publicado por: erikcatala en 3 Febrero 2014, 04:52 AM
Quiero limitar el ancho d banda, que se baje por ejemplo a 1Kb
Título: Re: Añadir limte a las descargas
Publicado por: engel lex en 3 Febrero 2014, 04:55 AM
decídete! o limitas el ancho de banda a kb/s o cortas el archivo a una cantidad de kb específicos! XD pensé que era eso primero!
Título: Re: Añadir limte a las descargas
Publicado por: erikcatala en 3 Febrero 2014, 12:27 PM
Quiero limitar el ancho de banda para todos los archivos, perdón por la confusión :S
Título: Re: Añadir limte a las descargas
Publicado por: EFEX en 3 Febrero 2014, 16:01 PM
Yo creo que es mejor instalar y configurar mod_bandwidth(si utilizas apache..) que hacer un script en php.

http://www.cohprog.com/mod_bandwidth_config
Título: Re: Añadir limte a las descargas
Publicado por: #!drvy en 3 Febrero 2014, 23:02 PM
Coincido con @EFEX, que PHP haga esto es posible, pero cargaras mucho al servidor y los limites de tiempo de ejecución serian un problema.

Saludos
Título: Re: Añadir limte a las descargas
Publicado por: erikcatala en 5 Febrero 2014, 03:45 AM
Entonces haré lo que dice @EFEX muchas gracias :)
Título: Re: Añadir limte a las descargas
Publicado por: el-brujo en 27 Febrero 2014, 16:54 PM
Si quieres hacerlo vía el servidor web directamente, pues tienes que ser root o tener acceso directo al servidor, porque hay que instalar un módulo al apache:

Limitar ancho de banda en Apache
http://blog.elhacker.net/2013/02/limitar-ancho-de-banda-en-apache.html

Con PHP también se puede hacer, pero será más complicado:


Código (php) [Seleccionar]
$local_file = 'file.zip';
$download_file = 'name.zip';

// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5;
if(file_exists($local_file) && is_file($local_file))
{
    header('Cache-control: private');
    header('Content-Type: application/octet-stream');
    header('Content-Length: '.filesize($local_file));
    header('Content-Disposition: filename='.$download_file);

    flush();
    $file = fopen($local_file, "r");
    while(!feof($file))
    {
        // send the current file part to the browser
        print fread($file, round($download_rate * 1024));
        // flush the content to the browser
        flush();
        // sleep one second
        sleep(1);
    }
    fclose($file);}
else {
    die('Error: The file '.$local_file.' does not exist!');
}



Código (php) [Seleccionar]


<?php
/* aqui el numero de kilobytes de descarga (ej. 10.20 Kb/s) */
$download_rate 10.20;
 
$download_file 'download-file.zip';  
$target_file 'target-file.zip';
 
if(
file_exists($download_file)){
    
/* headers */
    
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
    
header('Cache-control: private');
    
header('Content-Type: application/octet-stream');
    
header('Content-Length: '.filesize($download_file));
    
header('Content-Disposition: filename='.$target_file);
 
    
/* flush */
    
flush();
 
    
/* abrir archivo */
    
$fh = @fopen($download_file'r');
    while(!
feof($fh)){
        
/* mandamos parte del archivo */
        
print fread($fhround($download_rate 1024));
        
/* flush del contenido al navegador */
        
flush();
        
/* sleep de 1 segundo */
        
sleep(1);
    }
    
/* cerrar archivo */
    
@fclose($fh);
}else{
    die(
'Error: '.$download_file.' no existe!');
}
?>