Статьи Программирование в PHP

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

Задача определения расширения возникает в разработке достаточно часто – здесь и загрузка файлов на сервер, и анализ имеющихся файлов, и поиск файла. В работе с файлами на сервере, есть так же частое решение сохранения файла не с исходным именем, а назначение в качестве имени файла текущего значения TIMESTAMP сервера. Решений у этой задачи существует немало для разных языков программирования. Хотя некоторые решения, в первую очередь, приходящие на ум, иногда приходится дорабатывать из-за того разнообразия имен файлов которые только могут быть. Для файла с именем "myfile.txt" можно смело предложить разбить строку на части разделенные точкой и взять последнюю. Но что делать с файлами "my.file.txt" или в случае, если расширение не указано "myfile"?

В этой статье, рассмотрим такие решения.

Для удобства имя файл зададим в строковой переменной:


$filename = 'myfile.txt';

// другие варианты имени файла
$filename = 'file'; // не указано расширение
$filename = 'my.file.txt'; // точка в имени файла
$filename = 'dir/myfile.txt'; // имя файла с указанием директории
?>

Самое простое и удобное, на мой взгляд, решение использовать функцию pathinfo(), которая вернет ассоциированный массив, содержащий сведения полном имени, расширении и директории файла. После этого остается только вывести необходимый элемент массива.


function get_file_extension($filename) {
$file_info = pathinfo($filename);
return $file_info['extension'];
}

echo get_file_extension($filename);
?>

Чтобы не делать собственную функцию можно упросить код, указав в качестве второго параметра значение PATHINFO_EXTENSION. В этом случае функция вернет не весь массив, а только значение расширения.


echo pathinfo($filename, PATHINFO_EXTENSION);
?>

Оба варианта корректно вернут значение расширения "txt", кроме случая, где расширение не указано. Там, где расширения нет, будет возвращена пустая строка.

Это решение доступно для PHP, начиная с версии 4.0.3.


Если по причине версии PHP или какой-либо другой причине это решение не доступно, можно использовать традиционное решение – разбивку строки имени файла на части между точками, считая, что последний участок и будет расширением.


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

echo get_file_extension($filename);
?>

Здесь, функция explode() разбивает строку на массив из символов, разделенных точками, а функция end() возвращает последний элемент полученного массива.

В этом примере, если расширение не задано явно, т.е. точки в имени файла нет, будет возвращено исходное имя файла. В случае, если расширение есть, оно будет получено корректно.


Комментарии

Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Разность чисел шeсть минyс oдин? (цифра)