Blog ComercialWeb - São Paulo - SP
E-mail: [email protected]
Atualizado: 11/10/2025

Upload de arquivos em PHP com validação e segurança

Upload de arquivos em PHP

Implemente upload com validação de MIME/extensão, limite de tamanho e gravação segura via move_uploaded_file. Evite executar arquivos enviados, gere nomes únicos e armazene-os em pastas não executáveis.

Formulário HTML (multipart/form-data)

<form method="post" enctype="multipart/form-data" action="upload.php">
 <input type="file" name="arquivo" accept=".jpg,.png,.pdf" />
 <button type="submit">Enviar</button>
</form>

Processamento seguro no PHP (single file)

<?php
$maxBytes = 5 * 1024 * 1024; // 5MB
$permitidos = ['image/jpeg', 'image/png', 'application/pdf'];
$dir = __DIR__ . '/uploads'; // prefira fora do docroot quando possível
if (!is_dir($dir)) { mkdir($dir, 0755, true); }

if (isset($_FILES['arquivo']) && $_FILES['arquivo']['error'] === UPLOAD_ERR_OK) {
 $tmp = $_FILES['arquivo']['tmp_name'];
 $size = (int) $_FILES['arquivo']['size'];
 $name = $_FILES['arquivo']['name'];
 $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
 if ($size > $maxBytes) { exit('Arquivo muito grande.'); }
 $fi = new finfo(FILEINFO_MIME_TYPE);
 $mime = $fi->file($tmp);
 if (!in_array($mime, $permitidos, true)) { exit('Tipo não permitido.'); }
 $novoNome = bin2hex(random_bytes(8)) . '.' . $ext;
 $destino = $dir . '/' . $novoNome;
 if (!move_uploaded_file($tmp, $destino)) { exit('Falha ao salvar.'); }
 echo 'Upload concluído: ' . $novoNome;
} else { exit('Nenhum arquivo enviado.'); }

Dica: Ajuste upload_max_filesize e post_max_size no php.ini, e valide tanto no cliente (accept) quanto no servidor.

Múltiplos arquivos (loop em $_FILES)

<?php
foreach ($_FILES['arquivos']['error'] as $i => $err) {
 if ($err !== UPLOAD_ERR_OK) { continue; }
 $tmp = $_FILES['arquivos']['tmp_name'][$i];  $name = $_FILES['arquivos']['name'][$i];  // Repita as validações de tamanho/MIME e mova para o destino...

Evite time-outs enviando poucos arquivos por requisição e aplicando limite total de tamanho.

Perguntas frequentes

Como validar o tipo do arquivo?
Use a finfo para checar o MIME real e compare com uma lista de permitidos.
Qual o limite de tamanho recomendado?
Defina um máximo (ex.: 2–5MB), valide no PHP e ajuste upload_max_filesize/post_max_size.
Como gerar nomes de arquivo seguros?
Gere nomes aleatórios com random_bytes + extensão validada; não confie no nome original.
Onde salvar com segurança?
Prefira fora do docroot ou em diretório sem execução. Faça download por script quando for privado.
Fonte: Redação


Mais Lidos

Ferramentas úteis

Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.