Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP确认文件类型与扩展名匹配(MS Word、Excel和PowerPoint存在问题)_Php_Mime Types - Fatal编程技术网

使用PHP确认文件类型与扩展名匹配(MS Word、Excel和PowerPoint存在问题)

使用PHP确认文件类型与扩展名匹配(MS Word、Excel和PowerPoint存在问题),php,mime-types,Php,Mime Types,在接受文件之前,我希望确认实际文件与文件扩展名匹配。为此,我采取以下措施: $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 {//fi

在接受文件之前,我希望确认实际文件与文件扩展名匹配。为此,我采取以下措施:

$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_文件用于为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类型如下:

application/vnd.openxmlformats-officedocument.wordprocessingml.document application/vnd.openxmlformats-officedocument.spreadsheetml.sheet application/vnd.openxmlformats-officedocument.presentationml.presentation
如何为2007文件获取正确的mime类型,以便确认它们是否与文件类型匹配?

问题是,人们仍然可能伪造mime类型和扩展名。您可以以二进制模式打开文件,并在某些位置检查某些字节,以真正验证其类型。@crush。文件信息不是这样做的吗?Per:本模块中的函数通过查找文件中特定位置的某些魔法字节序列,尝试猜测文件的内容类型和编码。虽然这不是一个防弹的方法,但使用的启发式方法做得很好。看来你是对的。finfo_文件的实际文档页面没有提到这一点。如果PHP自动将它们分组为更通用的mime类型,则可能必须自己进行字节检查。