Como obter extensão de arquivo em PHP: melhores práticas 2025

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como obter a extensão de arquivo em PHP: do iniciante ao profissional em 2025

\n\n

Você já parou para pensar quantas vezes por dia um desenvolvedor PHP precisa extrair a extensão de um arquivo? Dezenas, senão centenas. Upload de avatares, processamento de documentos, validação de imagens — em todos os casos é preciso identificar o tipo de arquivo: .jpg, .pdf ou o astuto .php.jpg.

\n\n

A pergunta "How can I get a file's extension in PHP?" é uma das mais populares no Stack Overflow. E não é à toa. Parece simples, mas o diabo está nos detalhes. Em 2025, temos não apenas os clássicos pathinfo() e explode(), mas também novos recursos do PHP 8.4 que tornam o código mais limpo e seguro.

\n\n

Vamos explorar 5 métodos funcionais, seus prós, contras e quando usar cada um. Vamos nessa!

\n\n

1. O clássico: pathinfo() — o rei dos métodos

\n\n

O método mais popular e correto é a função pathinfo(). Ela existe desde o PHP 4 e continua relevante. Por quê? Porque é inteligente: considera separadores de caminho do sistema, funciona com URLs e não quebra com pontos no nome do arquivo.

\n\n
<?php\n$arquivo = 'documento.relatorio.pdf';\n$extensao = pathinfo($arquivo, PATHINFO_EXTENSION);\n// Resultado: 'pdf'\n?>
\n\n

Mas há um detalhe. Se o arquivo não tiver extensão, pathinfo() retorna uma string vazia. Não null, nem false — apenas uma string vazia. Isso é importante para validações rigorosas.

\n\n
<?php\n$arquivo = 'LEIAME';\n$ext = pathinfo($arquivo, PATHINFO_EXTENSION);\nvar_dump($ext); // string(0) ""\n?>
\n\n

Quando usar: sempre que precisar obter a extensão de forma rápida e confiável. É o padrão da indústria.

\n\n

2. Método tradicional: explode() e strrpos()

\n\n

Alguns desenvolvedores mais experientes preferem a manipulação manual de strings. A ideia é simples: encontrar o último ponto e pegar tudo depois dele.

\n\n
<?php\n$arquivo = 'imagem.jpg';\n$partes = explode('.', $arquivo);\n$extensao = end($partes);\n// Resultado: 'jpg'\n?>
\n\n

Parece funcionar. Mas tem um problema: explode() cria um array, e end() move o ponteiro interno do array. Não é crítico, mas não é elegante.

\n\n

Uma versão mais eficiente usa strrpos() + substr():

\n\n
<?php\n$arquivo = 'arquivo.tar.gz';\n$pos = strrpos($arquivo, '.');\n$extensao = $pos !== false ? substr($arquivo, $pos + 1) : '';\n// Resultado: 'gz'\n?>
\n\n

Observe: strrpos() busca a última ocorrência do ponto. Isso é correto — queremos gz, não tar.gz.

\n\n

Quando usar: quando pathinfo() não estiver disponível (raro) ou quando precisar de mais controle sobre a lógica.

\n\n

3. Novidade de 2025: str_contains() e str_starts_with()

\n\n

No PHP 8.0 surgiram str_contains() e str_starts_with(), e no PHP 8.4 houve melhorias no suporte a strings multibyte. Isso abre novas possibilidades elegantes.

\n\n
<?php\n$arquivo = 'foto.2025.jpg';\n\nif (str_contains($arquivo, '.')) {\n    $extensao = substr($arquivo, strrpos($arquivo, '.') + 1);\n} else {\n    $extensao = '';\n}\n// Resultado: 'jpg'\n?>
\n\n

Bonito? Nem tanto. Mas se você precisa verificar se o arquivo é uma imagem, str_ends_with() é seu aliado:

\n\n
<?php\n$arquivo = 'avatar.png';\n$ehImagem = str_ends_with($arquivo, '.png') || str_ends_with($arquivo, '.jpg');\n// true\n?>
\n\n

Quando usar: para verificações rápidas de extensões específicas sem extrair a extensão completa.

\n\n

4. Expressões regulares: quando você quer tudo de uma vez

\n\n

Às vezes, apenas a extensão não é suficiente. Por exemplo, você pode precisar verificar se o arquivo é uma imagem segura e, ao mesmo tempo, extrair o nome sem a extensão. É aí que entram as regex.

Blogs

Book Recommendations