PHP 5.3.5 fileinfo () Тип MIME для файлов MS Office 2007 – обновления magic.mime?

При загрузке PHP я пытаюсь проверить тип MIME загружаемых файлов в соответствии с допустимым набором типов MIME для приложения. При попытке использовать fileinfo () для определения типа MIME для файла Office 2007 НЕ обнаруживается в качестве соответствующих MIME-типов. Вместо этого ответ типа MIME является «application / zip»

Офисный документ Типы MIME: http://filext.com/faq/office_mime_types.php

Пример кода PHP:

$ oFileInfo = new finfo (FILEINFO_MIME_TYPE);

$ sMimeType = $ oFileInfo -> file ($ _FILES ['Filedata'] ['tmp_name']);

echo $ sMimeType;

Информация о настройке сервера:

  • ОС: Windows Server 2003 32-разрядный
  • Веб-сервер: IIS 6.0
  • PHP: 5.3.5 (Thread Safe) с использованием FastCGI 1.5
  • Файл: magic.mime
    • Пример от darko на uvcms dot com 16-Apr-2008 09:35
      • Ссылка: php.net/manual/en/fileinfo.installation.php
    • Размер: 517 КБ
    • Источник: Source Forge: GNU32 – FileType gnuwin32.sourceforge.net/packages/filetype.htm

Я нашел множество сообщений, которые ссылаются на проблемы с новым форматом Office при загрузке с веб-сервера. Во всех этих примерах я нигде не нашел, что иллюстрирует усадьбу добавления новых типов MIME в существующий файл magic.mime или ссылку на файл magic.mime, который уже содержит типы MIME Microsoft Office 2007+. Спасибо за вашу помощь.

    Новые файлы Office – это ZIP-архивы. Вот почему база данных MIME Magic обнаруживает их как файлы ZIP. Возможно, вам нужно будет добавить специальные правила на основе расширения файла или посмотреть в ZIP-файл, чтобы узнать, есть ли у docProps папка docProps (в почтовых архивах Office есть такая папка, содержащая метаданные о документе).

    Существуют и другие форматы файлов, которые фактически представляют собой ZIP-архивы с другим расширением, например JAR-файлы.

    1. Да, вы должны обновить magic.mime.

    lol, да, просто обновите его, проблема решена. К сожалению, похоже, что системы типа «магия тим» работают независимо от фактического содержимого файла, а поскольку файл сжат, он не может распаковать (и посмотреть, какой файл?)

    кто-то предложил написать функцию для распаковки сжатых файлов, а затем, например, проверку наличия каталога «DocProps». Но это приведет к появлению другого вектора атаки на производственный сервер.

    Вы пытались добавить новые типы mime в IIS?

    1. Перейдите в оснастку «Управление Интернетом»
    2. Щелкните правой кнопкой мыши «Веб-сайты» и выберите «Свойства»
    3. Выберите «Заголовки HTTP»
    4. Выберите «Mime Types»
    5. Введите новое расширение без начального периода и соответствующий тип mime. Повторите по мере необходимости для каждого расширения.
    6. Нажмите «ОК», чтобы закрыть все диалоги
    1. Да, вы должны обновить magic.mime .
    2. Thumb up для не $_FILES['Filedata']['type'] mime-типа, отправленного из браузера ( $_FILES['Filedata']['type'] )
    3. Почему вы используете функцию, в которой говорится, что она устарела? http://php.net/manual/en/function.mime-content-type.php

    Примечание: finfo () определяет тип MIME файла по его магическим байтам; учитывая, что файлы Office 2007 (и многие другие форматы файлов, например, ePUB) – это просто пакеты zip с указанной структурой каталогов, разумно иметь finfo() для возврата application/zip .

    Я бы предложил распаковать или перечислить содержимое, чтобы проверить его структуру, если вы действительно хотите определить тип файла на основе его содержимого (а не отчеты браузера MIME-типа при загрузке)