Как мне получить расширение файла в PHP?

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

$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];

и т.п.

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


person e-satis    schedule 06.10.2008    source источник
comment
Источник вопроса и ответа: cowburn.info/2008/01/13 / get-file-extension-compare   -  person salathe    schedule 26.03.2011
comment
Еще один способ получить ext - strrchr($filename, '.');   -  person verybadbug    schedule 30.09.2013
comment
strrpos - правильный способ (см. мой ответ), но для случая без расширения он нуждается в дополнении.   -  person dkellner    schedule 04.10.2020


Ответы (29)


Люди из других языков сценариев всегда думают, что их язык лучше, потому что для этого у них есть встроенная функция, а не PHP (сейчас я смотрю на Pythonistas :-)).

На самом деле он существует, но мало кто об этом знает. Встречайте pathinfo():

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Это быстро и встроено. pathinfo() может предоставить вам другую информацию, например канонический путь, в зависимости от константы, которую вы ему передаете.

Помните, что если вы хотите иметь возможность работать с символами, отличными от ASCII, вам необходимо сначала установить языковой стандарт. НАПРИМЕР:

setlocale(LC_ALL,'en_US.UTF-8');

Также обратите внимание, что это не принимает во внимание содержимое файла или тип mime, вы получаете только расширение. Но это то, о чем вы просили.

Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.

Наслаждаться

person e-satis    schedule 06.10.2008
comment
мой pathinfo отключен, а затем короткий способ извлечь строку расширения? - person khizar ansari; 10.08.2012
comment
@khizaransari Тебе стоит поискать другого хостинг-провайдера, тот, который у тебя есть, глупый. На самом деле, я серьезно. Нет никаких причин для отключения этой функции. Скажи им это. В качестве обходного пути: function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); } Убедитесь, что файл имеет расширение, хотя он может делать что угодно, если вы передаете путь в качестве аргумента! - person Luc; 20.09.2012
comment
У меня проблема с этим примером - он не работает с такими именами, как ............. док, есть идеи, почему? - person Bor; 19.12.2013
comment
мое представление о PHP по сравнению с python полностью изменилось теперь, когда я знаю об этой функции: O - person Tommaso Barbugli; 02.07.2014
comment
@ e-satis, но он не работает в одном сценарии в моем приложении. Как и в некоторых случаях, я получаю URL-адрес в следующем формате www.domain.com/image.php?id=123&idlocation=987&number=01 для загрузки изображений, поскольку этот uRL не имеет имени изображения или расширения, с которым pathifo () терпит неудачу дайте нам расширение изображения. ТАК что делать, пожалуйста !!! Помоги мне - person Vikram Anand Bhushan; 06.04.2015
comment
Это действительно несправедливо, что я не потратил впустую столько, сколько другие люди здесь, а вместо этого нашел этот ответ и быстро решил свою проблему. - person ted.strauss; 14.04.2015
comment
Это НЕ безопасное решение. Если кто-то загрузил на вашу конечную точку без использования браузера, он может подделать расширение. Например: pathinfo ('image.jpg.spoofed', PATHINFO_EXTENSION) возвращает 'spoofed' !! Он не проверяет фактическое тело файла, поскольку не принимает путь к файлу и не проверяет свой результат с помощью карты MimeType. Вы должны убедиться, что значение, которое вы получаете от этого, действительно является допустимым типом, запросив iana.org/assignments/media-types/media-types.txt или проверив свою собственную карту MimeType. - person John Foley; 23.04.2015
comment
БУДЬТЕ ВНИМАТЕЛЬНЫ !!!!! ЭТО НЕ БЕЗОПАСНАЯ ФУНКЦИЯ !!! прочтите другие ответы! - person T.Todua; 21.11.2016
comment
Это очень медленный способ сделать это, pathinfo делает гораздо больше, чем вы ищете, и все это отбрасывается при возврате. Я добавил еще один ответ с некоторыми измерениями времени. - person dkellner; 07.04.2020

pathinfo()

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"
person Adam Wright    schedule 06.10.2008
comment
Начиная с PHP 5.5 - ›echo pathinfo('/foo/bar/baz.bill')['extension']; - person Salman A; 13.09.2014
comment
Это работает даже на этом уровне (Twitter json): $ ext = pathinfo ($ result- ›extended_entities-› media [0] - ›video_info-› варианты [1] - ›url, PATHINFO_EXTENSION); - person KJS; 04.12.2016

Пример URL: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

A) Не используйте предложенные небезопасные _2 _ :

pathinfo($url)['dirname']   ???? 'http://example.com/myfolder'
pathinfo($url)['basename']  ???? 'sympony.mp3?a=1&b=2#XYZ'         // <------- BAD !!
pathinfo($url)['extension'] ???? 'mp3?a=1&b=2#XYZ'                 // <------- BAD !!
pathinfo($url)['filename']  ???? 'sympony'

Б) Используйте PARSE_URL:

parse_url($url)['scheme']   ???? 'http'
parse_url($url)['host']     ???? 'example.com'
parse_url($url)['path']     ???? '/myfolder/sympony.mp3'
parse_url($url)['query']    ???? 'aa=1&bb=2'
parse_url($url)['fragment'] ???? 'XYZ'

БОНУС: просмотрите все собственные примеры PHP

person T.Todua    schedule 17.07.2015
comment
Этот ответ охватывает все, например. такой файл, как foo_folder/foo-file.jpg?1345838509, потерпит неудачу всего лишь с pathinfo, спасибо - person ; 20.07.2015
comment
Не совсем по теме, но решила мою проблему! - person Howie; 24.11.2015
comment
Ничего не забывай! parse_url - это URL, а pathinfo - путь к файлу. - person Nabi K.A.Z.; 09.06.2017
comment
Что вы имеете в виду забыть информацию о пути? Вы используете его в решении! - person Autumn Leonard; 20.06.2017
comment
@AutumnLeonard Он этого не делает, он просто показал разницу между pathinfo и parse_url. - person ; 29.08.2017
comment
для тех, у кого проблемы с именами файлов, такими как Webp.net-resizeimage_% 288% 29.png? 1547034073, где у нас есть несколько точек, вы можете использовать функцию php end (), чтобы получить последний элемент массива, который включает формат файла - person Artin Artin; 01.07.2020
comment
Естественно, вы не должны использовать pathinfo с URL-адресом. - person Herbert Van-Vliet; 06.05.2021

Также есть SplFileInfo:

$file = new SplFileInfo($path);
$ext  = $file->getExtension();

Часто можно написать лучший код, если передать такой объект вместо строки. Тогда ваш код более говорящий. Начиная с PHP 5.4 это однострочный:

$ext  = (new SplFileInfo($path))->getExtension();
person hakre    schedule 17.10.2012
comment
Фантастика, его объекты полностью вниз :) - person Christopher Chase; 26.06.2013
comment
Имейте в виду, что ->getExtension() доступен в SplFileInfo, начиная с PHP 5.3.6. - person matthias; 26.08.2014
comment
@matthias: Имейте в виду, что SPL можно отключить в версиях PHP, предшествующих выпуску PHP 5.3.0. Если вы все еще не используете PHP 5.3, но 5.2 или ниже, этот ответ, скорее всего, не подходит для стабильного кода. В противном случае вы можете стабилизировать свой код, потребовав конкретную версию PHP, и в противном случае выйти из строя. - person hakre; 26.08.2014
comment
@hakre Хотя вы правы, говоря, что его можно отключить в версиях, предшествующих 5.3.0, расширение SPL, тем не менее, скомпилировано по умолчанию, начиная с PHP 5.0.0. Так что этот комментарий действительно имеет смысл для людей, вынужденных использовать PHP 5.2 или ниже и не желающих отказываться от использования определенных классов SPL. - person matthias; 26.08.2014
comment
ага просто мертвый вариант пух :) - person hakre; 26.08.2014
comment
$ext = pathinfo($file, PATHINFO_EXTENSION) или $ext = pathinfo($file)['extension'] лучше однострочные. - person Iiridayn; 16.03.2018
comment
Этот ответ полезен, если вам нужно расширение из простой строки - person Alcalyn; 16.03.2021

Ответ E-satis - это правильный способ определить расширение файла.

В качестве альтернативы, вместо того, чтобы полагаться на расширение файлов, вы можете использовать fileinfo для определения MIME-типа файлов.

Вот упрощенный пример обработки изображения, загруженного пользователем:

// Code assumes necessary extensions are installed and a successful file upload has already occurred

// Create a FileInfo object
$finfo = new FileInfo(null, '/path/to/magic/file');

// Determine the MIME type of the uploaded file
switch ($finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME)) {        
    case 'image/jpg':
        $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
    break;

    case 'image/png':
        $im = imagecreatefrompng($_FILES['image']['tmp_name']);
    break;

    case 'image/gif':
        $im = imagecreatefromgif($_FILES['image']['tmp_name']);
    break;
}
person Toxygene    schedule 06.10.2008
comment
Это ЕДИНСТВЕННЫЙ правильный ответ. Я не понимаю, почему люди голосовали за других. Да, этот подход требует от разработчика больших усилий, но повышает производительность (хотя и немного, но дает). См. это. - person Bhavik Shah; 31.01.2014
comment
@Bhavik: В некоторых случаях нам может понадобиться только расширение файла, они касаются проверки типа mime. Но на самом деле вопрос касается расширения файла, а не типа файла. Так что это НЕ лучший ответ на этот вопрос. (пока нет ответа) - person Sasi varna kumar; 23.10.2015

