Limitando a velocidade de download de arquivos com PHP
Em alguma situações temos que utilizar artifícios para forçar o download de arquivos. Isso é necessário já que alguns arquivos serão tratados de forma diferente de acordo com as configurações do usuário.
Por exemplo: arquivos de MP3. De acordo com a configuração do usuário, ao se clicar em um link que aponte para um arquivo desse tipo, o mesmo pode abrir uma janela de download ou começar a tocar no media player.
Nesse contexto, usamos algum script para forçar o download, garantindo que em qualquer máquina o resultado do clique seja exatamente o mesmo. Mas e se quisermos limitar o download?
Em alguns casos, o limite de download se faz necessário para garantir que com um mesmo investimento, mais pessoas consigam acessar e baixar arquivos de um servidor. Uma maneira simples de ser limitar a velocidade é mostrada abaixo.
<?php
function limita_velocidade($arquivo,$velocidade_maxima){
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($arquivo));
header('Content-Disposition: filename='.$arquivo);
flush();
$arquivo_aberto = fopen($arquivo, 'r');
while(!feof($arquivo_aberto)) {
echo fread($arquivo_aberto, round($velocidade_maxima*1024));
flush();
sleep(1);
}
fclose($arquivo_aberto);
}
/*
O primeiro argumento da função limita_velocidade é o nome do arquivo que vai ser usado no download (no exemplo sis.zip)
O segundo argumento da função limita_velocidade é a velocidade máxima que deverá ser usada, no caso 5 representa 5kbp/s
*/
limita_velocidade('sis.zip','5');
?>
Em alguns casos, dependendo do servidor, os arquivos serão corrompidos, o que provavelmente ocorrerá é que o servidor encerre a execução do script. Nesse caso basta setar:
ini_set('max_execution_time', '0');
Para que o script não seja encerrado.
Também é bom ressaltar que variações de velocidade para mais e para menos durante a execução do script são normais, isso se deve a vários fatores, o importante é que a velocidade sempre estará próxima da que for definida.



