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
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/