Como obter a extensão de arquivo em PHP: melhores práticas de 2025
\n\nVocê já se deparou com uma situação em que precisava determinar rapidamente qual arquivo o usuário está enviando — uma imagem, um documento ou um arquivo compactado? Ou talvez você esteja escrevendo um parser de arquivos e precise processar dinamicamente centenas de extensões? A pergunta "How can I get a file's extension in PHP?" está há anos entre as mais populares no Stack Overflow, acumulando centenas de milhares de visualizações. E isso não é por acaso.
\n\nParece simples, não é? Pegue a string, encontre o ponto, corte o final. Mas o PHP é uma linguagem com personalidade. Ele oferece várias funções nativas, e escolher a correta depende do contexto. Em 2025, quando segurança e desempenho são mais importantes do que nunca, vamos analisar todas as maneiras atuais e identificar a melhor.
\n\nNeste artigo, você aprenderá:
\n- \n
- Cinco maneiras funcionais de obter a extensão de arquivo em PHP. \n
- Qual método deve ser usado em 95% dos casos. \n
- Como não cair em armadilhas com arquivos sem extensão ou com vários pontos. \n
- Exemplos reais de código para copiar. \n
Método 1: O clássico — pathinfo()
\n\nSe você perguntar a qualquer desenvolvedor PHP experiente como obter a extensão de um arquivo, ele responderá sem hesitar: pathinfo(). Esta é a maneira mais popular e recomendada. A função retorna um array com informações do caminho: diretório, nome do arquivo, extensão e nome completo.
<?php\n$file = 'document.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\necho $extension; // Exibe: pdf\n?>\n\n\nA beleza deste método está na sua simplicidade e legibilidade. Você passa o nome do arquivo e a constante PATHINFO_EXTENSION — e obtém um resultado limpo, sem caracteres extras. O pathinfo() lida corretamente com a maioria dos casos padrão, incluindo arquivos com vários pontos, como archive.tar.gz — neste caso, ele retorna gz, o que é lógico, pois é a extensão final.
Vantagens: intuitivo, função nativa, funciona com caminhos de qualquer complexidade.
\nDesvantagens: pode retornar uma string vazia se o arquivo não tiver extensão.
\n\nMétodo 2: Trabalhando com strings — strrchr() + substr()
\n\nÀs vezes, em código legado ou em exemplos didáticos, você encontra parsing manual. A ideia é simples: encontrar o último ponto na string e pegar tudo o que vem depois dele.
\n\n<?php\n$file = 'image.jpg';\n$extension = substr(strrchr($file, '.'), 1);\necho $extension; // Exibe: jpg\n?>\n\n\nA função strrchr() encontra a última ocorrência do caractere e retorna tudo a partir dele (incluindo o ponto). O substr() com o parâmetro 1 remove o ponto. Funciona de forma confiável, mas o código fica menos legível.
Fato interessante: este método é um herdeiro direto da era das funções estilo C. Ele é mais rápido que o pathinfo() em micro-benchmarks, mas em projetos reais a diferença é imperceptível. Use-o se estiver escrevendo um parser de alta carga e cada microssegundo contar.
Método 3: Rápido e sujo — explode()
\n\nA maneira mais ingênua que vem à mente dos iniciantes: dividir a string pelo ponto e pegar o último elemento do array.
\n\n<?php\n$file = 'report.xlsx';\n$parts = explode('.', $file);\n$extension = end($parts);\necho $extension; // Exibe: xlsx\n?>\n\n\nAtenção: esta é uma má prática. Por quê? Imagine o arquivo my.file.name.txt. O explode() o dividirá em 4 partes, e end() retornará txt. Parece correto. Mas e se o arquivo se chamar .htaccess? O array será ['', 'htaccess'], e a extensão retornada será htaccess, embora seja o nome completo do arquivo. Ou um arquivo sem extensão — retornará o próprio nome.
Este método deve