检查 PHP 中的"Magic Bytes"或 MIME 类型?



因此,我目前使用了一些不同的方法来检查mime类型。用户使用表单上传文件,我获取mime类型,如果是application/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内容类型。

$type = mime_content_type($filename);

FWIW,您可以使用bin2hex获得神奇的字节。根据维基百科(https://en.m.wikipedia.org/wiki/Magic_number_(编程)#Magic_numbers_in_files),zip具有前2个十六进制字节50 4B

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

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

相关内容

  • 没有找到相关文章

最新更新