Foro de elhacker.net

Programación => 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
Citar
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.

Que quieres decir con eso ?
  • ¿Que no se puedan subir archivos de mas de X kb?
  • ¿Que no se pueda descargar max de X kb de un archivo? (romper)
  • ¿Que cuando las descargas totales de un archivo suman X kb deje de estar disponible?

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
  1. $local_file = 'file.zip';
  2. $download_file = 'name.zip';
  3.  
  4. // set the download rate limit (=> 20,5 kb/s)
  5. $download_rate = 20.5;
  6. if(file_exists($local_file) && is_file($local_file))
  7. {
  8.    header('Cache-control: private');
  9.    header('Content-Type: application/octet-stream');
  10.    header('Content-Length: '.filesize($local_file));
  11.    header('Content-Disposition: filename='.$download_file);
  12.  
  13.    flush();
  14.    $file = fopen($local_file, "r");
  15.    while(!feof($file))
  16.    {
  17.        // send the current file part to the browser
  18.        print fread($file, round($download_rate * 1024));
  19.        // flush the content to the browser
  20.        flush();
  21.        // sleep one second
  22.        sleep(1);
  23.    }
  24.    fclose($file);}
  25. else {
  26.    die('Error: The file '.$local_file.' does not exist!');
  27. }


Código
  1.  
  2. <?php
  3. /* aqui el numero de kilobytes de descarga (ej. 10.20 Kb/s) */
  4. $download_rate = 10.20;
  5.  
  6. $download_file = 'download-file.zip';  
  7. $target_file = 'target-file.zip';
  8.  
  9. if(file_exists($download_file)){
  10.    /* headers */
  11.    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  12.    header('Cache-control: private');
  13.    header('Content-Type: application/octet-stream');
  14.    header('Content-Length: '.filesize($download_file));
  15.    header('Content-Disposition: filename='.$target_file);
  16.  
  17.    /* flush */
  18.    flush();
  19.  
  20.    /* abrir archivo */
  21.    $fh = @fopen($download_file, 'r');
  22.    while(!feof($fh)){
  23.        /* mandamos parte del archivo */
  24.        print fread($fh, round($download_rate * 1024));
  25.        /* flush del contenido al navegador */
  26.        flush();
  27.        /* sleep de 1 segundo */
  28.        sleep(1);
  29.    }
  30.    /* cerrar archivo */
  31.    @fclose($fh);
  32. }else{
  33.    die('Error: '.$download_file.' no existe!');
  34. }
  35. ?>