Php вывести тип файла

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

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

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

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

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

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

 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», кроме случая, где расширение не указано. Там, где расширения нет, будет возвращена пустая строка.

Читайте также:  Java jackson json annotations

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

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

 function get_file_extension($filename) < return end(explode(".", $filename)); >echo get_file_extension($filename); ?>

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

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

Источник

filetype

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

Возвращает FALSE в случае ошибки. filetype() также вызовет ошибку уровня E_NOTICE , если системный вызов stat завершится ошибкой или тип файла неизвестен.

Примеры

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

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

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примечания

Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в Поддерживаемые протоколы и обработчики (wrappers).

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

  • is_dir() — Определяет, является ли имя файла директорией
  • is_file() — Определяет, является ли файл обычным файлом
  • is_link() — Определяет, является ли файл символической ссылкой
  • file_exists() — Проверяет наличие указанного файла или каталога
  • mime_content_type() — Определяет MIME-тип содержимого файла (устаревшее)
  • pathinfo() — Возвращает информацию о пути к файлу
  • stat() — Возвращает информацию о файле

Источник

filetype

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

Возвращает false в случае возникновения ошибки. filetype() также вызовет ошибку уровня E_NOTICE , если системный вызов stat завершится ошибкой или тип файла неизвестен.

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примеры

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

echo filetype ( ‘/etc/passwd’ );
echo «\n» ;
echo filetype ( ‘/etc/’ );
?>

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

Примечания

Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обёртками url. Список обёрток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обёртки.

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

  • is_dir() — Определяет, является ли имя файла директорией
  • is_file() — Определяет, является ли файл обычным файлом
  • is_link() — Определяет, является ли файл символической ссылкой
  • file_exists() — Проверяет существование указанного файла или каталога
  • mime_content_type() — Определяет MIME-тип содержимого файла
  • pathinfo() — Возвращает информацию о пути к файлу
  • stat() — Возвращает информацию о файле

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

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:

function is_hidden_file ( $fn )

$attr = trim ( exec ( ‘FOR %A IN («‘ . $fn . ‘») DO @ECHO %~aA’ ));

if( $attr [ 3 ] === ‘h’ )
return true ;

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.

echo «Zum testen müssen tatsächlich existente Namen verwendet werden.
» ;
echo «Pfad und Dateiname müssen getrennt eingetragen und durch einen Punkt verbunden sein.
» ;
echo «Example: [filetype(\»../dir/u_dir/\».\»temp.jpg\»)] liefert -> file
» ;
?>

Источник

pathinfo

pathinfo() returns information about path : either an associative array or a string, depending on flags .

Note:

For information on retrieving the current path info, read the section on predefined reserved variables.

Note:

pathinfo() operates naively on the input string, and is not aware of the actual filesystem, or path components such as » .. «.

Note:

On Windows systems only, the \ character will be interpreted as a directory separator. On other systems it will be treated like any other character.

pathinfo() is locale aware, so for it to parse a path containing multibyte characters correctly, the matching locale must be set using the setlocale() function.

Parameters

If present, specifies a specific element to be returned; one of PATHINFO_DIRNAME , PATHINFO_BASENAME , PATHINFO_EXTENSION or PATHINFO_FILENAME .

If flags is not specified, returns all available elements.

Return Values

If the flags parameter is not passed, an associative array containing the following elements is returned: dirname , basename , extension (if any), and filename .

Note:

If the path has more than one extension, PATHINFO_EXTENSION returns only the last one and PATHINFO_FILENAME only strips the last one. (see first example below).

Note:

If the path does not have an extension, no extension element will be returned (see second example below).

Note:

If the basename of the path starts with a dot, the following characters are interpreted as extension , and the filename is empty (see third example below).

If flags is present, returns a string containing the requested element.

Examples

Example #1 pathinfo() Example

$path_parts = pathinfo ( ‘/www/htdocs/inc/lib.inc.php’ );

echo $path_parts [ ‘dirname’ ], «\n» ;
echo $path_parts [ ‘basename’ ], «\n» ;
echo $path_parts [ ‘extension’ ], «\n» ;
echo $path_parts [ ‘filename’ ], «\n» ;
?>

The above example will output:

/www/htdocs/inc lib.inc.php php lib.inc

Example #2 pathinfo() example showing difference between null and no extension

$path_parts = pathinfo ( ‘/path/emptyextension.’ );
var_dump ( $path_parts [ ‘extension’ ]);

$path_parts = pathinfo ( ‘/path/noextension’ );
var_dump ( $path_parts [ ‘extension’ ]);
?>

The above example will output something similar to:

string(0) "" Notice: Undefined index: extension in test.php on line 6 NULL

Example #3 pathinfo() example for a dot-file

The above example will output something similar to:

Array ( [dirname] => /some/path [basename] => .test [extension] => test [filename] => )

Example #4 pathinfo() example with array dereferencing

The flags parameter is not a bitmask. Only a single value may be provided. To select only a limited set of parsed values, use array destructuring like so:

[ ‘basename’ => $basename , ‘dirname’ => $dirname ] = pathinfo ( ‘/www/htdocs/inc/lib.inc.php’ );

var_dump ( $basename , $dirname );
?>

The above example will output something similar to:

string(11) "lib.inc.php" string(15) "/www/htdocs/inc"

See Also

  • dirname() — Returns a parent directory’s path
  • basename() — Returns trailing name component of path
  • parse_url() — Parse a URL and return its components
  • realpath() — Returns canonicalized absolute pathname

Источник

Оцените статью