Şöyle basit bir fonksiyon ile almanız daha doğrudur.
function uzanti($dosya)
{
if (false !== $pos = strrpos($dosya, ".")) {
return substr($dosya, $pos + 1);
}
return null;
}
Alternatif olarak aşağıdaki fonksiyonu da kullanabilirsiniz. Yukarıdaki fonksiyon aşağıdakinden %95 oranında daha hızlı çalışır (8 çekirdekli ryzen cpu ile test edilmiştir).
function uzanti2($dosya)
{
$arr = explode(".", $dosya);
if (count($arr) < 2) {
return null;
}
return end($arr);
}
Yukarıdaki her iki fonksiyon da uzantısı olmayan dosyalar için null döndürür. Son karakteri "." olan dosyalar için ise boş string döndürür. Bu yüzden dönen değerler aşağıdaki gibi kontrol edilmelidir:
$ext = uzanti("dosya.jpg.exe");
if ($ext == "") {
exit("uzantisiz dosya girilmis.");
}