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
- $_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.
- 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.
- Verificação de diretório: Usamos
is_dir()
emkdir()
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.
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:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários