Вы здесь

Получение расширения файла средствами PHP

Хозяйке на заметку... 7 способов определения расширения у файла. (украл здесь)

Способ первый:

  1. function getExtension1($filename) {
  2. return end(explode(".", $filename));
  3. }

Логика такова: используя функцию explode(), полученная строка преобразуется в массив строк, границами которых в оригинале был разделитесь «точка». И все бы хорошо, если речь идет об имени файла в стиле «file.txt», но как быть если точек несколько? Для этого end() возвращает последний элемент массива, т.е. то, что было после последней точки.

Способ второй:

  1. function getExtension2($filename) {
  2. $path_info = pathinfo($filename);
  3. return $path_info['extension'];
  4. }

Здесь на помощь приходит функция pathinfo(), которая возвращает ассоциативный массив, содержащий информацию о нужном нам файле. И если ваша задача узнать не только расширение файла, а так же полный путь к нему и полное имя файла, то этот способ для вас: массив, возвращаемый данной функцией, содержит элементы dirname, basename и extension — в них вся нужная информация.

или, что почти тоже самое:
  1. <php>
  2. function getExtension2_($filename) {
  3. return pathinfo($filename, PATHINFO_EXTENSION);
  4. }

Способ третий:

  1. function getExtension3($filename) {
  2. return substr($filename, strrpos($filename, '.') + 1);
  3. }

В данном случае strrpos() возвращает позицию последней точки в строке, а substr() вырезает все символы, начиная с полученной ранее позиции точки, до конца строки. Что бы избавится от самой точки в полученной подстроке, мы увеличивает начало старта на одно смещение вправо (+1).

Способ четвертый:

  1. function getExtension4($filename) {
  2. return substr(strrchr($filename, '.'), 1);
  3. }

Работает следующим образом: strrchr() возвращает участок строки, следующий за указанным параметром (точкой в нашем случае), после чего substr() отрезает первый символ — точку.

Способ пятый:

  1. function getExtension5($filename) {
  2. return array_pop(explode(".", $filename));
  3. }

Данный способ очень похож на первый. array_pop() — выталкивает элемент в конце массива, end() — устанавливает внутренний указатель массива на последний элемент.

Способ шестой

  1. function getExtension6($filename) {
  2. return preg_replace('/^.*\.(.*)$/U', '$1', $filename);
  3. }

Функция preg_replace() найдет совпадения в строке по шаблону и выполнит замену на указанный в круглых скобкаха параметр, вернув замененные данные, т.е. как раз сам расширение файла.

Способ седьмой
  1. function getExtension7($filename) {
  2. return preg_match('/\.(.*)$/U', $filename, $matches) ? $matches[1]: '';
  3. }

Функция preg_match() ищет совпадение в строке $filename по шаблону, сохраняя его в массив $matches. Если совпадение найдено, то функция preg_match() вернет true и будет выполнена ветка условия return $mathes[1]. В противном случае результатом getExtension7() будет пустая строка.

А теперь небольшое тестирование для разных случаев $filename

getExtension1 getExtension2 getExtension2_ getExtension3 getExtension4 getExtension5 getExtension6 getExtension7
'file' 'file' '' PHP Notice: Undefined index: extension '' ile '' 'file' 'file' ''
'file.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension'
'file.with_other_point.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'with_other_point.extension' 'with_other_point.extension'
'.only_extension' 'only_extension' 'only_extension' 'only_extension' 'only_extension' 'only_extension' 'only_extension' 'only_extension' 'only_extension'
'filname-1.0.0.rev1.0.1' '1' '1' '1' '1' '1' '1' '0.0.rev1.0.1' '0.0.rev1.0.1'
'/path/file' '/path/file' '' PHP Notice: Undefined index: extension '' 'path/file' '' '/path/file' '/path/file' ''
'/path/file.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension'
'/path/with_other_point.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension'
'/path/.onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension'
'/path/filname-1.0.0.rev1.0.1' '1' '1' '1' '1' '1' '1' '0.0.rev1.0.1' '0.0.rev1.0.1'
'/path.dir/file.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'dir/file.extension' 'dir/file.extension'
'/path.dir/with_other_point.extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'extension' 'dir/with_other_point.extension' 'dir/with_other_point.extension'
'/path.dir/.onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'onlyextension' 'dir/.onlyextension' 'dir/.onlyextension'
'/path.dir/filname-1.0.0.rev1.0.1' '1' '1' '1' '1' '1' '1' 'dir/filname-1.0.0.rev1.0.1' 'dir/filname-1.0.0.rev1.0.1'