2012-01-08 8 views

ответ

1

Этот вопрос в основном тот же: PHP 5.3.5 fileinfo() MIME Type for MS Office 2007 files - magic.mime updates?

И, кажется, нет никакого решения. Это не ваш браузер, это магия «волшебный» файл, который пытался угадать, и нет никакого способа рассказать разные между docx и zipfile, потому что docx IS на самом деле является zipfile!

0

Если вы похожи на меня и можете использовать или не использовать серверы php> = 5.3.0 по какой-либо причине и хотите использовать один набор кодов для всех серверов и, возможно, настаивать на включении функции mime_content_type как-то для серверов которые не имеют Fileinfo, тогда вы можете использовать решение наполовину Arsed, такое как my, которое заключается в том, чтобы сделать заменяющую функцию, которая на php> = 5.3.0 использует Fileinfo и в более низких версиях, если имя файла заканчивается на определенную строку, уникальную для того, что вы хотите переопределить, она возвращает ваше жестко заданное значение и вызывает mime_content_type() для всех других типов. Однако, конечно, это НЕ будет работать, если файл имеет тип, который mime_content_type() неправильно определяет и где имя файла не заканчивается расширением, но это должно быть очень редко.

Такое решение может выглядеть примерно так:

function _mime_content_type($filename) 
{ 

     //mime_content_type replacement that uses Fileinfo native to php>=5.3.0 
    if(phpversion() >= '5.3.0') 
    { 

     $result = new finfo(); 

     if (is_resource($result) === true) 
     { 
      return $result->file($filename, FILEINFO_MIME_TYPE); 
     } 

    } 

    else 
    { 

     if(substr($filename, -5, 5) == '.docx') 
      return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; 
     else if(substr($filename, -5, 5) == '.xlsx') 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; 
     else if(substr($filename, -5, 5) == '.pptx') 
      return 'application/vnd.openxmlformats-officedocument.spreadsheetml.presentation'; 
     //amend this with manual overrides to your heart's desire 


     return mime_content_type($filename); 

    } 

} 

, а затем вы просто должны заменить все вызовы mime_content_type с призывами _mime_content_type.

Смежные вопросы