Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Определить тип файла


Автор: wind1 20.8.2009, 07:23
Подскажите, пожалуйста, как определить тип файла, сохраненного на сервере?
Я пробовал использовать функцию mime_content_type(), но она почему-то все время возвращает false.
Может, есть другие способы?

Автор: nerezus 20.8.2009, 08:37
wind1, как прравило тип первоначально по разширению узнают. И только потом уточняют другими способами.

Автор: MoLeX 20.8.2009, 08:48
wind1, 
Код

function type_files( $file )
{
    $ext = array_pop(explode('.', $file));
    foreach( file("S:\usr\local\apache\conf\mime.types" ) as $line)
    {
        if( preg_match('/^([^#]\S+)\s+.*'.$ext.'.*$/', $line, $m))
        return $m[1];
    }
    
     return 'application/octet-stream';
}

echo type_files('aimp_relax.jpg');    



Цитата(wind1 @  20.8.2009,  07:23 Найти цитируемый пост)
Я пробовал использовать функцию mime_content_type(), но она почему-то все время возвращает false.

вроде PECL нужен

Добавлено через 58 секунд
Цитата(nerezus @  20.8.2009,  08:37 Найти цитируемый пост)
как прравило тип первоначально по разширению узнают.

да, а ты веришь всему что от пользователя приходит?!)))

Добавлено через 1 минуту и 15 секунд
можно же и .doc за .pdf выдать

Автор: wind1 20.8.2009, 08:52
nerezus,
Допустим, у меня даже есть разрешение файла. Как теперь получить тип вида "тип/подтип" (например, "image/gif")?

MoLeX,
Именно так у меня сейчас пока что и работает это определение. Но это плохой вариант, т.к. есть привязка к определенному каталогу. А надо, чтобы работало в любом случае, где бы ни был установлен apache.

Автор: MoLeX 20.8.2009, 09:02
wind1, таскай с собой файл mime.types

Добавлено через 1 минуту и 16 секунд
wind1, вот есть готовая база типов
Код

$mimes = array(    'hqx'    =>    'application/mac-binhex40',
                'cpt'    =>    'application/mac-compactpro',
                'csv'    =>    array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
                'bin'    =>    'application/macbinary',
                'dms'    =>    'application/octet-stream',
                'lha'    =>    'application/octet-stream',
                'lzh'    =>    'application/octet-stream',
                'exe'    =>    'application/octet-stream',
                'class'    =>    'application/octet-stream',
                'psd'    =>    'application/x-photoshop',
                'so'    =>    'application/octet-stream',
                'sea'    =>    'application/octet-stream',
                'dll'    =>    'application/octet-stream',
                'oda'    =>    'application/oda',
                'pdf'    =>    array('application/pdf', 'application/x-download'),
                'ai'    =>    'application/postscript',
                'eps'    =>    'application/postscript',
                'ps'    =>    'application/postscript',
                'smi'    =>    'application/smil',
                'smil'    =>    'application/smil',
                'mif'    =>    'application/vnd.mif',
                'xls'    =>    array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
                'ppt'    =>    array('application/powerpoint', 'application/vnd.ms-powerpoint'),
                'wbxml'    =>    'application/wbxml',
                'wmlc'    =>    'application/wmlc',
                'dcr'    =>    'application/x-director',
                'dir'    =>    'application/x-director',
                'dxr'    =>    'application/x-director',
                'dvi'    =>    'application/x-dvi',
                'gtar'    =>    'application/x-gtar',
                'gz'    =>    'application/x-gzip',
                'php'    =>    'application/x-httpd-php',
                'php4'    =>    'application/x-httpd-php',
                'php3'    =>    'application/x-httpd-php',
                'phtml'    =>    'application/x-httpd-php',
                'phps'    =>    'application/x-httpd-php-source',
                'js'    =>    'application/x-javascript',
                'swf'    =>    'application/x-shockwave-flash',
                'sit'    =>    'application/x-stuffit',
                'tar'    =>    'application/x-tar',
                'tgz'    =>    'application/x-tar',
                'xhtml'    =>    'application/xhtml+xml',
                'xht'    =>    'application/xhtml+xml',
                'zip'    =>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
                'mid'    =>    'audio/midi',
                'midi'    =>    'audio/midi',
                'mpga'    =>    'audio/mpeg',
                'mp2'    =>    'audio/mpeg',
                'mp3'    =>    array('audio/mpeg', 'audio/mpg'),
                'aif'    =>    'audio/x-aiff',
                'aiff'    =>    'audio/x-aiff',
                'aifc'    =>    'audio/x-aiff',
                'ram'    =>    'audio/x-pn-realaudio',
                'rm'    =>    'audio/x-pn-realaudio',
                'rpm'    =>    'audio/x-pn-realaudio-plugin',
                'ra'    =>    'audio/x-realaudio',
                'rv'    =>    'video/vnd.rn-realvideo',
                'wav'    =>    'audio/x-wav',
                'bmp'    =>    'image/bmp',
                'gif'    =>    'image/gif',
                'jpeg'    =>    array('image/jpeg', 'image/pjpeg'),
                'jpg'    =>    array('image/jpeg', 'image/pjpeg'),
                'jpe'    =>    array('image/jpeg', 'image/pjpeg'),
                'png'    =>    array('image/png',  'image/x-png'),
                'tiff'    =>    'image/tiff',
                'tif'    =>    'image/tiff',
                'css'    =>    'text/css',
                'html'    =>    'text/html',
                'htm'    =>    'text/html',
                'shtml'    =>    'text/html',
                'txt'    =>    'text/plain',
                'text'    =>    'text/plain',
                'log'    =>    array('text/plain', 'text/x-log'),
                'rtx'    =>    'text/richtext',
                'rtf'    =>    'text/rtf',
                'xml'    =>    'text/xml',
                'xsl'    =>    'text/xml',
                'mpeg'    =>    'video/mpeg',
                'mpg'    =>    'video/mpeg',
                'mpe'    =>    'video/mpeg',
                'qt'    =>    'video/quicktime',
                'mov'    =>    'video/quicktime',
                'avi'    =>    'video/x-msvideo',
                'movie'    =>    'video/x-sgi-movie',
                'doc'    =>    'application/msword',
                'docx'    =>    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'xlsx'    =>    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                'word'    =>    array('application/msword', 'application/octet-stream'),
                'xl'    =>    'application/excel',
                'eml'    =>    'message/rfc822'
            );

