получение расширения файла php

Получить расширение файла в PHP

В данной статье я расскажу очень простые способы, как можно получить расширение файла средствами PHP. Опишу все подробно. Для начала заносим название файла в переменную:
Далее нам поможет функция Explode с помощью которой разбиваем строку на подстроки.
В качестве разделителя используется символ точки (.), То есть символ разделения названия файла от его расширения.

Последнее что нужно, это взять последний элемент массива. В этом нам поможет функция End:
Вот и все, теперь в переменной $mime содержаться значение расширения файла.

В данном случае мы видим как результат работы функции Explode передается непосредственно как параметр в функцию End. Но функция End работает с указателем на массив, а не со значением массива.

Для решения необходимо сперва перенести значение в временную переменную, и только потом передаем в End указатель на эту переменную.
Собственно все ошибки подобного рода решаются именно таким образом. Если в вашей программе где-то стала вылетать вышеуказанная ошибка, то просто создавайте временную переменную.

Таким же способом можно получить расширения файла, но вместо функции End используется функция Array_pop:
Функция Array_pop удаляет элемент в конце массива, то есть не только возвращает последнее значение массива. На одну операцию выполняется более чем с функцией End, но разница настолько маленькая, что на это даже не стоит акцентировать внимание.

Выполнить поиск расширения можно используя вместе функцию Substr и функцию Strrpos:
Чтобы избавиться самой точки в полученном подстроке, увеличиваем начало старта на одно смещение вправо (1).

Существует также функция Pathinfo, с помощью которой можно получить расширение файла. По моему мнению, это лучший вариант. Для этого выполняем простой код:
Здесь описаны простые способы получения расширение файла, но помните, это только для ознакомления, или даже для демонстрации возможностей языка PHP. На самом деле, вам самим решать, каким образом использовать для различных случаев возможен особый подход.

Источник

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

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

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

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

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

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

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

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

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

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

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

Источник

filetype

(PHP 4, PHP 5, PHP 7, PHP 8)

filetype — Возвращает тип файла

Описание

Возвращает тип указанного файла.

Список параметров

Возвращаемые значения

Возвращает тип файла. Возможными значениями являются fifo, char, dir, block, link, file, socket и unknown.

Ошибки

Примеры

Пример #1 Пример использования функции filetype()

echo filetype ( ‘/etc/passwd’ ); // file
echo filetype ( ‘/etc/’ ); // dir

Примечания

Смотрите также

User Contributed Notes 6 notes

There are 7 values that can be returned. Here is a list of them and what each one means

block: block special device

char: character special device

fifo: FIFO (named pipe)

link: symbolic link

unknown: unknown file type

filetype() does not work for files >=2GB on x86 Linux. You can use stat as a workarround:

Note that stat returns diffenerent strings («regular file»,»directory». )

I use the CLI version of PHP on Windows Vista. Here’s how to determine if a file is marked «hidden» by NTFS:

This should work on any Windows OS that provides DOS shell commands.

Putting @ in front of the filetype() function does not prevent it from raising a warning (Lstat failed), if E_WARNING is enabled on your error_reporting.

The most common cause of filetype() raising this warning and not showing a filetype() in the output (it actually returns NULL) is, if you happened to pass just the ‘Dir or File Name’ and not the complete «Absolute or Relative Path» to that ‘file or Dir’. It may still read that file and return its filetype as «file» but for Dir’s it shows warning and outputs NULL.
eg:
$pathToFile = ‘/var/www’;
$file = ‘test.php’;
$dir = ‘somedir’;

Output for filetype($file) will be returned as ‘file’ and possibly without any warning, but for filetype($dir), it will return NULL with the warning «Lstat failed», unless you pass a complete path to that dir, i.e. filetype($pathToFile.’/’.$dir).

This happened to me and found this solution after a lot of trial and error. Thought, it might help someone.

Note there is a bug when using filetype with for example Japanese filenames :
https://bugs.php.net/bug.php?id=64699

The whole PHP interpreter comes crashing down without anyway to avoid it or capture an exception.

Источник

basename

(PHP 4, PHP 5, PHP 7, PHP 8)

basename — Возвращает последний компонент имени из указанного пути

Описание

При передаче строки с путём к файлу или каталогу, данная функция вернёт последний компонент имени из данного пути.

Список параметров

На платформах Windows в качестве разделителей имён директорий используются оба слеша (прямой / и обратный \ ). В других операционных системах разделителем служит прямой слеш ( / ).

