Как получить (извлечь) расширение файла в PHP? - PullRequest
667 голосов
/ 06 октября 2008

Это вопрос, который вы можете прочитать везде в Интернете с различными ответами:

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

$exts = split("[/\\.]", $filename);
$n    = count($exts)-1;
$ext  = $exts[$n];

и т.д.

Однако всегда есть «лучший путь», и он должен быть в переполнении стека.

Ответы [ 24 ]

5 голосов
/ 05 декабря 2013
substr($path, strrpos($path, '.') + 1);
4 голосов
/ 12 февраля 2017

Вы можете попробовать также это
(работа над php 5. * и 7)

$info = new SplFileInfo('test.zip');
echo $info->getExtension(); // ----- Output -----> zip

совет: возвращает пустую строку, если файл не имеет расширения
наслаждайся;)

4 голосов
/ 03 июня 2016

pathinfo - массив. Мы можем проверить имя каталога, имя файла, расширение и т. Д.

$path_parts = pathinfo('test.png');

echo $path_parts['extension'], "\n";
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['filename'], "\n";  
4 голосов
/ 26 февраля 2015

Вот пример, предположим, что $ filename равно "example.txt"

$ext = substr($filename,strrpos($filename,'.',-1),strlen($filename));  

Так что $ ext будет ".txt"

3 голосов
/ 20 января 2015

Я обнаружил, что решения pathinfo() и SplFileInfo хорошо работают для стандартных файлов в локальной файловой системе, но вы можете столкнуться с трудностями, если работаете с удаленными файлами, поскольку URL-адреса для допустимых изображений могут иметь # (идентификаторы фрагментов) и / или ? (параметры запроса) в конце URL, которые оба эти решения (неверно) будут рассматривать как часть расширения файла.

Я обнаружил, что это надежный способ использования pathinfo() для URL-адреса после первого его анализа, чтобы удалить ненужный беспорядок после расширения файла:

$url_components = parse_url($url); // First parse the URL
$url_path = $url_components['path']; // Then get the path component
$ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo()
3 голосов
/ 15 января 2015

Это будет работать

$ext = pathinfo($filename, PATHINFO_EXTENSION);
2 голосов
/ 17 октября 2016

Почему бы не использовать substr($path, strrpos($path,'.')+1);? Это самый быстрый метод из всех сравнений. @ Курт Чжун уже ответил.

Давайте проверим сравнительный результат здесь: https://eval.in/661574

2 голосов
/ 24 мая 2016

Вы также можете попробовать это:

 pathinfo(basename( $_FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)
1 голос
/ 05 августа 2018

Хотя «лучший путь» спорен, я считаю, что это лучший способ по нескольким причинам:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. Работает с несколькими частями расширения, например tar.gz
  2. Короткий и эффективный код
  3. Работает как с именем файла, так и с полным путем
1 голос
/ 09 сентября 2016

Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не хотите все разбивать на токены. Многие другие ответы потерпят неудачу с /root/my.folder/my.css

ltrim(strrchr($PATH, '.'),'.');
...