PHP

PHP: Função para tratar nome de um arquivo na hora de fazer upload

Olá pessoal,

esta função pode ser muito útil na hora de fazer upload de arquivos.

Imagine que o arquivo a ser enviado tenha o seguinte nome Brazil.Brasília animação.jpg (com acentuação, cedilha e espaços); ao utilizar a função abaixo, o nome ficará assim: brazil-brasilia-animacao.jpg.

<?
function tratar_arquivo_upload($string){
   // pegando a extensao do arquivo
   $partes 	= explode(".", $string);
   $extensao 	= $partes[count($partes)-1];	
   // somente o nome do arquivo
   $nome	= preg_replace('/\.[^.]*$/', '', $string);	
   // removendo simbolos, acentos etc
   $a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýýþÿŔŕ?';
   $b = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuuyybyRr-';
   $nome = strtr($nome, utf8_decode($a), $b);
   $nome = str_replace(".","-",$nome);
   $nome = preg_replace( "/[^0-9a-zA-Z\.]+/",'-',$nome);
   return utf8_decode(strtolower($nome.".".$extensao));
}
$file = $_FILES['arquivo'];
$filename = tratar_arquivo_upload(utf8_decode($file['name']));
?>

9 thoughts on “PHP: Função para tratar nome de um arquivo na hora de fazer upload

  • Claudinei

    Só tive que mudar o $file[‘name’] para $_FILES[‘arquivo’][‘name’]

    Obrigado!!

    Resposta
  • Leonardo Teixeira

    Parabéns pelo blog e muito boa função… saudações.

    Resposta
  • Carlos

    Também tive que fazer umas mudanças. Como minha pagina pega o nome do arquivo através de um , onde tinha acentuação aparecia uma interrogação, que sua função transformava em hífem.
    Pra resolver tive que modificar a string $b para que a ‘?’ continuasse ‘?’ e acrescentar a linha:
    $nome = str_replace(“?”,””,$nome);

    Aí tudo funcionou “like a charm” rsrs.

    Se vc tiver uma solução menos gambiarra eu aceito 🙂

    Valeu pela função, ajudou muito.

    Resposta
  • Atahualpa Fagundes

    Boa tarde amigo, poderia mandar uma função que renomeasse o arquivo na hora do upload, baseado em um padrão já estabelecido, Ex: [ID vindo do Banco]-foto.extensão

    Resposta
    • Fiz uma pequena alteração na função para te ajudar.

      function tratar_arquivo_upload($string, $id){
         // pegando a extensao do arquivo
         $partes 	= explode(".", $string);
         $extensao 	= $partes[count($partes)-1];	
         // somente o nome do arquivo
         $nome	= preg_replace('/.[^.]*$/', '', $string);	
         // removendo simbolos, acentos etc
         $a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýýþÿŔŕ?';
         $b = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuuyybyRr-';
         $nome = strtr($nome, utf8_decode($a), $b);
         $nome = str_replace(".","-",$nome);
         $nome = preg_replace( "/[^0-9a-zA-Z.]+/",'-',$nome);
         return $id."-".utf8_decode(strtolower($nome.".".$extensao));
      }
      Resposta
  • Olá amigo, muito bom seu script. Tive um pequeno problema e não encontrei a solução:
    quando o nome do arquivo é “porão.jpg”, a o arquivo armazenado fica assim: “pora-o.jpg”. O ideal não seria “porao.jpg”?

    Resposta
    • Resolvi o problema. Era um utf8_encode a mais que já existia no tratamento de erros que eu havia criado.
      Vida longa e próspera.

      Resposta

Deixe um comentário

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