Código de PHP - Limitar el ancho de banda a la hora de entregar un archivo

Imágen de perfil

Limitar el ancho de banda a la hora de entregar un archivográfica de visualizaciones


PHP

Publicado el 04 de Octubre del 2013 por Xavi
2.449 visualizaciones desde el 04 de Octubre del 2013. Una media de 21 por semana
Código que muestra como limitar el ancho de banda al leer un archivo.
Se especifica el tiempo y los Kb que puede leer en el tiempo indicado, tardando mas o menos en leer el archivo.

Basado en el código de Sabeen Malik
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2224&lngWId=8

Versión 1

Publicado el 04 de Octubre del 2013gráfica de visualizaciones de la versión: Versión 1
2.450 visualizaciones desde el 04 de Octubre del 2013. Una media de 21 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
# Definimos el archivo a descargar
$filedownload = "file.zip";
 
# definimos los milisegundos que queremos que tarde en descargar los kb
# definidos en la variable $obytes
# Modificar el valor de esta variable para visualizar la diferencia de tiempo
$time=$timeLimit=10000;
 
# definimos los kb que deseamos que se descargue en cada pasada
$obytes = 150*1024;
 
$start = misegundosUnix();
 
$fd = fopen ($filedownload, "rb");
 
while (!feof ($fd))
{
	# Obtenemos los fecha unix con milisegundos del inicio
    $time_start = misegundosUnix();
 
    # leemos del archivo los bytes indicados
    $bytes = ceil($obytes/100);
    $read=fread($fd, $bytes);
    # vaciamos el buffer
    flush();
 
    if($time < $timeLimit)
    {
		# Si el tiempo que hemos tardado en descargar los 150k es inferior
		# a los 10000 milisegundos, detenemos el proceso hasta alcancar los
		# 10000 miliegundos
		usleep($timeLimit-$time);
	}
 
	# Obtenemos los fecha unix con milisegundos del final
    $time_end = misegundosUnix();
 
    # Cogemos la diferencia y la pasamos a milisegundos
    $time = ceil(($time_end - $time_start)*1000000)+10;
}
fclose ($fd);
 
$end = misegundosUnix();
 
echo "Tiempo total: ".($end-$start)." segundos";
 
function misegundosUnix()
{
	# Obtenemos los fecha unix con milisegundos de inicio
	list($usec, $sec) = explode(" ", microtime());
	return $usec + $sec;
}
?>



Comentarios sobre la versión: Versión 1 (0)


No hay comentarios
 

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s2501