Em algum momento na sua vida de programador você terá que obter/encontrar/separar/isolar a extensão de um certo arquivo (não estou me referindo ao mime-type dos arquivos neste post). Existe pelo menos 3 formas práticas de solucionar este caso.
A primeira, e talvez a mais utilizada, é com a função substr(), que pega os caracteres de um texto a partir da posição das letras (valor negativo, conta de trás para frente). A aplicação se faz desta forma:
$arquivo = 'nome.txt'; echo substr($arquivo, -3); //escreve 'txt'
O problema de utilizar este modo é que quando a extensão do arquivo for de mais de três caracteres, a extensão fica cortada:
$arquivo = 'nome.mpeg'; echo substr($arquivo, -3); //escreve 'peg'
A adaptação para este problema ficaria assim:
$arquivo = 'nome.mpeg'; $arquivo = substr($arquivo, -4); if($arquivo[0] == '.'){ $arquivo = substr($arquivo, -3); } echo $arquivo; //escreve 'mpeg'
Porém, ainda assim, se existir uma extensão com mais de quatro ou menos de 3 caracteres, esta solução não funciona.
A segunda forma é utilizando a função strrchr() que retorna o que vem depois de um caractere estipulado, ficando:
$arquivo = 'nome.mpeg'; echo strrchr($arquivo, '.'); // escreve '.mpeg'
Se o objetivo é trazer a extensão juntamente com o ponto, esta é a melhor forma. Porém, se não é este o objetivo, deve-se contar então com o auxílio da função str_replace():
$arquivo = 'nome.mpeg'; echo str_replace('.','',strrchr($arquivo, '.')); // escreve 'mpeg'
Outra forma de se adquirir a extensão de um arquivo. É através da função explode() para separar o nome do ponto e a função end() para encontrar a última posição do array formado, que no caso é o que vem depois da vírgula:
$arquivo = 'nome.mpeg'; echo end(explode(".", $arquivo)); //escreve 'mpeg'
Tanto a segunda quanto a terceira solução funcionam muito bem e podem ser usadas junto com a função strtolower() que transforma o nome inteiro do arquivo para letras minúsculas, ideal para urls:
$arquivo = 'Nome.MPEG'; echo strtolower(end(explode(".", $arquivo))); //escreve 'mpeg'
E finalmente, a minha forma preferida seria obter de forma direta a extensão usando a função pathinfo() que retorna informações sobre o arquivo, e para obter a extensão, só precisamos fornecer a constante PATHINFO_EXTENSION para o segundo parâmetro da função.
$arquivo = pathinfo('/home/host/Nome.mpeg', PATHINFO_EXTENSION); // escreve 'mpeg'
Até a próxima, abraços!