+3

Formulários e upload de múltiplos arquivos com PHP

criado por Alfred R. Baudisch em 24/12/2006 9:35pm
Publiquei três artigos ensinando como processar dados de formulário com o PHP, sendo dois deles sobre o upload de arquivos. Mas, pelos e-mails e comentários que recebi, percebi que não foi suficiente para o pessoal ir além do básico. Por isso, nesse artigo explico como criar formulários para envio de vários arquivos e principalmente, como processar esse envio com o PHP.

O artigo está dividido da seguinte maneira:
1) Introdução
2) Montando o formulário
3) Processamento do upload
4) Conclusão

1) Introdução
Praticamente em qualquer tipo de site e sistema há a necessidade de se fazer o upload de algum tipo de arquivo, principalmente imagens e documentos.

Vamos tomar como exemplo um site de uma agência promotora de eventos. Esse site tem as seções Galeria de Fotos de Eventos (vamos chamar de Galeria) e Envio de Currículos (também vamos chamar apenas de Currículos).

O painel de controle possui o cadastro de conteúdo para cada uma dessas seções:
- Galeria: nome do evento, data, local e fotos.
- Currículos: nome do candidato, curriculo e foto de rosto.

CASO 1) Quantidade variável de arquivos a serem enviados. Cada evento obviamente possui um número variável de fotos. Agora como fazê-lo? Enviar uma foto de cada vez? Ou tirar o fato que são várias fotos e limitar apenas uma foto por evento, e assim, falar para o cliente que por limitações tecnológicas eles devem apenas tirar uma foto em cada evento (o que seria absurdo, rs.)? O principal foco do artigo é baseado nesse caso.

CASO 2) Upload variável de arquivos de vários tipos. Agora na parte de currículos, poderá ser enviado currículo do usuário em múltiplos formatos (.doc, .pdf, etc), além de enviar a foto. Mudando apenas algumas linhas primeiro caso, esse caso fica concluído.

Pré-requisitos: para ler esse artigo, você já deve ter conhecimento do processando de formulários e envio de arquivos com o PHP.

Caso não saiba, tenha dúvidas ou queira apenas dar uma refrescada leia meus 3 artigos:
1) Manipulando dados de Formulário com PHP – Parte 1 - http://www.phpbrasil.com/articles/article.php/id/719
2) Manipulando dados de Formulário com PHP – Parte 2 (Upload de arquivos) - http://www.phpbrasil.com/articles/article.php/id/745
3) Upload de Imagens com Segurança - http://www.phpbrasil.com/articles/article.php/id/707

Comentários:

Mostrando 1 - 10 de 13 comentários
Muito bom! Obrigado!!
28/09/2011 5:41pm (~12 anos atrás)

O problema dos 2MB de limite de upload deve-se ao facto das configurações do PHP estarem definidas para esse valor.
No ficheiro php.ini normalmente tem essa propriedade upload_max_filesize = 2M
Tente alterar para ver como resulta.

Estou com o mesmo problema das 5 fotos, qualquer que seja o valor que eu coloque na quantidade o tamanho do array é sempre 5 e dai nao deixar enviar mais de 5 fotos.

Alguma solução para isto? Ou é uma limitação do servidor?
16/02/2009 7:25am (~15 anos atrás)

Adorei mesmo ^^ perfeito coloquei pra faze upload de um monte de arquivo agora parece rapidshare =D muito útil mesmo Obrigado.
13/10/2008 5:16pm (~15 anos atrás)

alterei o script para permitir outros tipos de arquivos...consegui fazer o upload deles (.doc,.xls,.exe) porém não consigo postar arquivos com tamanho grandes ....acho q com + de 2 MB já da pau!!! Como faço para resolver isso??? é alguma configuração de servidor??? do Php???
05/03/2008 2:14pm (~16 anos atrás)

quando envio os arquivos ... ele faz td certinho mas só consegue enviar 5 fotos independente do numero da quantidade que eu colocar ... tem alguma explicacao pra isso???
21/06/2007 9:43am (~17 anos atrás)

Ficou muito bom mesmo esse script, pra quem esta aprendendo como eu então é dez, todo explicadinho muito bom mesmo, mas estou com um problema, quando envio a foto aparece uma mensagem dizendo: "Você não enviou foto" porque aparece a mensagem?
27/05/2007 3:07pm (~17 anos atrás)

Respondendo a gundes.rs e lacertae

Já me perguntei também se existe como selecionar uma pasta ou diversos arquivos de uma vez. Pois para o usuario é realmente insuportável, digamos, ter que selecionar 500 arquivos um a um para armazenar num sistema de GED por exemplo.
Ai pesquisando descobri uma solução usando flash, não sou amigo de flash, mais num caso extremo como este, até largo mão de meus preconceitos. O produto não és free, mais fica a dica:
http://www.element-it.com/DemoMultiPOW.aspx

O produto, permite que a interface que irá efetuar a persistencia dos arquivos no servidor, seja desenvolvida ao gosto do cliente (asp/php/perl)

No site tem um demo.

Um abraço a todos
27/03/2007 5:45pm (~17 anos atrás)

É, muito legal o script. Creio que vai ajudar muita gente. Tenho uns sistemas desenvolvidos assim. Mas o meus clientes sempre pergutam o mesmo que o amigo acima perguntou : É possível pegar todos os arquivos de uma pasta ? Ou os selecionados ?

Realmente é chato, num postador de fotos por exemplo, vc vai catando uma por uma...pra depois ENVIAR. Isso poderia ser resolvido selecionando vinte de vez, ou o que estiver na pasta. Desde que não sobrecarregue ou que tenha um limite.

Eis o DESAFIO !!..rsr.
29/01/2007 4:38am (~17 anos atrás)

show de bola o artigo!
24/01/2007 12:20pm (~17 anos atrás)

boam dia Alfred, gostei do seu script, na minha máquina ele unciona perfeitamente, mais quando coloquei no servidor, ele não envia, sabe me dizer porque??
19/01/2007 4:02am (~17 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)