Возвращаемые значения

Примеры

Пример #1 Пример использования функции basename()

Результат выполнения данного примера:

Смотрите также

User Contributed Notes 30 notes

It’s a shame, that for a 20 years of development we don’t have mb_basename() yet!

There is only one variant that works in my case for my Russian UTF-8 letters:

If your path has a query string appended, and if the query string contains a «/» character, then the suggestions for extracting the filename offered below don’t work.

In such a case, use:

It might be useful to have a version of the function basename working with arrays too.

Here is a quick way of fetching only the filename (without extension) regardless of what suffix the file has.

// your file
$file = ‘image.jpg’ ;

There is a real problem when using this function on *nix servers, since it does not handle Windows paths (using the \ as a separator). Why would this be an issue on *nix servers? What if you need to handle file uploads from MS IE? In fact, the manual section «Handling file uploads» uses basename() in an example, but this will NOT extract the file name from a Windows path such as C:\My Documents\My Name\filename.ext. After much frustrated coding, here is how I handled it (might not be the best, but it works):

If you want the current path where youre file is and not the full path then use this 🙂

www dir: domain.com/temp/2005/january/t1.php

Exmaple for exploding 😉 the filename to an array

A simple way to return the current directory:
$cur_dir = basename(dirname($_SERVER[PHP_SELF]))

since basename always treats a path as a path to a file, e.g.

/var/www/site/foo/ indicates /var/www/site as the path to file
foo

Even though yours is shorter, you can also do:

$ext = end(explode(«.», basename($file

Additional note to Anonymous’s mb_basename() solution: get rid of trailing slashes/backslashes!

echo mb_basename ( «/etc//» ); # «etc»
?>

I got a blank output from this code

suggested earlier by a friend here.

So anybody who wants to get the current directory path can use another technique that I use as

//suppose you’re using this in pageitself.php page

once you have extracted the basename from the full path and want to separate the extension from the file name, the following function will do it efficiently:

On windows systems, filenames are case-insensitive. If you have to make sure the right case is used when you port your application to an unix system, you may use a combination of the following:

//assume the real filename is mytest.JPG:

Because of filename() gets «file.php?var=foo», i use explode in addition to basename like here:

to get the base url of my website

Basename without query string:

Источник

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

Это вопрос, который вы можете прочитать везде в Интернете с различными ответами:

Однако всегда есть «лучший способ», и он должен быть в переполнении стека.

Решение

Люди из других языков сценариев всегда думают, что их лучше, потому что у них есть встроенная функция, а не PHP (я сейчас смотрю на Pythonistas :-)).

На самом деле, оно существует, но мало кто это знает. Встретить pathinfo() :

Это быстро и встроенно. pathinfo() может дать вам другую информацию, такую ​​как канонический путь, в зависимости от константы, которую вы передаете ей.

Помните, что если вы хотите иметь возможность работать с не ASCII-символами, вам нужно сначала установить локаль. НАПРИМЕР:

Кроме того, обратите внимание, что это не принимает во внимание содержимое файла или mime-тип, вы получаете только расширение. Но это то, что вы просили.

Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.

Другие решения

пример URL: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

Примечание: хештеги недоступны на стороне сервера, только если они добавлены вручную.

Часто вы можете написать лучший код, если вы передаете такой объект вместо строки, тогда ваш код будет более понятным. Начиная с PHP 5.4 это однострочный текст:

E-убедительный ответ является правильным способом определения расширения файла.

В качестве альтернативы, вместо того, чтобы полагаться на расширение файла, вы можете использовать fileinfo (http://us2.php.net/fileinfo ) определить файлы MIME типа.

Вот упрощенный пример обработки изображения, загруженного пользователем:

1) Если вы используете (PHP 5> = 5.3.6)
ты можешь использовать SplFileInfo :: getExtension — получает расширение файла

Это будет выводить

2) Другой способ получить расширение, если вы используете (PHP 4> = 4.0.3, PHP 5) является PathInfo

Это будет выводить

// РЕДАКТИРОВАТЬ: убрал скобку

Пока он не содержит путь, вы также можете использовать:

Также обратите внимание, что pathinfo не в состоянии обрабатывать некоторые не-ASCII символы (обычно это просто подавляет их из вывода), в расширениях, которые обычно не являются проблемой, но не мешает знать об этом предупреждении.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *