2009-11-18 102 views
2

我正在处理需要用户上传Microsoft Word文档的文档。验证上传的文件

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

在此先感谢。

回答

6

如果您不使用PHP 5.3,那么mime_content_type函数可能会让您感兴趣。

如果您使用PHP 5.3和/或可以安装PECL扩展,新的Fileinfo库应该可以完成这项工作;有关更多信息,请参见finfo_file
在给出的例子中,其中一个识别的MIME类型是“application/vnd.ms-excel”;所以,有一点点运气,它应该能够处理MS Word文件太;-)

5

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

3

你可以尝试:

$type = `file -bi $UploadedFilePath`; 

这将启动linux的file计划,将考虑该文件的内容,并检测它的文件类型。

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

3

对于微软的.doc文件,您可以检查文件的前几个字节的幻数:

D0 CF 11 E0 A1 B1 1A E1

和字节偏移512处的“副标题”。