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