2013-04-27 2 views
4

Мне нужно определить, что тип загруженного файлаОпределить Excel файл мим тип

При загрузке .xlsx файла, этот код:

echo $_FILES['uploaded_file']['type']."<br>"; 
echo mime_content_type($_FILES['uploaded_file']['tmp_name']); 

возвращается:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
application/vnd.ms-excel 

Как я знаю (из здесь PHP xls, xlsx, ppt, pptx headers), application/vnd.ms-excel не .xlsx, но .xls файл mime type.

Итак, почему возвращает mime_content_type() функция application/vnd.ms-excel для .xlsx файл? где правда?

ответ

3

mime_content_type() не особо точен, и он устарел в пользу Fileinfo()'s mime_content_type; хотя лично я открываю файл и тест явно для определенных элементов данных в файлах, которые не могут быть включены как часть mime_magic подписи детали

+0

Большое спасибо, '@Rikesh, tucuxi' спасибо тоже – RIKI

1

Как вы можете видеть предупреждение о mime_content_type функцией странице это устаревшее Теперь & его заменена на finfo функция.

$finfo = new finfo(); 
$fileinfo = $finfo->file($file, FILEINFO_MIME); 

Для установки finfo расширение.

pecl install fileinfo 
6

Использование FileInfo вместо mime_content_type (который является deprecated).

Что касается MIME-типов и расширений,

application/vnd.ms-excel           xls xlb xlt 
application/vnd.ms-excel.addin.macroEnabled.12     xlam 
application/vnd.ms-excel.sheet.binary.macroEnabled.12    xlsb 
application/vnd.ms-excel.sheet.macroEnabled.12     xlsm 
application/vnd.ms-excel.template.macroEnabled.12     xltm 
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx 

(доступен на /etc/mime.types в вашем Linux-сервере)

2

Вот оболочка, которая будет правильно идентифицировать Microsoft Office 2007 документы. Тривиально и просто использовать, редактировать и добавлять дополнительные расширения/типы файлов.

function get_mimetype($filepath) { 
    if(!preg_match('/\.[^\/\\\\]+$/',$filepath)) { 
     return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filepath); 
    } 
    switch(strtolower(preg_replace('/^.*\./','',$filepath))) { 
     // START MS Office 2007 Docs 
     case 'docx': 
      return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; 
     case 'docm': 
      return 'application/vnd.ms-word.document.macroEnabled.12'; 
     case 'dotx': 
      return 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'; 
     case 'dotm': 
      return 'application/vnd.ms-word.template.macroEnabled.12'; 
     case 'xlsx': 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; 
     case 'xlsm': 
      return 'application/vnd.ms-excel.sheet.macroEnabled.12'; 
     case 'xltx': 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'; 
     case 'xltm': 
      return 'application/vnd.ms-excel.template.macroEnabled.12'; 
     case 'xlsb': 
      return 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'; 
     case 'xlam': 
      return 'application/vnd.ms-excel.addin.macroEnabled.12'; 
     case 'pptx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; 
     case 'pptm': 
      return 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'; 
     case 'ppsx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'; 
     case 'ppsm': 
      return 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'; 
     case 'potx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.template'; 
     case 'potm': 
      return 'application/vnd.ms-powerpoint.template.macroEnabled.12'; 
     case 'ppam': 
      return 'application/vnd.ms-powerpoint.addin.macroEnabled.12'; 
     case 'sldx': 
      return 'application/vnd.openxmlformats-officedocument.presentationml.slide'; 
     case 'sldm': 
      return 'application/vnd.ms-powerpoint.slide.macroEnabled.12'; 
     case 'one': 
      return 'application/msonenote'; 
     case 'onetoc2': 
      return 'application/msonenote'; 
     case 'onetmp': 
      return 'application/msonenote'; 
     case 'onepkg': 
      return 'application/msonenote'; 
     case 'thmx': 
      return 'application/vnd.ms-officetheme'; 
      //END MS Office 2007 Docs 

    } 
    return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filepath); 
} 
Смежные вопросы