Les réponses de freedompeace, Kiyarash et Sam Vloeberghs :
.rar application/x-rar-compressed, application/octet-stream
.zip application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip
Je vérifierais également le nom du fichier. Voici comment vous pouvez vérifier si le fichier est un fichier RAR ou ZIP. Je l'ai testé en créant une application rapide en ligne de commande.
<?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;
}
Notez que ce n'est pas encore une certitude à 100%, mais c'est probablement suffisant.
$ rar.exe l somefile.zip
somefile.zip is not RAR archive
Mais même WinRAR détecte les fichiers non RAR comme des archives SFX :
$ rar.exe l somefile.srr
SFX Volume somefile.srr
0 votes
Duplicata possible de Comment définir la taille maximale de téléchargement de fichiers et n'autoriser que certains types de fichiers lors du téléchargement en PHP ?
0 votes
Je veux autoriser tous les fichiers compressés seuls (rar, zip, tar.gz, jar etc), quelle est la procédure à suivre ?