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

Дата: 25 декабря /

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

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


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

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

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

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

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

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

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

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

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

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

Способ пятый

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

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

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

Взято отсюда — http://habrahabr.ru/post/37753/

Статьи по теме:

  1. div с высотой 100% средствами css
  2. Php, как удалить пустые элементы в массиве?
  3. Php, как рекурсивно изменить права на папки и файлы?
  4. WordPress, как получить первую картинку из поста?
  5. Как в PHP отсортировать многомерный массив как таблицу?

Метки:

Рубрика: PHP

Оставить комментарий