我正在构建的网站允许授权用户上传文件。 对于任何特定类别的上传,允许一组文件类型,例如.pdf和.docx,以便我的客户可以选择他们想要接受的内容。
上传时,我根据该扩展名的 MIME 类型数据库表检查上传文件的 MIME 类型(使用 finfo_open(FILEINFO_MIME_TYPE)
)。
在测试中,我正在从我的PC上传一个docx文件 - 它有一个docx扩展名,Windows将文件类型报告为application/vnd.openxmlformats-officedocument.wordprocessingml.document,这是我所期望的。 但是,finfo_open
给了我一个MIME类型的应用程序/msword。
finfo_open的信息是来自文件内部还是来自浏览器或上传过程中的某些内容(在这种情况下,我想我需要指定允许的其他 MIME 类型)还是 Web 服务器中的内容(在这种情况下,可以使用 php.ini 对其进行修改)?
我相信
在PHP中使用$ _FILES签出文件MIME类型更安全。
不过,我认为这并不麻烦。你确定你给了docx
而不仅仅是一份doc
文件吗?通常application/msword
是doc
文件扩展名的 MIME 类型......请确保使用正确版本的 Microsoft Word 和正确的格式保存文件,然后重试。另外,我会尝试在$_FILES
上使用print_r
,看看它是否告诉您有关该文件的信息?它是否告诉您该文件具有不同的 MIME 类型?