Если он не содержит пути, вы также можете использовать:

array_pop(explode('.', $fname))

Где $fname - имя файла, например: my_picture.jpg. И результат будет: jpg

person Anonymous    schedule 11.08.2012
comment
@ Почему у этого есть 3 голоса против? это дает правильный результат. Пожалуйста, объясни - person railsbox; 22.05.2014
comment
В этом нет ничего плохого, просто это не лучший способ сделать это. Проголосовали за немного баланса. - person ; 15.07.2014
comment
Это лучший способ, когда вам нужно настоящее расширение, а имя файла может содержать несколько., Например, загруженные пользователем фотографии в моем случае. - person Rauli Rajande; 21.07.2014
comment
Это не удается, если имя файла не имеет расширения. Попробуйте передать myfile, и он вернет myfile. Правильное возвращаемое значение - это пустая строка в качестве расширения в этом случае использования. - person pmont; 05.12.2014
comment
Это неправильно, потому что array_pop () выдаст уведомление, потому что он принимает указатель в качестве параметра. - person jurchiks; 31.07.2015
comment
так какой идентификатор у моего файла this.is.file.ext ??? - person Tayyab Hayat; 22.05.2021

Сделай это быстрее!

Другими словами, пожалуйста, прекратите использовать pathinfo для этой работы. Это довольно медленно. Такие низкоуровневые вызовы должны быть очень быстрыми, поэтому я подумал, что стоит провести некоторое исследование. Я пробовал несколько методов (с различной длиной строки, длиной расширения, несколькими запусками каждый), вот несколько разумных. Мне пришлось обновить предыдущую статистику, потому что версии php (а также ядра и многое другое) меняются, но на серверах Linux вывод всегда один и тот же.

/*   387 ns */ function method1($s) {return preg_replace("/.*\./","",$s);} // edge case problem
/*   769 ns */ function method2($s) {preg_match("/\.([^\.]+)$/",$s,$a);return $a[1];}
/*    67 ns */ function method3($s) {$n = strrpos($s,"."); if($n===false) return "";return substr($s,$n+1);}
/*   175 ns */ function method4($s) {$a = explode(".",$s);$n = count($a); if($n==1) return "";return $a[$n-1];}
/*   731 ns */ function method5($s) {return pathinfo($s, PATHINFO_EXTENSION);}
/*   732 ns */ function method6($s) {return (new SplFileInfo($s))->getExtension();}

Строка теста была something.that.contains.dots.txt; как видите, измерения были разделены на наносекунды. SplFileInfo и pathinfo - отличные ребята, но для такой работы просто не стоит их будить. По той же причине explode() значительно быстрее регулярного выражения. Очень простые инструменты почти всегда побеждают более сложные.

Боковое примечание: в Windows результаты совершенно другие. Думаю, стоит проверить цифры для вашего случая, если вы используете IIS.

Заключение

Похоже, это Путь Самурая:

function fileExtension($s) {
    $n = strrpos($s,".");
    return ($n===false) ? "" : substr($s,$n+1);
}

Некоторые тестовые примеры

File name            fileExtension()
----------------------------------------
file                 ""
file.                ""
file.txt             "txt"
file.txt.bin         "bin"
file.txt.whatever    "whatever"
.htaccess            "htaccess"

(Последний вариант немного особенный; это может быть только расширение или пустое расширение с чистым именем .htaccess, я не уверен, есть ли для этого правило. Так что я думаю, вы можете использовать оба, поскольку пока вы знаете, что делаете.)

person dkellner    schedule 07.04.2020
comment
Большое спасибо за это. Всегда приятно найти эти хорошо исследованные новые ответы на старые вопросы. Экономит время, выясняя, какие методы могут быть устаревшими. - person Leon Williams; 23.01.2021
comment
В этом случае методу strrpos может потребоваться еще одна проверка без расширения имени файла. - person ungalcrys; 02.02.2021
comment
@ungalcrys в этом случае substr примет пустую часть, поэтому само расширение будет таким, как и должно. - person dkellner; 02.02.2021
comment
@dkellner также хочет проверить $info = new SplFileInfo('test.png');$info->getExtension();? - person Timo Huovinen; 11.05.2021
comment
@TimoHuovinen Сервер, который я использовал для этого теста, теперь дает совершенно другие результаты. Возможно, было и обновление php, но наверняка это более мощное оборудование. В любом случае, хотя phpinfo теперь примерно такой же, как method1, splFileInfo работает так же медленно, даже немного медленнее. Думаю, я обновлю графики. - person dkellner; 11.05.2021

