Je développe un simple script de téléchargement php, et les utilisateurs ne peuvent télécharger que des fichiers ZIP et RAR.
Quels types MIME dois-je utiliser pour vérifier $_FILES[x][type]
? (une liste complète s'il vous plaît)
Je vous remercie..
php
zip
mime-types
rar
mrdaliri
la source
la source
Réponses:
Les réponses de Freedompeace, Kiyarash et Sam Vloeberghs:
Je ferais aussi une vérification sur 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 de ligne de commande rapide.
Notez que ce n'est toujours pas sûr à 100%, mais c'est probablement suffisant.
Mais même WinRAR détecte les fichiers non RAR en tant qu'archives SFX:
la source
application/x-zip-compressed
zip
ourar
. Selon les spécifications WC3, cela sera interprété comme suit: "Je préfère un type de contenuapplication/zip
|application/x-rar-compressed
, mais si vous ne pouvez pas fournir cela, unapplication/octet-stream
(flux de fichiers) est également très bien".multipart/x-zip
-il être valable? Ce n'est pas en plusieurs parties. La liste SitePoint contient de nombreux types MIME inexacts et elle est loin d'être complète. Le registre officiel des types de médias IANA n'est pas (et ne le sera probablement jamais) complet à 100%.Pour le téléchargement:
Une liste officielle des types de mime est disponible sur The Internet Assigned Numbers Authority (IANA) . Selon leur en-
Content-Type
tête de liste pourzip
estapplication/zip
.Le type de support pour les
rar
fichiers n'est pas officiellement enregistré auprès de l'IANA, mais la valeur de type mime couramment utilisée non officielle l'estapplication/x-rar-compressed
.application/octet-stream
signifie autant que: "Je vous envoie un flux de fichier et le contenu de ce flux n'est pas spécifié" (il est donc vrai qu'il peut s'agir d'un fichierzip
ourar
aussi). Le serveur est censé détecter le contenu réel du flux.Remarque: pour le téléchargement, il n'est pas sûr de s'appuyer sur le type mime défini dans l'en-
Content-Type
tête. L'en-tête est défini sur le client et peut être défini sur n'importe quelle valeur aléatoire. Au lieu de cela, vous pouvez utiliser les fonctions d' informations de fichier php pour détecter le fichier de type mime sur le serveur.Pour télécharger:
Si vous souhaitez télécharger un
zip
fichier et rien d'autre, vous ne devez définir qu'une seuleAccept
valeur d'en-tête. Toute valeur supplémentaire définie sera utilisée comme solution de secours au cas où le serveur ne peut pas satisfaire votre dans l'en-Accept
tête demandé de type mime.Selon les spécifications WC3 ceci:
sera interprété comme: "Je préfère un
application/zip
type mime, mais si vous ne pouvez pas fournir cela, unapplication/octet-stream
(un flux de fichiers) est également très bien".Donc un seul:
Vous garantira un
zip
fichier (ou une406 - Not Acceptable
réponse au cas où le serveur ne serait pas en mesure de satisfaire votre demande).la source
Vous ne devriez pas faire confiance
$_FILES['upfile']['mime']
, vérifiez le type MIME par vous-même. Pour cela, vous pouvez utiliser l'fileinfo
extension , activée par défaut à partir de PHP 5.3.0.REMARQUE: n'oubliez pas d'activer l'extension dans votre
php.ini
et redémarrez votre serveur:la source
Dans une question liée , il y a du code Objective-C pour obtenir le type mime d'une URL de fichier. J'ai créé une extension Swift basée sur ce code Objective-C pour obtenir le type mime:
la source
Étant donné que l'extension peut contenir plus ou moins de trois caractères, ce qui suit testera une extension quelle que soit sa longueur.
Essaye ça:
pour vérifier tous les caractères après le dernier "."
la source