PHP 5.3.5 fileinfo () Тип MIME для файлов MS Office 2007 - обновления magic.mime? - PullRequest
4 голосов
/ 26 января 2011

При загрузке 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+. Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 27 мая 2011
  1. Да, вы должны обновить magic.mime.

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

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

1 голос
/ 26 января 2011

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

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

0 голосов
/ 26 января 2011

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

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

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

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

...