leitura de
Encontrou um problema no conteúdo? Por favor, deixe seu comentário!

Hoje resolvi falar um pouquinho mais sobre como o upload de arquivos funciona, passo a passo, onde cada coisa se encaixa e como você pode ter total controle dele.

Como exemplo usarei um formulário onde o visitante enviará o seu nome e uma foto para um “perfil” de um rede social.

1.0 - O formulário HTML

Todo upload, geralmente, começa com um formulário onde o usuário insere o arquivo que será enviado e manipulado para o servidor. Veja o nosso exemplo de formulário:

É um formulário simples, com dois campos e um submit… O que importa nesse formulário são três coisas:

  • A propriedade action do formulário (linha 1)

    No action do formulário você especifica para qual endereço você está enviando os dados... Se você não definir essa propriedade os dados serão enviados para o mesmo endereço do formulário
  • A propriedade enctype do formulário (linha 1)

    Você precisa definir o enctype como "multipart/form-data" para o upload funcionar, caso contrário você não vai poder manipular os arquivos
  • A propriedade name do input file (linha 7)

    É nesse campo que você irá enviar o arquivo para ser manipulado pelo PHP... E é a propriedade name que você irá usar, no PHP, para saber de qual arquivos estamos falando

2.0 - Manipulando o upload no arquivo recebe.php

Agora iremos construir o arquivo recebe.php passo a passo para você entender o que acontece quando enviamos um arquivo por upload.

Normalmente quando enviamos dados através de um formulário (com a propriedade method igual a post) esses dados são disponibilizados em uma variável $_POST… Então, no começo do arquivo, iremos arquivar o nome do usuário em uma nova variável:

Só pra lembrar: $_POST é um array e os seus índices serão as propriedades “name” dos inputs.

2.1 - A variável $_FILES

Ao enviar um arquivo pelo formulário acima é criada uma nova variável (além da $_POST) que é chamada $_FILES… Essa variável funciona da mesma forma que a $_POST e é identificada pela propriedade name do input. A diferença é que o $_FILES traz várias informações sobre o arquivo enviado.

Veja um exemplo onde pegamos todas essas informações e salvamos em novas variáveis:

Preste atenção que a parte [‘arquivo’] se deve a propriedade name do input file no lá formulário HTML.

2.2 - Erros de upload

Quando algo der errado com o upload em questão você vai poder verificar o que aconteceu baseando-se no valor da variável $_FILES[‘arquivo’][‘error’]… Quando ela for diferente de zero é que algo de errado aconteceu e você pode verificar aqui possíveis valores de erro no upload.

2.3 - Movendo o arquivo para a pasta certa

Agora iremos mover o arquivo para a pasta correta caso o upload tenha ocorrido sem problemas:

Com isso, após verificar se não houve nenhum erro, iremos mover o arquivo que está na pasta temporária do PHP para a pasta /uploads/ do seu site.

A função move_uploaded_file() usa dois argumentos: o primeiro é o nome do arquivo temporário e o segundo é local onde o arquivo será salvo (incluindo seu novo nome)… No caso usamos o nome original do arquivo, mas caso você queira renomear o arquivo é exatamente nessa linha (18) que você deve fazer isso.

Depois do upload a variável $upload terá um valor lógico (true ou false) que indica se o arquivo foi movido com sucesso ou não.

Nosso upload já está pronto… O problema é que ele aceita qualquer tipo de arquivo e não é isso que queremos.

3.0 - Validando o tipo de arquivo enviado

Usando a variável $arqType poderemos identificar qual é o tipo do arquivo… Esse tipo é chamado de mime-type.

Vamos criar uma lista com todos os mime-types permitidos e verificar se foi enviado um arquivo com o tipo correto:

Se precisar você ver aqui uma lista de mime-types usados por cada tipo de arquivo.

4.0 - Validando o tamanho do arquivo enviado

Muita gente tem problemas com o tamanho de arquivo enviado pelos usuários pois, dependendo da quantidade e do tipo de arquivo, você rapidamente vai ter GBs e GBs de lixo no seu servidor. Se quiser fazer essa validação, é só fazer assim:

5.0 - Renomeando o arquivo enviado

Caso você queira armazenar o arquivo enviado com outro nome, mas manter a extensão do mesmo, é só fazer assim:

Na linha 31 pegamos a extensão do arquivo enviado e na linha 33 criamos um novo nome para ele usando um UNIX TIMESTAMP e a extensão original.

6.0 - Salvando tudo no banco de dados

Acabamos de passar por todas as partes do upload e manipulação de um arquivo!

Agora vamos salvar os dados recebidos no banco de dados apenas para concluir o exemplo da criação de um perfil em uma rede social:

Espero que tenham gostado e entendido! ;)

Thiago Belem / Blog

Thiago Belem


Publicado

Thiago Belem / Blog

Thiago Belem / Blog

Artigos e tutoriais sobre desenvolvimento WEB

Continue lendo