2009-11-18 3 views
2

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

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

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

ответ

6

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

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

5

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

3

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

$type = `file -bi $UploadedFilePath`; 

Что бы запустить Линукс file программу, которая будет выглядеть в содержание файлов и определить, какой тип файла он.

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

3

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

D0 CF 11 E0 A1 B1 1A E1

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