在接受文件之前,我希望确认实际文件与文件扩展名匹配。为此,我执行以下操作:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime=finfo_file($finfo, $filename);
$ext=getExtFromMime($mime); //Simple switch lookup table
if($ext==pathinfo($filename, PATHINFO_EXTENSION)) {//File is okay}
else {//file is bad}
除了我与 Microsoft 文件相关的问题之外,您是否发现这种方法有任何问题?
PHP finfo_file() 用于为 MS Word 2007、Excel 2007 和 PowerPoint 2007 文件提供相同的 mime“应用程序/zip”类型。然后,PHP >= 5.3.11 和 >= 5.4.1 将返回的 mime 类型从 "application/zip" 更改为 2003 mime
- 应用程序/msword
- 应用程序/vnd.ms-excel
- 应用程序/vnd.ms-powerpoint)。
然而,这三种文件类型的正确 mime 类型如下:
- 应用程序/vnd.openxmlformats-officedocument.wordprocessingml.document
- 应用程序/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- 应用程序/vnd.openxmlformats-officedocument.presentationml.presentation
我应该如何为 2007 文件获取正确的 mime 类型,以便确认它们与文件类型匹配?