.rar, .zip 文件 MIME 类型

新手上路,请多包涵

我正在开发一个简单的 php 上传脚本,用户只能上传 ZIP 和 RAR 文件。

我应该使用哪些 MIME 类型来检查 $_FILES[x][type] ? (请提供完整列表)

原文由 mrdaliri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

来自自由和平组织、Kiyarash 和 Sam Vloeberghs 的回答:

 .rar    application/vnd.rar, application/x-rar-compressed, application/octet-stream
.zip    application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip

我也会检查文件名。这是检查文件是 RAR 还是 ZIP 文件的方法。我通过创建一个快速的命令行应用程序对其进行了测试。

 <?php

if (isRarOrZip($argv[1])) {
    echo 'It is probably a RAR or ZIP file.';
} else {
    echo 'It is probably not a RAR or ZIP file.';
}

function isRarOrZip($file) {
    // get the first 7 bytes
    $bytes = file_get_contents($file, FALSE, NULL, 0, 7);
    $ext = strtolower(substr($file, - 4));

    // RAR magic number: Rar!\x1A\x07\x00
    // http://en.wikipedia.org/wiki/RAR
    if ($ext == '.rar' and bin2hex($bytes) == '526172211a0700') {
        return TRUE;
    }

    // ZIP magic number: none, though PK\003\004, PK\005\006 (empty archive),
    // or PK\007\008 (spanned archive) are common.
    // http://en.wikipedia.org/wiki/ZIP_(file_format)
    if ($ext == '.zip' and substr($bytes, 0, 2) == 'PK') {
        return TRUE;
    }

    return FALSE;
}

请注意,它仍然不是 100% 确定的,但它可能已经足够好了。

 $ rar.exe l somefile.zip
somefile.zip is not RAR archive

但即使 WinRAR 也将非 RAR 文件检测为 SFX 存档:

 $ rar.exe l somefile.srr
SFX Volume somefile.srr

原文由 Gfy 发布,翻译遵循 CC BY-SA 4.0 许可协议

我看到很多关于 zip 和 rar 媒体类型 application/zipapplication/x-rar-compressed 的答案报告。

虽然前一个匹配是正确的,但对于后一个 IANA 在这里报告 https://www.iana.org/assignments/media-types/application/vnd.rar 对于 rar application/x-rar-compressed 是一个已弃用的别名,并且而 application/vnd.rar 是官方的。因此,2020 年 IANA 的正确媒体类型是:

  1. zip : application/zip
  2. rar : application/vnd.rar

原文由 JeanValjean 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题