Отделение расширение файла средствами PHP

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

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

  1.   getExtension1 ($) {
  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 (), которая возвращает ассоциативный массив, содержащий информацию о нужном нам файле. И если ваша задача узнать не только расширение файла, а так же полный путь к нему и полное имя файла, то этот способ для вас: массив, возвращаемый данной функцией, содержит элементы dirnamebasename и extension— в них вся нужная информация.

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

  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 _pop (explode («.», $filename));
  3.   }

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

Что работает быстрее? Да, в прочем, на практике результаты выполнения и всех способов примерно одинаковые. Для подтверждения своих догадок провел небольшой тест, прогнав в цикле каждый из вариантов по 50000 раз:
Способ #1: 0.6777439 сек.
Способ #2: 0.5664740 сек.
Способ #3: 0.6604638 сек.
Способ #4: 0.4782789 сек.
Способ #5: 0.6564250 сек.

Какой использовать? Решать вам.

Запись навигация

Top