Progresso de upload com PHP na KingHost

Seguindo indicação de um comentário da semana passada, acabamos de instalar em todos os servidores LINUX de CLIENTES, o modulo uploadprogress. Durante a semana que se inicia, será feita a replicação para os servidores de revenda LINUX.

O texto abaixo foi copiado do Blog do Lourenzo: lourenzo.blog.br

Adicione um campo oculto bem no início do seu formulário de upload (isso é importante) , com o nome de UPLOAD_IDENTIFIER. O valor para esse campo deve combinar com a expressão regular “^[A-Za-z0-9_.-=]{1,64}$” , ou seja, possuir de 1 a 64 caracteres alfanuméricos, sendo que as letras podem ser maiúsculas ou minúsculas. Além disso, o valor deve ser único para cada upload.
Exemplo:

<input type=”hidden” name=”UPLOAD_IDENTIFIER” value=”upld<?php md5(time());?>” />

4) Agora vem a parte da diversão… Mostrar a barra de progresso.
Vou descrever uma maneira bem simples de fazer isso, deixando bem claro que é possível fazer isso com muito mais requinte.

Quando o formulário for submetido, abra um popup aproveitando a ação do usuário (o click pode ajudar seu popup a não ser bloqueado) para mostrar o progresso. Essa janela deve ser atualizada repetidamente de poucos em poucos segundos, chamando um script que irá tratar os dados e exibir as informações, e gerar um medidor.

Esse script chama a função uploadprogress_get_info($id), onde $id é o valor do campo UPLOAD_IDENTIFIER do seu formulário. A função retornará falso caso não haja um upload relacionado, ou um array de informações sobre o upload. O array contém:

time_start
Data/Hora do início do upload (no mesmo formato da função time()).
time_last
Data/Hora da última atualização do progress de upload.
speed_average
Velocidade média. (bytes / segundo)
speed_last
Última velocidade medida. (bytes / segundo)
bytes_uploaded
Número de bytes recebidos pelo servidor até o momento.
bytes_total
O valor do cabeçalho HTTP “Content-Length” enviado pelo navegador.
files_uploaded
Número de arquivos já recebidos pelo servidor.
est_sec
Número estimado de segundos restantes para o término do processo de upload.

O valor speed_average é medido com base no número de bytes obtidos pelo servidor desde o início do upload, enquanto speed_last é baseado no número de bytes enviados desde a última atualização no progresso do upload. A informação sobre o progresso é atualizada cada vez que o PHP obtêm mais dados do cliente, então speed_last pode não ser muito preciso.

Nota 1) O valor bytes_total NÃO é reflexo do tamanho real do arquivo, mas sim do tamanho do REQUEST POST, que pode ser maior que o tamanho real do arquivo transferido.

Nota 2) Esse módulo realmente detecta apenas quanto do formulário com método POST foi recebido pelo servidor, e mantém uma contagem de quantas variáveis POST do tipo ‘file’ vão sendo encontradas. Então quando forem enviados vários arquivos em um mesmo formulário, não é possível fazer uma medição de progresso para cada arquivo, mas é possível obter a contagem de quantos arquivos já foram completamente transferidos.

Agradecimentos ao Felipe Farias, 

Related Entries

7 Comentarios para “Progresso de upload com PHP na KingHost”


  1. 1 Michel Wilhelm mai 19th, 2009 at 12:16 am

    Gostei muito disso, a muito tempo venho procurando hospedagem que disponibilizasse isso. Como já sou cliente, vou poder oferecer uma melhor ferramenta para ele, especialmente para enviar vídeos e utilizar o ffmpeg (se necessário). Obrigado KingHost.
    :)

  2. 2 Diogo Nunes mai 19th, 2009 at 2:13 pm

    Já eu, ao contrário, não procurava uma solução como esta. E este é o diferencial da KingHost: Lançar serviços que surpreendem o cliente e tornam o serviço cada vez mais completo! É por isto que eu (e meus clientes de revenda) faço parte da KingHost e não troco por nada!

  3. 3 Jackson mai 25th, 2009 at 8:32 am

    Muito boa a solução, realmente a Kinghost tem me deixado satisfeito como os serviços, só acho que poderia melhorar um pouquinho os planos de revenda com relação à tamanho.

  4. 4 João Claudio Moro jun 13th, 2009 at 2:32 pm

    Muito bom, excelente!
    Eu queria este recurso a muito muito tempo..

    Estou tentando implementar um código exemplo para teste mas ele não esta funcionando.. mas vou entrar em contato com o suporte da kinghost ;)

  5. 5 Renato ago 25th, 2009 at 4:25 pm

    Ola pessoal seria que teria um exemplo (script) completo para mostrar?
    obrigado

  6. 6 José de Menezes out 10th, 2009 at 6:35 pm

    Amigos, recomendo disponibilizar codificação para testes, é a melhor forma de ajudar os usuáios da Kinghost.

  7. 7 Wilson Miranda abr 22nd, 2011 at 6:46 pm

    Muito Bom
    valeu Kinghost

Deixe um Comentario