BuscaPé, líder em comparação de preços na América Latina

PHPit

Pular navegação

Limitando a velocidade de download de um arquivo

Enviado em 11/04/2008 às 17:16

Prefácio

Seguindo a linha do último artigo, agora criaremos um sistema para limitar a velocidade do cabra quando ele estiver fazendo o download.

Isso é bom para sites com grande volume de tráfego onde você não quer afogar a banda do servidor.

E então você me pergunta: "Como limitar a velocidade de um download com PHP?"

Conceito

Para esta experiência, utilizaremos um cálculo simples.
A idéia é não enviar o arquivo diretamente para o usuário, e sim enviar para o buffer em uma velocidade constante, estipulando a velocidade máxima com que o usuário irá receber os dados.

A idéia pode parecer um pouco complexa mas a implementação é simples!

Mão na massa

Vamos criar duas variáveis: $arquivo e $velocidade. Elas irão armazenar o nome do arquivo que será baixado e a velocidade máxima de download em kbps, respectivamente.

  1. <?php
  2. // Nome do arquivo que será enviado para o usuário
  3. $arquivo = 'nome_do_arquivo.mp3';
  4.  
  5. // Velocidade máxima de download. Aqui exemplificado com 10,5 kb/s
  6. $velocidade = 10.5;
  7.  
  8. // Verifica se o arquivo existe e se ele é realmente um arquivo
  9. if(file_exists($arquivo) && is_file($arquivo)) {
  10. header('Cache-control: private');
  11. // Caso tenha problemas com a nomenclatura do arquivo na hora do download, remova a próxima linha
  12. header('Content-Type: application/octet-stream');
  13. header('Content-Length: '.filesize($arquivo));
  14. header('Content-Disposition: filename='.$arquivo);
  15.  
  16. // Esvazia o buffer de saída antes de começar a enviar
  17. flush();
  18. $arqAberto = fopen($arquivo, 'r');
  19. while(!feof($arqAberto)) {
  20. echo fread($arqAberto, round($velocidade*1024));
  21. flush();
  22. sleep(1);
  23. }
  24. fclose($arqAberto);
  25. }
  26. ?>


A implementação segue a mesma idéia dos outros artigos escritos anteriormente. Um script PHP que gerencia o download do usuário.

Conclusão

Embora você possa experimentar alguma flutuação da taxa de download (alguns bits de diferença), o script irá se encarregar de enviar para o usuário os dados na velocidade correta!

Se possível: comente, entre em contato, mande sugestões...
É sempre bom saber o que vocês estão pensando!

E peço que me perdoem pela demora em postar mais colunas!

Um forte abraço e fiquem com Deus!

 

Comente (06)




Comentário #1
Autor: Kuen
Em: 12/04/2008 às 09:03

Grande Jaques!!
Cara muito bom esses artigos!!

Grande abraço bruxo!

Comentário #2
Autor: Xorna
Em: 12/04/2008 às 12:56

Cara, tri massa isso aí meu.. e simples!

Comentário #3
Autor: Anselmo Battisti
Em: 13/04/2008 às 15:28

Cara não testei seu script mas a idéia é muito boa parabéns!

Comentário #4
Autor: Luiz F. G. Deitos
Em: 07/05/2008 às 18:10

boa!,,,,,,,,,
ñ conhecia, mas é muito útil, dependendo do projeto.
abraço

Comentário #5
Autor: Andr
Em: 13/06/2008 às 17:35

Excelente post, mas fui testar aqui, o arquivo veio corrompido, notei que ele roda em torno de 20segundos e dá como download concluído, será que é apenas aqui que isto ocorre? parabéns pelos posts, são de altíssima qualidade, estou pegando este site como referencia

Comentário #6
Autor: Andre
Em: 18/06/2008 às 15:38

É, tava tentando aqui e o script cortava no meio, me veio a cabeça do script ser executado por apenas 30s, no caso em alguns servidores pode-se utilizar o ini_set('max_execution_time', '0'); que o script não terá mais tempo máximo de execução... dá certinho, funciona perfeitamente parabéns novamente pelo post

Artigos Recentes

Rafael Jaques - PHPit 2007
Site sob Creative Commons - Alguns direitos reservados

Assine o RSS do PHPit! :)
Saiba onde tem o melhor preço antes de comprar