PHP - finfo_file 返回错误的 MIME 类型

Posted

技术标签:

【中文标题】PHP - finfo_file 返回错误的 MIME 类型【英文标题】:PHP - finfo_file returns incorrect MIME type 【发布时间】:2016-08-18 16:26:10 【问题描述】:

我有一个应用程序,我可以上传/下载不同格式的文件。当我上传时,我有正确的 MIME 类型,但是当我下载相同的文件时,php 的 finfo_file 会返回一个不正确的 MIME 类型。这是我得到的一些值:

代码:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $filename);
echo $mime_type;

输出:

application/msword // test0.pot INCORRECT should be application/vnd.ms-powerpoint
text/plain // test1.csv ICNORRECT should be text/csv
application/vnd.ms-powerpoint // test2.pptx INCORRECT should be application/vnd.openxmlformats-officedocument.presentationml.presentation
application/msword // test3.pps INCORRECT should be application/vnd.ms-powerpoint
application/msword // test4.docx INCORRECT should be application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/msword // test5.doc CORRECT
application/vnd.ms-excel // test6.xls CORRECT
application/vnd.ms-excel // test7.xlsx INCORRECT should be application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/msword // test8.docm INCORRECT should be application/vnd.ms-word.document.macroenabled.12
application/pdf // test9.pdf CORRECT

我检查了 apache 的 mime.types 文件,mime 类型是正确的。我必须做其他配置吗?有人可以帮我解决这个问题吗?

谢谢。

【问题讨论】:

FWIW,有些格式无法与其他格式区分开来。 CSV 也是一个完全有效的text/plain,没有技术差异。 检测类型根据定义是一门不准确的科学。 当我下载一个 .csv 文件时,用 Bloc 注释打开它不符合人体工程学。默认情况下,选择的应用程序必须是 Excel 才能读取它,对于 powerpoint 演示文稿,它应该是 ms PowerPoint 而不是 ms word。我的意思是,这就是我想要的。 【参考方案1】:

我这样做了,现在效果更好了:

代码:

$finfo = finfo_open(FILEINFO_MIME, "conf/magic");
$myMime = finfo_file($finfo, $filename);

还是谢谢。

【讨论】:

以上是关于PHP - finfo_file 返回错误的 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

php文件转base64

获取文件mime类型

PHP 7 Mime 和 PDF 验证

从php中的文件名获取mime类型

CMPP错误码说明

网易邮件发送不出去的错误代码详解 (MI:SFQ错误等)