1) Если вы используете (PHP 5> = 5.3.6), вы можете использовать SplFileInfo :: getExtension - получает расширение файла.

Пример кода

<?php

$info = new SplFileInfo('test.png');
var_dump($info->getExtension());

$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());

?>

Это выведет

string(3) "png"
string(2) "gz"

2) Другой способ получить расширение, если вы используете (PHP 4> = 4.0.3, PHP 5), - это pathinfo

Пример кода

<?php

$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);

$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);

?>

Это выведет

string(3) "png"
string(2) "gz"

// РЕДАКТИРОВАТЬ: удалили скобку

person Subodh Ghulaxe    schedule 02.08.2014

Иногда полезно не использовать pathinfo($path, PATHINFO_EXTENSION). Например:

$path = '/path/to/file.tar.gz';

echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz

Также обратите внимание, что pathinfo не может обрабатывать некоторые символы, отличные от ASCII (обычно он просто подавляет их из вывода). В расширениях это обычно не проблема, но знать об этом нюансе не помешает.

person Alix Axel    schedule 01.11.2012
comment
@ e-satis: Согласно Википедии, это два расширения: UNIX-подобный файловые системы используют другую модель без отдельных метаданных расширений. Точка - это просто еще один символ в главном имени файла, а имена файлов могут иметь несколько расширений, обычно представляющих вложенные преобразования, такие как files.tar.gz. - person Alix Axel; 02.11.2012
comment
А если в названии товара есть точка? Пример: test.19-02-2014.jpeg - person Mario Radomanana; 26.03.2014
comment
Это не удастся с /root/my.folder/my.css ltrim(strrchr($PATH, '.'),'.') работает как pathinfo, но без токенизации всего. - person Ray Foss; 09.09.2016

Самый простой способ получить расширение файла в PHP - использовать встроенную функцию PHP pathinfo .

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // The output should be the extension of the file e.g., png, gif, or html
person Shahbaz    schedule 13.05.2015

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

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

Совет: возвращает пустую строку, если файл не имеет расширения.

person pooya_sabramooz    schedule 12.02.2017

Извините ... "Короткий вопрос; но НЕ короткий ответ"

Пример 1 для PATH

