Я не чужой тип мим, но это странно. Как правило, текстовый файл считался бы текстовым / равным мим, но теперь, после реализации fileinfo, этот тип файла теперь считается «text / x-pascal». Я немного обеспокоен, потому что мне нужно быть уверенным, что я установил правильные типы mime, прежде чем разрешать пользователям загружать их.
Есть ли чит-лист, который даст мне все «общие» мимы, поскольку они интерпретируются файловым файлом?
Синан предоставил ссылку, в которой перечислены все более распространенные мимы. Если вы посмотрите на этот список, вы увидите, что .txt-файл имеет текстовый / обычный мим, но в моем случае текстовый файл с простой jane интерпретируется как text / pascal.
fileinfo
– это «лучшее предположение». Он анализирует только часть файла, чтобы попытаться выяснить, какой тип файла, и как таковой его можно легко обмануть. Возможно, ваш файл начинается с комментария Pascal или ключевого слова, такого как Project
или Unit
.
Fileinfo не использует расширение файла, чтобы определить, какой тип mime он есть, но ( цитирование ) :
Функции в этом модуле пытаются угадать тип содержимого и кодировку файла путем поиска определенных последовательностей магического байта в определенных положениях файла.
Идея состоит в том, что имя à файла и его расширение предоставляются пользователями (особенно в таком случае, как ваш, где файлы загружаются пользователями) и, как таковые, являются менее «уверенными», чем содержимое самого файла.
Может быть, решение может состоять в том, чтобы не проверять весь тип mime, возвращаемый fileinfo, но использовать только первую его часть – по крайней мере, в некоторых случаях?
Например, возможно, вы могли бы принять все mimetype, которые находятся в семействах text/*
и image/*
, и отказаться от того, чтобы все они выглядели как application/*
, за исключением application/pdf
?
(Только пример – но вы видите точку)
Я обнаружил, что по крайней мере в версии 5.03 команда « файл » может в некоторых случаях неверно идентифицировать простой текстовый файл как исходный файл Pascal, просто потому, что содержит слово «программа» или «запись». По крайней мере, так выглядит, посмотрев источник (src / names.h). Я считаю, что команда php fileinfo использует тот же «волшебный» движок, поэтому я подозреваю, что это является причиной проблемы. Если / когда я принят в список рассылки файлов, я уведомит об этом разработчиков.
[ОБНОВЛЕНИЕ] Я задал вопрос, но не получил ответа. Изучив этот вопрос несколько более подробно, выясняется, что определение текстовых форматов, в общем, действительно сложно . Если вы получите «текст / *» MIME-тип обратно из файла, вам может потребоваться игнорировать результат и предположить, что ресурс является просто «text / plain», если только ложные негативы (text / html, возможно, не будут) могут вызвать трудности.
Существует диаграмма, которая показывает список общих типов MIME и их соответствующих расширений. Вот