1

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

Иногда требуется получить расширения файлов ( изображений, архивов, php, html, txt файлов и др.)

Этот код позволяет вывести список файлов директории определенного типа/расширения, в данном случае картинок.
В итоге будет отображен список изображений определенного типа 'gif', 'png', 'jpeg', 'jpeg'

<?php
  $dir_imgs = './img/';
  foreach (scandir($dir_imgs) as $file_img) 
  {
    $img_info = pathinfo($file_img);
    $img_types = array('gif', 'png', 'jpeg', 'jpeg');

    if (in_array($img_info['extension'], $img_types))
      echo $file_img.'</br>';
  }
?>

2

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

Получить расширение файла — не самая сложная задача. Но подходов к ее решению может быть несколько. Попробуем рассмотреть еще несколько возможных вариантов и понять принципы их работы.

Считаете, что вопрос пустяковый и все тут просто как 2 пальца? Может быть, только недавно мне встретилась занятная бредострочка с толстенным регулярным выражением и все для того, что бы просто получить несколько символов в конце строки после последней точки. Зачем? Итак, начнем с пяти наиболее распространенных способов. Без использования регулярных выражений (только не подумайте, что я считаю их злом). Писать буду как просто и доступно, это не научная статья, а авторская заметка.

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

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

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

3

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

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

 function getExtension2($filename) {
    $path_info = pathinfo($filename);
    return $path_info['extension'];
  }

4

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

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

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

5

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

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

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

6

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

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

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

7

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

Еще пару способов как получить расширение файла средствами PHP

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

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


function getExtension7($filename) {
     return preg_match('/\.(.*)$/U', $filename, $matches) ? $matches[1]: '';
}

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