$path = "/home/ali/public_html/wp-content/themes/chicken/css/base.min.css";
$name = pathinfo($path, PATHINFO_FILENAME);
$ext  = pathinfo($path, PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

Пример 2 для URL

$url = "//www.example.com/dir/file.bak.php?Something+is+wrong=hello";
$url = parse_url($url);
$name = pathinfo($url['path'], PATHINFO_FILENAME);
$ext  = pathinfo($url['path'], PATHINFO_EXTENSION);
printf('<hr> Name: %s <br> Extension: %s', $name, $ext);

Вывод примера 1:

Name: base.min
Extension: css

Результат примера 2:

Name: file.bak
Extension: php

использованная литература

  1. https://www.php.net/manual/en/function.pathinfo.php

  2. https://www.php.net/manual/en/function.realpath.php

  3. https://www.php.net/manual/en/function.parse-url.php

person Ali    schedule 20.07.2019

Вот пример. Предположим, что $ filename - "example.txt",

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

Таким образом, $ ext будет ".txt".

person G. I. Joe    schedule 25.02.2015

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";
person Arshid KV    schedule 03.06.2016

Быстрое исправление будет примерно таким.

// Exploding the file based on the . operator
$file_ext = explode('.', $filename);

// Count taken (if more than one . exist; files like abc.fff.2013.pdf
$file_ext_count = count($file_ext);

// Minus 1 to make the offset correct
$cnt = $file_ext_count - 1;

// The variable will have a value pdf as per the sample file name mentioned above.
$file_extension = $file_ext[$cnt];
person version 2    schedule 26.05.2015
comment
Почему бы просто не использовать встроенную функцию php для этой цели php.net/manual/en/ function.pathinfo.php вместо использования длинного кода - person Shahbaz; 01.07.2015
comment
Помимо точки зрения Шахбаза, вы также можете просто сделать $file_ext = end(explode('.', $filename));, чтобы сделать все в этом ответе одной строкой вместо четырех. - person tvanc; 07.01.2016
comment
@ Амелия А что, если у тебя есть .tar.gz. Это не сработает, поэтому, если вам нужно заполнить расширение, используйте, например, ltrim(strstr($filename, '.'), '.');, чтобы заполнить расширение, вместо этого некорректно как gz. - person Marin Sagovac; 21.05.2016

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

 pathinfo(basename($_FILES["fileToUpload"]["name"]), PATHINFO_EXTENSION)
person smile 22121    schedule 24.05.2016

Я обнаружил, что решения 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()
person Jonathan Ellis    schedule 20.01.2015

Используйте 1_. Это самый быстрый метод сравнения.

@ Курт Чжун уже ответил.

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

person Abbas    schedule 17.10.2016
comment
Неа. Это не самый быстрый способ, и вы немного удивитесь, если вызовете его с именем файла без расширения. - person dkellner; 07.08.2020

ltrim(strstr($file_url, '.'), '.')

это лучший способ, если у вас есть такие имена файлов, как name.name.name.ext (некрасиво, но иногда случается

person Anjani Barnwal    schedule 16.07.2019

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

$ext = pathinfo($filename, PATHINFO_EXTENSION);
person Deepika Patel    schedule 15.01.2015
comment
На этот вопрос Субодх ответил гораздо лучше еще в августе. - person Nisse Engström; 15.01.2015
comment
Это уже предлагалось еще в 2008 году. Отправляйте ответ только в том случае, если у вас есть что-то уникальное и ценное. Избыточный контент только тратит время исследователей и раздувает страницы Stack Overflow. - person mickmackusa; 28.06.2020

Вы можете получить все расширения файлов в определенной папке и выполнять операции с определенным расширением файла:

<?php
    $files = glob("abc/*.*"); // abc is the folder all files inside folder
    //print_r($files);
    //echo count($files);
    for($i=0; $i<count($files); $i++):
         $extension = pathinfo($files[$i], PATHINFO_EXTENSION);
         $ext[] = $extension;
         // Do operation for particular extension type
         if($extension=='html'){
             // Do operation
         }
    endfor;
    print_r($ext);
?>
person Samir Karmacharya    schedule 04.05.2016

$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);

preg_replace, мы используем поиск и замену регулярных выражений. В функции preg_replace первый параметр - это шаблон для поиска, второй параметр $ 1 - это ссылка на то, что соответствует первому (. *), А третий параметр - имя файла.

Другой способ, мы также можем использовать strrpos, чтобы найти позицию последнего вхождения символа «.» В имени файла и увеличить эту позицию на 1, чтобы она взорвала строку из (.)

$ext = substr($fileName, strrpos($fileName, '.') + 1);

person Sai Kiran Sangam    schedule 14.09.2019

IMO, это лучший способ, если у вас есть имена файлов, такие как name.name.name.ext (уродливо, но иногда бывает):

$ext     = explode('.', $filename); // Explode the string
$my_ext  = end($ext); // Get the last entry of the array

echo $my_ext;
person Tommy89    schedule 05.04.2019

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

ltrim(strrchr($PATH, '.'),'.');
person Ray Foss    schedule 09.09.2016

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

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

Собственно, я этого и искал.

<?php

$url = 'http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ';
$tmp = @parse_url($url)['path'];
$ext = pathinfo($tmp, PATHINFO_EXTENSION);

var_dump($ext);
person Fred    schedule 28.03.2019

Я попробовал одно простое решение, которое может помочь кому-то другому получить только имя файла из URL-адреса, имеющего параметры

<?php

$path = "URL will be here";
echo basename(parse_url($path)['path']);

?>

Спасибо

person Ashok Chandrapal    schedule 07.01.2021

Использовать

str_replace('.', '', strrchr($file_name, '.'))

для быстрого поиска расширения (если вы точно знаете, что у вашего файла оно есть).

person AlexB    schedule 28.11.2012

person    schedule
comment
Это не удастся с /root/my.folder/my.css - person Ray Foss; 09.09.2016
comment
Это должно работать правильно: substr ($ path, strrpos ($ path, '.') + 1); Примечание: этот метод работает быстрее, чем любые другие решения, указанные выше. Попробуйте выполнить тест, используя наш собственный скрипт. - person Abbas; 17.10.2016
comment
Это очень быстро, но есть серьезная проблема с файлами, у которых вообще нет расширения. В таких случаях будет удален первый символ. См. Мое решение выше (Ctrl + F и введите самурай); почти то же самое, с этой крошечной разницей. Так что да, метод действительно крутой и очень быстрый, но вы должны остерегаться крайних случаев. - person dkellner; 28.04.2021