验证上传的文件

时间:2009-11-18 23:25:56

标签: php file-upload mime-types

我正在制作一份文档,要求用户上传Microsoft Word文档。

除了检查文件扩展名为.doc或.docx之外,还有其他方法可以验证上传的文件实际上是Microsoft Word文档而不是任何其他文件重命名为.doc或.docx扩展名。

提前致谢。

4 个答案:

答案 0 :(得分:6)

如果您没有使用PHP 5.3,mime_content_type功能可能会让您感兴趣。

如果您使用的是PHP 5.3和/或可以安装PECL扩展,那么新的Fileinfo库应该可以完成这项任务。有关更多信息,请参阅finfo_file
在给定的示例中,所识别的mime类型之一是“application/vnd.ms-excel”;所以,运气好的话,它应该能够处理MS Word文件; - )

答案 1 :(得分:5)

.docx是一组使用标准zip压缩方案压缩的XML文件。因此,您可以尝试将其传递给解压缩算法并查看它是否已解压缩,然后尝试查看其中的正确xml文件,并检查文档中预期会找到的字段。

答案 2 :(得分:3)

你可以尝试:

$type = `file -bi $UploadedFilePath`;

那将启动linux file程序,该程序将查看文件内容并检测它是哪种文件类型。

它适用于许多文件类型(我们在生产代码中使用它来检测上传的文件),但不确定Microsoft Word文档版本。

答案 3 :(得分:3)

对于Microsoft .doc文件,您可以检查文件的前几个字节是否有幻数:

D0 CF 11 E0 A1 B1 1A E1

和“subheaders”在字节偏移512处。