web-dev-qa-db-fra.com

Comment les MIME sont détectés

J'ai cherché autour, mais je n'arrive pas à trouver d'informations sur le sujet.

Comment définissez-vous le type MIME pour un fichier existant?

Par exemple, j'essaie de créer un fichier de type text/html

1
Anonymous

Les types MIME ne sont pas réellement stockés sur le système de fichiers. Ils sont simplement un moyen pratique de savoir comment traiter un fichier. Pour obtenir le type MIME, vous devez exécuter un programme.

Certains programmes détectent le type MIME d'un fichier uniquement en regardant l'extension du fichier, tandis que d'autres vérifient le fichier pour un nombre magique ou spécial motif magique (essentiellement un regex ).


Par exemple, exécutez touch test.html, Ce qui crée un fichier vide.

Exécutez ensuite xdg-mime query filetype test.html Ou mimetype test.html. Les deux renverront le type text/html.

Cependant, si vous exécutez file --mime-type -b test.html, Il renverra inode/x-empty.


Donc, si vous voulez que tous les programmes agissent de la même manière sur votre fichier, le fichier doit avoir le format approprié (données) avec l'extension correcte.

Qu'est-ce qu'un nombre magique?

L'exécution de xxd image | head -1 Sur mon image de profil crée une sortie comme suit:

00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR

Selon Wikipedia , 89 50 4E 47 0D 0A 1A 0A Est l'en-tête standard pour tous les fichiers image/png.

Comment fonctionne la commande file?

A partir de la page de manuel file(1) :

Il existe trois ensembles de tests, exécutés dans cet ordre: les tests du système de fichiers, les tests magiques et les tests de langue. ...

Les tests du système de fichiers sont basés sur l'examen du retour d'un appel système stat(2) . Le programme vérifie si le fichier est vide ou s'il s'agit d'une sorte de fichier spécial. ...

Les tests magiques sont utilisés pour vérifier les fichiers contenant des données dans des formats fixes particuliers. ... Ces fichiers ont un "nombre magique" stocké dans un endroit particulier près du début du fichier qui indique au système d'exploitation UNIX que le fichier est un exécutable binaire, et lequel de plusieurs types de celui-ci. ... Si un fichier ne correspond à aucune des entrées du fichier magique, il est examiné pour voir s'il semble être un fichier texte. ...

Tout fichier qui ne peut pas être identifié comme ayant été écrit dans l'un des jeux de caractères répertoriés ... est simplement appelé "données".

Comment le fichier sait-il quels modèles magiques utiliser?

Encore une fois, à partir de la page de manuel file(1) :

Les informations identifiant ces fichiers sont lues à partir du fichier magique compilé /usr/share/misc/magic.mgc Ou des fichiers du répertoire /usr/share/misc/magic Si le fichier compilé n'existe pas. De plus, si $HOME/.magic.mgc Ou $HOME/.magic Existe, il sera utilisé de préférence aux fichiers magiques du système. Si/etc/magic existe, il sera utilisé avec d'autres fichiers magiques.

Si j'exécute strace file image |& grep magic, Nous pouvons voir que la commande file recherche ces fichiers:

/usr/lib/x86_64-linux-gnu/libmagic.so.1 => libmagic (3) ~/.magic.mgc
~/.magic
/etc/magic.mgc
/etc/magic
/usr/share/misc/magic.mgc

Il existe d'autres fichiers comme /etc/mime.types Que d'autres programmes utilisent. Ce fichier affecte une extension à un type MIME. Par exemple, grep -i text/html /etc/mime.types Produit:

text/html                   html htm shtml
2
Ravexina