O upload de arquivos é uma funcionalidade fundamental em muitos sistemas web, como quando os usuários precisam enviar fotos, documentos ou outros tipos de arquivos. PHP oferece um método simples e seguro para gerenciar uploads. Neste post, vamos aprender como criar um formulário para upload de arquivos e como processar o upload no servidor com PHP.

Requisitos para upload

Antes de começarmos, certifique-se de que seu ambiente PHP está configurado corretamente para aceitar uploads de arquivos. Verifique o arquivo php.ini e certifique-se de que as seguintes diretivas estão habilitadas:

file_uploads = On
upload_max_filesize = 2M
post_max_size = 8M
  • file_uploads: Permite uploads de arquivos.

  • upload_max_filesize: Define o tamanho máximo permitido para o arquivo (neste exemplo, 2MB).

  • post_max_size: Define o tamanho máximo permitido para os dados de uma requisição POST.

Agora que estamos prontos, vamos ao código!

Passo 1: Criar o formulário HTML

Primeiro, criamos um formulário HTML simples com o campo de upload de arquivos. É importante que o formulário tenha o atributo enctype="multipart/form-data", pois isso indica ao navegador que ele deve enviar os dados do arquivo junto com o restante do formulário.

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload de Arquivos com PHP</title>
</head>
<body>

<h1>Envie um arquivo</h1>

<!-- Formulário para upload de arquivos -->
<form action="upload.php" method="POST" enctype="multipart/form-data">
    <label for="arquivo">Escolha um arquivo:</label>
    <input type="file" name="arquivo" id="arquivo"><br><br>
    <input type="submit" value="Fazer Upload">
</form>

</body>
</html>

Passo 2: Processar o upload no PHP

Agora, vamos criar o arquivo upload.php, que irá processar o upload. Aqui, usaremos a superglobal $_FILES, que é um array associativo que contém informações sobre o arquivo enviado, como nome, tipo, tamanho, e o caminho temporário onde ele foi salvo no servidor.

<?php
// Verificar se o formulário foi submetido
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Definir o diretório de destino
    $diretorio = 'uploads/';
    
    // Verifica se a pasta de upload existe; caso contrário, cria a pasta
    if (!is_dir($diretorio)) {
        mkdir($diretorio, 0755, true);
    }

    // Captura as informações do arquivo enviado
    $arquivo = $_FILES['arquivo'];
    $nomeArquivo = basename($arquivo['name']);
    $caminhoDestino = $diretorio . $nomeArquivo;
    
    // Verificar se o upload foi bem-sucedido
    if (move_uploaded_file($arquivo['tmp_name'], $caminhoDestino)) {
        echo "Upload do arquivo realizado com sucesso!<br>";
        echo "Arquivo enviado: " . htmlspecialchars($nomeArquivo) . "<br>";
        echo "Caminho do arquivo: " . $caminhoDestino;
    } else {
        echo "Erro ao fazer upload do arquivo.";
    }
} else {
    echo "Nenhum arquivo foi enviado.";
}
?>

Explicação do Código

  1. $_FILES: Esse array associativo contém várias informações sobre o arquivo enviado. No nosso caso, estamos interessados em:

    • $_FILES['arquivo']['name']: O nome original do arquivo.

    • $_FILES['arquivo']['tmp_name']: O caminho temporário onde o arquivo foi armazenado no servidor.

    • $_FILES['arquivo']['error']: Possíveis erros que ocorreram durante o upload.

  2. move_uploaded_file(): Essa função move o arquivo do diretório temporário para o destino final. Se o arquivo for movido com sucesso, o upload é considerado completo.

  3. Verificação de diretório: Usamos is_dir() e mkdir() para garantir que o diretório de uploads existe. Caso contrário, criamos a pasta com permissões apropriadas.

Passo 3: Limitar o tipo de arquivo

Em muitos casos, você desejará limitar os tipos de arquivos que os usuários podem enviar (como imagens, PDF, etc.). Para isso, podemos verificar o tipo de arquivo ou a extensão antes de permitir o upload.

Exemplo de verificação de extensão:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $diretorio = 'uploads/';
    if (!is_dir($diretorio)) {
        mkdir($diretorio, 0755, true);
    }

    $arquivo = $_FILES['arquivo'];
    $nomeArquivo = basename($arquivo['name']);
    $caminhoDestino = $diretorio . $nomeArquivo;

    // Permitir apenas certos tipos de arquivos
    $extensoesPermitidas = array('jpg', 'jpeg', 'png', 'gif', 'pdf');
    $extensao = pathinfo($nomeArquivo, PATHINFO_EXTENSION);

    if (in_array(strtolower($extensao), $extensoesPermitidas)) {
        if (move_uploaded_file($arquivo['tmp_name'], $caminhoDestino)) {
            echo "Upload do arquivo realizado com sucesso!";
        } else {
            echo "Erro ao fazer upload do arquivo.";
        }
    } else {
        echo "Tipo de arquivo não permitido. Somente arquivos JPG, PNG, GIF e PDF são aceitos.";
    }
} else {
    echo "Nenhum arquivo foi enviado.";
}
?>

Passo 4: Definir limite de tamanho

Também é importante definir um limite de tamanho para os arquivos que podem ser enviados. Isso pode ser feito no próprio código PHP.

// Definir limite de tamanho (em bytes)
$tamanhoMaximo = 2 * 1024 * 1024; // 2MB

if ($arquivo['size'] > $tamanhoMaximo) {
    echo "Arquivo muito grande. O limite é de 2MB.";
} else {
    // Processo de upload continua...
}

Erros comuns no upload de arquivos

Ao realizar upload de arquivos, alguns erros podem ocorrer. Esses erros estão disponíveis na variável $_FILES['arquivo']['error']. Alguns dos erros mais comuns são:

  • UPLOAD_ERR_INI_SIZE: O arquivo excede o tamanho máximo definido no php.ini.

  • UPLOAD_ERR_FORM_SIZE: O arquivo excede o tamanho máximo especificado no formulário HTML.

  • UPLOAD_ERR_PARTIAL: O arquivo foi apenas parcialmente enviado.

  • UPLOAD_ERR_NO_FILE: Nenhum arquivo foi enviado.

Exemplo de tratamento de erro:

if ($arquivo['error'] == UPLOAD_ERR_OK) {
    // Processo de upload continua...
} else {
    echo "Erro no upload: " . $arquivo['error'];
}

Fazer upload de arquivos com PHP é uma tarefa relativamente simples, mas que requer algumas medidas de segurança e validação.

Certifique-se sempre de verificar o tipo e o tamanho dos arquivos, bem como lidar corretamente com erros para evitar problemas. Com o uso correto das funções PHP, você pode gerenciar uploads de maneira segura e eficiente em seu sistema.

QUER APRENDER PHP ORIENTADO A OBJETOS OU APERFEIÇOAR O QUE JÁ SABE?

Então conheça o curso online que já ajudou milhares de pessoas a aprender a programar e desenvolver seus próprios projetos do ZERO e usando orientação a objetos de uma forma fácil de entender.

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *