Close search
Hoa

Hack book de Hoa\Mime

Le type des ressources est codifié à partir d'un format appelé MIME Media Types. La bibliothèque Hoa\Mime permet de manipuler ce format et de déduire des informations à partir de flux.

Table des matières

  1. Introduction
    1. Historique
  2. Informations générales
  3. Informations sur un flux
  4. Les types de Hoa
  5. Conclusion

Introduction

Toutes les ressources en Informatique n'ont pas le même type. Un type permet d'identifier une ressource afin de lui associer une interprétation particulière. Par exemple, une ressource de type text/html représente un document HTML et sera interprétée dans un navigateur Web. Autre exemple, une ressource de type video/webm représente une vidéo au format WebM et peut être interprétée dans un lecteur vidéo.

Nous remarquons que le type est exprimé sous la forme media/type. Un média représente une catégorie de ressources. Il en existe 9 pour l'instant : application, audio, example, image, message, model, multipart, text et video. Les types standards n'ont pas de préfixe particulier, a contrario des types expérimentaux qui sont préfixés par x-, comme image/x-icon. Il existe aussi des types réservés pour les « entreprises » (vendors en anglais), préfixés par vnd., comme application/vnd.ms-excel. À chaque type peuvent être associées une ou plusieurs extensions, comme html et htm pour text/html. Cela signifie qu'un fichier avec le nom Foobar.html est un document HTML.

L'autorité chargée de spécifier tous les types est l'IANA (Internet Assigned Numbers Authority). Nous trouverons la liste des types standardisés dans le document MIME Media Types (nous y trouverons également toutes les RFC correspondantes, notamment celles décrivant la procédure pour faire standardiser un nouveau type).

La bibliothèque Hoa\Mime permet de manipuler le fichier Mime.types qui, historiquement, contient tous les types (son format est un dérivé du format utilisé par mailcap, voir la RFC1524, et voir des explications sur Wikipédia). Elle permet également de trouver le type d'un flux (d'une ressource) et d'autres informations associées au type.

Historique

À l'origine, ce formalisme était utilisé dans les mails (voir la RFC2046) qui pouvaient transporter plusieurs sortes de documents. C'est pourquoi nous parlons de types MIME, pour Multipurpose Internet Mail Extensions. Par la suite, ce format a été étendu à d'autres protocoles comme HTTP (avec l'en-tête Content-Type). C'est maintenant un standard de facto pour tout nouveau protocole.

Informations générales

Il y a deux façons d'utiliser la classe Hoa\Mime\Mime. Nous allons commencer par l'approche statique.

Les deux méthodes principales sont Hoa\Mime\Mime::getExtensionsFromMime pour obtenir les extensions associées à un type, et Hoa\Mime\Mime::getMimeFromExtension pour l'opération inverse, à savoir obtenir le type à partir d'une extension. Ainsi :

print_r(Hoa\Mime\Mime::getExtensionsFromMime('text/html'));

/**
 * Will output:
 *     Array
 *     (
 *         [0] => html
 *         [1] => htm
 *     )
 */

var_dump(Hoa\Mime\Mime::getMimeFromExtension('webm'));

/**
 * Will output:
 *     string(10) "video/webm"
 */

Nous pouvons aussi savoir si une extension existe dans notre fichier Mime.types grâce à la méthode (toujours statique) Hoa\Mime\Mime::extensionExists.

Par défaut, Hoa\Mime\Mime va utiliser le fichier hoa://Library/Mime/Mime.types comme base de données. Nous pouvons lui préciser un autre fichier en utilisant la méthode Hoa\Mime\Mime::compute :

Hoa\Mime\Mime::compute('/etc/mime.types');

Toutes les informations fournies par la classe Hoa\Mime\Mime sont calculées à partir de ce fichier. Il est donc préférable d'exécuter cette méthode avant toute opération sur la classe Hoa\Mime\Mime.

Informations sur un flux

Une autre façon d'utiliser la bibliothèque Hoa\Mime\Mime est dynamiquement, à partir d'un flux. Nous instancions notre classe en lui donnant un flux, et ensuite nous pourrons connaître le type de ce flux, ses extensions etc. Ainsi :

$type = new Hoa\Mime\Mime(new Hoa\File\Read('index.html'));

Nous avons maintenant les méthodes suivantes :

Enfin, nous avons deux autres méthodes : isExperimental pour savoir si le type est expérimental ou pas, et isVendor pour savoir si le type est « propriétaire » ou pas. Par exemple :

var_dump(
    $type->getExtension(),
    $type->getOtherExtensions(),
    $type->getMime(),
    $type->isExperimental()
);

/**
 * Will output:
 *     string(4) "html"
 *     array(1) {
 *       [0]=>
 *       string(3) "htm"
 *     }
 *     string(9) "text/html"
 *     bool(false)
 */

Et c'est tout !

Les types de Hoa

Hoa définit plusieurs langages, avec leur propre type. C'est par exemple le cas du langage PP dans Hoa\Compiler. Chaque bibliothèque qui propose un nouveau langage comporte un fichier hoa://Library/library-name/.Mime au même format que Mime.types. Pour le langage PP, son extension est pp et son type text/vnd.hoa.compiler.

Pour trouver tous les types définies par Hoa, vous pouvez exécuter la ligne de commande suivante :

$ find /usr/local/lib/Hoa -name '.Mime' | xargs cat

Conclusion

La bibliothèque Hoa\Mime permet de manipuler le fichier Mime.types rapidement et simplement.

Une erreur ou une suggestion sur la documentation ? Les contributions sont ouvertes !

Comments

menu