.rar,.zip文件MIME类型 [英] .rar, .zip files MIME Type
问题描述
我正在开发一个简单的php上传脚本,用户只能上传ZIP和RAR文件.
I'm developing a simple php upload script, and users can upload only ZIP and RAR files.
我应该使用哪些MIME类型检查$_FILES[x][type]
? (请提供完整列表)
What MIME types I should use to check $_FILES[x][type]
? (a complete list please)
谢谢..
推荐答案
freedompeace,Kiyarash和Sam Vloeberghs的回答:
The answers from freedompeace, Kiyarash and Sam Vloeberghs:
.rar application/x-rar-compressed, application/octet-stream
.zip application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip
我也会检查文件名.这是检查文件是RAR还是ZIP文件的方法.我通过创建一个快速的命令行应用程序对其进行了测试.
I would do a check on the file name too. Here is how you could check if the file is a RAR or ZIP file. I tested it by creating a quick command line application.
<?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%确定,但它可能已经足够好了.
Notice that it still won't be 100% certain, but it is probably good enough.
$ rar.exe l somefile.zip
somefile.zip is not RAR archive
但是,即使WinRAR也将非RAR文件检测为SFX存档:
But even WinRAR detects non RAR files as SFX archives:
$ rar.exe l somefile.srr
SFX Volume somefile.srr
这篇关于.rar,.zip文件MIME类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!