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 :)
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
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
Quiero limitar el ancho d banda, que se baje por ejemplo a 1Kb
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!
Quiero limitar el ancho de banda para todos los archivos, perdón por la confusión :S
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
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
Entonces haré lo que dice @EFEX muchas gracias :)
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:
$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!');
}
<?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($fh, round($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!');
}
?>