Suporte

Tudo sobre PHP

Upload de arquivos em PHP

Formulário de upload de arquivos em PHP verificando a extensão

Para efetuar o upload de arquivos em PHP basta acessar a coleção $_FILES do PHP, ela armazena os dados dos arquivos enviados para o servidor. No exemplo abaixo, vamos separar o código do formulário (formulario.html) do script que faz o upload:


<!DOCTYPE html>
<html>
  <head>
    <title>Formulário</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  </head>
  <body>
    <h1>Formulário</h1>
    <form enctype="multipart/form-data" action="upload.php" method="post">
      <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
      <p>Selecione o arquivo <input name="userfile" type="file" /></p>
      <p><input type="submit" value="Enviar arquivo" /></p>
    </form>
  </body>
</html>
Crie um arquivo com o nome upload.php. Este arquivo receberá o arquivo e o gravará em um diretório:


<?php
$OK = Verificacao($_FILES);
//gera um nome tratado para os padrões web
$sArquivo = 'uploads/' . TratarNomeArquivo($_FILES['userfile']['name']); 

//Se os dados enviados foram aprovados pela verificação
if ($OK == '') { 
  //move o arquivo salvo para a pasta de destino, já com o novo nome
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $sArquivo)) { 
    echo '<p>Arquivo ' . $sArquivo . ' carregado com sucesso!';
    echo '<p><img src="' . $sArquivo . '" /></p>';
  } else {
    print "Possível ataque de upload! Aqui esta alguma informação:\n";
    print_r($_FILES);
  }
} else {
  echo '<p><strong>Erro ao salvar arquivo</strong></p>';
  echo "<p>Detalhes do erro: $OK</p>";
}

//trata o nome de arquivo tornando-o compatível com os padrões web
function TratarNomeArquivo($string){
  $sExtensao = pathinfo($string, PATHINFO_EXTENSION);
 
  $sRet = str_replace(' ', '-', trim(ereg_replace("[^a-zA-Z0-9\_\-\ ]", " ", 
      strtr(substr($string, 0, strlen($string) - strlen($sExtensao)), 
      "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ", "aaaaeeiooouucAAAAEEIOOOUUC"))) . '.' . $sExtensao);
  while (strpos($sRet, '--'))  $sRet = str_replace('--', '-', $sRet);    
    
  return $sRet;
}

//Verifica o tamanho e a extensão do arquivo
function Verificacao($aDados) { //Verificação de segurança
  $aExtensoesPermitidas = Array('gif', 'jpg', 'jpeg', 'png'); //Extensões permitidas
  $iMaxTamanhoArquivo = 300000; //Tamanho máximo do arquivo permitido
  $sRet = '';
  
  if (in_array(pathinfo($aDados['userfile']['name'], 
      PATHINFO_EXTENSION), $aExtensoesPermitidas)) {
    if ($aDados['userfile']['size'] > $iMaxTamanhoArquivo) {
      $sRet = "Tamanho do arquivo excede o máximo permitido.";
    }
  } else {
    $sRet = "Tipo de arquivo não permitido.";
  }
  
  return $sRet;
}
?>
Importante: você deve tomar cuidado com as extensões permitidas durante o upload. O recomendado é que apenas extensões de imagens (gif, jpg e png) sejam permitidas. Jamais permita o upload de arquivos .php, caso contrário seu site estará vulnerável.
Atenção: As instruções desta página são exclusivas para os Planos de hospedagem na plataforma Unix.

Contrate agora e tenha até 60 dias gratis para testar!

Digite um domínio para pesquisar
Domínios hospedados
Clientes satisfeitos