Проверка загруженного файла - PullRequest
2 голосов
/ 19 ноября 2009

Я работаю над документом, который требует от пользователя загрузки документов Microsoft Word.

Помимо проверки расширения файла на .doc или .docx, есть ли другой способ проверить, что загруженный файл действительно является документом Microsoft Word, а не любым другим файлом, переименованным в расширение .doc или .docx.

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 19 ноября 2009

Если вы не используете PHP 5.3, функция mime_content_type может вас заинтересовать.

Если вы используете PHP 5.3 и / или можете установить расширения PECL, новая библиотека Fileinfo должна выполнить эту работу; см. finfo_file для получения дополнительной информации.
В данном примере одним из идентифицированных типов пантомимы является "application/vnd.ms-excel"; поэтому, если повезет, он сможет работать и с файлами MS Word; -)

5 голосов
/ 19 ноября 2009

.docx - это набор файлов XML, сжатых с использованием стандартной схемы сжатия zip. Таким образом, вы можете попробовать передать его алгоритму распаковки и посмотреть, распаковывается ли он, а затем попытаться просмотреть нужный XML-файл внутри и проверить поля, которые можно найти в документе.

3 голосов
/ 19 ноября 2009

Для файлов Microsoft .doc вы можете проверить первые несколько байтов файла на магическое число:

D0 CF 11 E0 A1 B1 1A E1

и «подзаголовки» со смещением байтов512.

3 голосов
/ 19 ноября 2009

Вы можете попробовать:

$type = `file -bi $UploadedFilePath`;

Это запустит программу linux file, которая изучит содержимое файла и определит тип файла.

Он работает со многими типами файлов (и мы используем это в рабочем коде для обнаружения загруженных файлов), хотя не уверен в версиях документов Microsoft Word.

...