Определение MIME файла

tche

Новичок
Определение MIME файла

Есть проблема определения типа файла. Но не загруженного, тут все ясно, а уже лежащего на сервере. Реальная задача - конвертировать файлы пользователей в PDF, если файлы загружаются по одному, тогда $_FILE["type"], но часто бывает, что пользователь загружает zip с кучей файлов внутри, все эти файлы надо распаковать и конвертнуть, а для конвертации разных типов используются разные методы, то есть разные скрипты, для запуска которых надо знать тип файла. Есть ли какой-либо нормальный способ? Я так понял, что прямых функций в ПХП нет, на расширение ориентироваться тупо.

У меня даже возникла бредовая идея подвесить еще один виртуальный сайт, доступный только с самого себя, внести в его веб-пространство каталог с нужными файлами и скачивать его с самого себя, но с уже всеми необходимыми данными.

Буду признателен за советы!
Если инфа уже есть в факе, тогда прошу прощения, я слеп!!!

Ч.
 

tony2001

TeaM PHPClub
>Я так понял, что прямых функций в ПХП нет
и как они должны выглядеть, эти загадочные "прямые функции" и что должны делать?
когда файлы приходят на сервер - тип, который шлет браузер, на самом деле берется в зависимости от расширения ("на расширение ориентироваться тупо."(с)).
 

tche

Новичок
Мдаа, тогда можно вообще забить на mime и ориентирваться ТОЛЬКО на расширение.

Хотя я тут поигрался с doc файлом, меняя ему расширение и аплоадя на сервер, смотрел, что он выдает. Так вот подставить ему .txt и .html не удается, он пишет что это octet-stream, то же самое, если подставить .zip или .tgz.

Если загнать реальный архив, то он пишет application/x-zip-compressed.

Так что в целом он (кстати кто, броузер?) все-таки смотрит немного внутрь файла.

Но если подставить .xml, .xls, то радостно пишет, что это XML или excel файл.

Это в целом обидно, но тогда оно и проще. Неправильно потльзователь назвал файл - сам дурак.

Ч.
 

woland

Guest
Хм... pjpeg и gif нормально определяет... Не по расширению...
 

Андрей М.

Guest
на расширение смотрит только ИЕ. Все остальные браузеры смотрят (и должны !) на контент-тайп. Если Мозилле например отдать заголовок text/plain и файл *.mpeg то она послушно выдаст пару мегабайт крякозябров:)

По сабжу, по идее в юниксе должно что-то такое сработать:
$mimetype=`file -i -f test.txt`, но я не проверял.
 

Андрей М.

Guest
tony2001, понял, извиняюсь. Тогда остается второй пункт.
 

woland

Guest
Demiurg, $_FILES["file"]["type"]
Вернее - не определяет, а содержит mime-тип загруженного имиджа независимо от расширения загруженного файла.
Не знаю - как с остальными типами, но имиджи определяет безошибочно.
 

Demiurg

Guest
woland, читай внимательно вопрос перед тем, как отвечать
 

woland

Guest
Demiurg, читай _внимательно_ треды и улавливай - где ответы на вопрос, а где - комментарии к вышесказанному.
 

tche

Новичок
УРАА!!! Сработало. Спасибо Андрею М. Я про команду file знал, но не придавал ей значение. Это то что надо, она на расширение совсем не смотрит, вот например (1.zip на самом деле вордовский файл):

tche@www ~$ file -i 1.zip
file: Using regular magic file `/usr/share/magic.mime'
1.zip: application/msword

tche@www ~/docs$ file -i bucharest_abstr.doc
file: Using regular magic file `/usr/share/magic.mime'
bucharest_abstr.doc: application/msword

tche@www ~/docs$ file -i ABCD
file: Using regular magic file `/usr/share/magic.mime'
ABCD: application/msword

tche@www ~/docs$ file -i Cv_rtf.rtf
file: Using regular magic file `/usr/share/magic.mime'
Cv_rtf.rtf: text/rtf

tche@www ~/docs$ file -i koap.zip
file: Using regular magic file `/usr/share/magic.mime'
koap.zip: application/x-zip

Спасибо!!!
Ч.
 

tche

Новичок
Автор оригинала: tony2001
Андрей, речь идет об UPлоаде, а не о DOWNлоаде.
при аплоаде временный файл вообще не имеет расширения (или там что-то ТМП), а командой file можно определить его тип.
 

tche

Новичок
Автор оригинала: tony2001
>Я так понял, что прямых функций в ПХП нет
и как они должны выглядеть, эти загадочные "прямые функции" и что должны делать?
Ну вот теперь ясно, что они должны делать. А точно такой функции нет, тогда наверное надо свою написать, она будет весьма короткой :)))))

Всем спасибо за обсуждение,
Ч.
 
Сверху