在PHP中检查“Magic Bytes”或Mime类型?

所以,我目前使用了几种不同的方法来检查MIME类型。 用户使用表单上传文件,抓住MIME类型,如果是应用程序/ zip,我允许,如果是其他任何东西,我否认它。 问题在于某些事情(我假设的浏览器)正在将MIME类型更改为“application / octet-stream”

我想知道如何验证一个文件是.zip格式上传。

码:

  $name = strtolower(end(explode('.', $filename))); 
    $accepted_types = array('application/zip', 'application/x-zip-compressed',   'multipart/x-zip', 'application/x-compressed'); 

  foreach($accepted_types as $good_type) { 
        if($good_type == $type) {   
            $okay = true;  
            break;
        } else {
            $okay = false;
        }
  }

使用mime-content-type。

$type = mime_content_type($filename);

FWIW,你可以使用bin2hex得到魔法字节。 根据维基百科(https://en.m.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files),拉链有前2个十六进制字节50 4B

$zip=file_get_contents("somefile.zip");

echo strtoupper (substr(bin2hex($zip),0,2)); //504B

链接地址: http://www.djcxy.com/p/47027.html

上一篇: Checking "Magic Bytes" or Mime Types in PHP?

下一篇: Mime type of uploaded zip file is application/octet