Автор: wind1 20.8.2009, 09:06
MoLeX,
Так не пойдет.
А есть ли какая-нибудь функция в php, которая бы возвратила путь к каталогу, где лежит файл mime.types (или хотябы к каталогу, где установлен apache)?

Автор: MoLeX 20.8.2009, 09:13
wind1, тебе нужно определить тип файла который уже лежит на сервере или же который через форму закачал пользователь? 

Автор: wind1 20.8.2009, 09:16
Который УЖЕ лежит на сервере. Если через форму, то там и определять нечего.

Автор: MoLeX 20.8.2009, 09:16
ставь библиотеку PECL
Цитата

для работы mime_content_type() необходима установка из библиотеки PECL.


и пользуйся прелестями ф-ци mime_content_type()

Добавлено через 55 секунд
http://www.google.ru/search?hl=ru&q=PECL&btnG=Google+Search&aq=f&oq=

Автор: wind1 20.8.2009, 09:19
А какое именно расширение нужно для функции mime_content_type()?

Автор: nerezus 20.8.2009, 09:20
Цитата

можно же и .doc за .pdf выдать
 И что? Если pdf-либа не определит как PDF - значит не pdf. В чем проблема то?
Но это оффтоп уже.

Автор: Ипатьев 20.8.2009, 09:27
Очень желательно в вопросе явно писать, что нужен именно mime тип. 
А то совершенно неясно, какой тип нужен автору.
И что делать с файлами, для которых mime не найдется.

Автор: icewind 20.8.2009, 10:26
MoLeX, пардон, а ваша функция type_files не в соответствии с расширением файла тип возвращает? И если я закачаю картинку jpg c названием document.pdf она вернет мне image/jpeg? Или все-таки application/pdf?

Автор: MoLeX 20.8.2009, 10:57
блин, даже и не протестировал её...

Цитата(icewind @  20.8.2009,  10:26 Найти цитируемый пост)
а ваша функция type_files

поправочка: это не моя ф-ция

Автор: MoLeX 20.8.2009, 11:28
похоже тока два способа:
1. mime_content_type()
2. открывать файл и анализировать

Автор: nerezus 20.8.2009, 11:33
Считаю способ определения по расширению единственным универсально-верным.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)