Añadir limte a las descargas

Iniciado por erikcatala, 3 Febrero 2014, 04:05 AM

0 Miembros y 1 Visitante están viendo este tema.

erikcatala

Bueno pues me he bajado un Directory Lister 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

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


Si alguien me puede decir por donde buscar o echarme una mano se le agradecería :)

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

#!drvy

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 ?

  • ¿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

erikcatala

Quiero limitar el ancho d banda, que se baje por ejemplo a 1Kb

engel lex

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!
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

erikcatala

Quiero limitar el ancho de banda para todos los archivos, perdón por la confusión :S

EFEX

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
GITHUB 

#!drvy

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

erikcatala

Entonces haré lo que dice @EFEX muchas gracias :)

el-brujo

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!');
}
?>