Upload de arquivos com PHP

Quem nunca precisou fazer um site que tenha upload de algum tipo de arquivo que atire a primeira pedra!

E hoje, você que não atirou a pedra, vai poder fazer o seu upload de arquivos – com validação e filtro de extensões e tamanho de arquivo – com o PHP! 😉

Vamos ao que interessa:

Você vai precisar, basicamente, de duas coisas: um formulário pro usuário escolher o arquivo e um arquivo .php para receber os dados e salvar (ou não) o arquivo enviado numa pasta escolhida. Vou ensinar também a fazer um script que filtre a extensão do tipo de arquivo enviado e o tamanho dele.

Duas coisas que você precisa saber antes de criar o seu script de upload e pensar que ele irá funcionar:

No PHP com configuração padrão o limite de uploads é de 2Mb então, teste com arquivos menores.
Em alguns servidores para você poder salvar um arquivo em uma pasta você precisa de permissão de usuário (também conhecido como CHMOD), é raro precisar configurar isso, mas se por obra divina o seu arquivo não estiver indo pra pasta que você definiu, tente “dar um CHMOD 777” na pasta de destino.
Se você estiver testando seu script localmente, pode ignorar a segunda consideração e só se preocupar em enviar arquivos menores que 2Mb para testar a aplicação.

Vamos ao formulário HTML para o usuário escolher o arquivo a ser enviado:

1

2

3

4

5

Salve este HTML dentro de arquivo com o nome que preferir.

Agora vamos criar o arquivo que irá receber os dados e cuidar de tudo pra você… Salve-o como recebe_upload.php:

01
< ?php 02 03 // Pasta onde o arquivo vai ser salvo 04 $_UP['pasta'] = 'uploads/'; 05 06 // Tamanho máximo do arquivo (em Bytes) 07 $_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb 08 09 // Array com as extensões permitidas 10 $_UP['extensoes'] = array('jpg', 'png', 'gif'); 11 12 // Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único) 13 $_UP['renomeia'] = false; 14 15 // Array com os tipos de erros de upload do PHP 16 $_UP['erros'][0] = 'Não houve erro'; 17 $_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP'; 18 $_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML'; 19 $_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente'; 20 $_UP['erros'][4] = 'Não foi feito o upload do arquivo'; 21 22 // Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro 23 if ($_FILES['arquivo']['error'] != 0) { 24 die("Não foi possível fazer o upload, erro:
” . $_UP[‘erros’][$_FILES[‘arquivo’][‘error’]]);
25
exit; // Para a execução do script
26
}
27

28
// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar
29

30
// Faz a verificação da extensão do arquivo
31
$extensao = strtolower(end(explode(‘.’, $_FILES[‘arquivo’][‘name’])));
32
if (array_search($extensao, $_UP[‘extensoes’]) === false) {
33
echo “Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif”;
34
}
35

36
// Faz a verificação do tamanho do arquivo
37
else if ($_UP[‘tamanho’] < $_FILES['arquivo']['size']) { 38 echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb."; 39 } 40 41 // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta 42 else { 43 // Primeiro verifica se deve trocar o nome do arquivo 44 if ($_UP['renomeia'] == true) { 45 // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg 46 $nome_final = time().'.jpg'; 47 } else { 48 // Mantém o nome original do arquivo 49 $nome_final = $_FILES['arquivo']['name']; 50 } 51 52 // Depois verifica se é possível mover o arquivo para a pasta escolhida 53 if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $_UP['pasta'] . $nome_final)) { 54 // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo 55 echo "Upload efetuado com sucesso!"; 56 echo '
Clique aqui para acessar o arquivo‘;
57
} else {
58
// Não foi possível fazer o upload, provavelmente a pasta está incorreta
59
echo “Não foi possível enviar o arquivo, tente novamente”;
60
}
61

62
}
63

64
?>
Com isso você já tem um script que recebe os dados enviados pelo formulário e que coloca (ou não) o arquivo na pasta.

Eu sei que esse script pode parecer um pouco avançado pra quem tá começando, mas eu preferi fazer o “básico que todo mundo procura”. Tentei colocar o máximo de comentários e fazer uma sintaxe mais clara o possível pra que vocês entendam.

A parte que realmente faz o “upload” é apenas o comando da linha 53 que é o move_uploaded_file(). Vou explicar o nome e o uso dele:

Quando você envia um arquivo por um formulário para o PHP ele vai direto para uma pasta temporária usando um nome único e extensão .tmp (dê uma olhada no valor da variável $_FILES[‘arquivo’][‘tmp_name’]). Esse comando move o arquivo dessa pasta para a pasta que você escolheu.

Sei que essa parte do PHP (upload de arquivos) é uma das coisas que mais dá problema por aí devido as diferentes configurações de servidores… Então qualquer dúvida é só deixar um comentário que eu tento te ajudar.

Outra coisa importante que eu provavelmente não disse aqui no blog ainda: pra qualquer coisa no PHP existem, no mínimo, três formas de se alcançar o mesmo objetivo. Então não quero que encarem os meus scripts como a verdade absoluta. Eles são só um exemplo de um script eficiente e customizável baseado na minha experiência.

Espero que tenham gostado!

Documentação Oficial:

Função move_uploaded_file() » Move um arquivo que foi enviado para o servidor
Função time() » Retorna o UNIX TIMESTAMP atual
Função strtolower() » Altera uma string para ficar com as letras minúsculas
Função array_search() » Faz uma busca entre os elementos do array

http://blog.thiagobelem.net/upload-de-arquivos-com-php/

Deixe um comentário