Я пробую mime_content_type()/finfo_open(). Это нормально для .doc, но возвращает «application/zip» для .docx и ничего для .xls
в чем проблема ? это проблема с моим браузером?
Я пробую mime_content_type()/finfo_open(). Это нормально для .doc, но возвращает «application/zip» для .docx и ничего для .xls
в чем проблема ? это проблема с моим браузером?
Этот вопрос в основном тот же: mime-updates">PHP 5.3.5 fileinfo() Тип MIME для файлов MS Office 2007 - обновления magic.mime?
И кажется, что решения нет. Это не ваш браузер, это «магический» файл mime, который пытался угадать, и нет никакого способа отличить docx от zip-файла, потому что docx на самом деле является zip-файлом!
Если вы похожи на меня и можете использовать или не использовать серверы php>=5.3.0 по какой-либо причине и хотите использовать один набор кода для всех серверов и, возможно, настаиваете на том, чтобы как-то задействовать функцию mime_content_type для серверов, которые не имеют Fileinfo, то вы можете использовать наполовину готовое решение, подобное моему, которое заключается в создании функции замены, которая заключается в том, что на 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.