【发布时间】:2010-12-18 02:34:28
【问题描述】:
我正在处理需要用户上传 Microsoft Word 文档的文档。
除了检查文件扩展名为 .doc 或 .docx 之外,还有其他方法可以验证上传的文件实际上是 Microsoft Word 文档,而不是任何其他重命名为 .doc 或 .docx 扩展名的文件。
提前致谢。
【问题讨论】:
标签: php file-upload mime-types
我正在处理需要用户上传 Microsoft Word 文档的文档。
除了检查文件扩展名为 .doc 或 .docx 之外,还有其他方法可以验证上传的文件实际上是 Microsoft Word 文档,而不是任何其他重命名为 .doc 或 .docx 扩展名的文件。
提前致谢。
【问题讨论】:
标签: php file-upload mime-types
.docx 是一组使用标准zip 压缩方案压缩的 XML 文件。因此,您可以尝试将其传递给解压缩算法并查看它是否解压缩,然后尝试查看其中的正确 xml 文件并检查人们希望在文档中找到的字段。
【讨论】:
你可以试试:
$type = `file -bi $UploadedFilePath`;
这将启动 linux file 程序,该程序将查看文件内容并检测它是哪种文件类型。
它适用于许多文件类型(我们在生产代码中使用它来检测上传的文件),但不确定是否适用于 Microsoft Word 文档版本。
【讨论】:
如果您使用的不是 PHP 5.3,mime_content_type 函数可能会让您感兴趣。
如果您使用的是 PHP 5.3 和/或可以安装 PECL 扩展,那么新的 Fileinfo 库应该可以胜任;有关更多信息,请参阅finfo_file。
在给定的示例中,已识别的 mime 类型之一是 "application/vnd.ms-excel" ;所以,运气好的话,它应该也可以处理 MS Word 文件;-)
【讨论】:
对于 Microsoft .doc 文件,您可以检查文件的前几个字节中的幻数:
D0 CF 11 E0 A1 B1 1A E1
和字节偏移 512 处的“子标题”。
【讨论】: