Вы здесь
Получение расширения файла средствами PHP |
Способ первый:
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 — в них вся нужная информация.
или, что почти тоже самое:
<php> function getExtension2_($filename) { return pathinfo($filename, PATHINFO_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() — устанавливает внутренний указатель массива на последний элемент.
Способ шестой
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() будет пустая строка.
А теперь небольшое тестирование для разных случаев $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' |