Ce module est implémenté dans le fichier mod_mime_magic.c
, et est une extension optionnelle du serveur Apache. Il peut être utilisé pour déterminer le type de contenu d'un document en regardant les quelques premiers octets de ce contenu, comme le fait la commande Unix file(1). Pour utiliser la fonctionnalité mod_mime_magic, vous devrez ajouter cette ligne dans le fichier de configuration de compilation nommé Configuration :
AddModule modules/standard/mod_mime_magic.o
Elle devra être écrite avant la déclaration du module mod_mime dans le fichier Configuration de sorte qu'il soit utilisé après le module mod_mime. En effet, mod_mime_magic est prévu pour être une "seconde ligne de défense" dans les cas où mod_mime ne peut pas résoudre la détermination de contenu.
Ce module est dérivé d'une version libre de droits de la commande file(1)
Unix, qui exploite le principe des "nombres magiques" et autres astuces du même type pour essayer de déterminer le contenu des fichiers et d'autres métainformations sur ces fichiers. Dans le cas de ce module, on se réduira à déterminer le type MIME du fichier.
Ce module n'est actif que si un fichier "magique" existe et a pu être ouvert dans la phase de configuration du serveur. Ce fichier "magique" peut être désigné par la directive MimeMagicFile
, en l'absence de laquelle le fichier conf/magic
est recherché par défaut.
Le contenu de ce fichier est encodé en "text/plain" et est un texte ASCII organisé en 4 ou 5 colonnes. Les lignes vides sont autorisées et seront ignorées. Les lignes de commentaires doivent commencer par un caractère "#". Dans les autres lignes, le module recherchera les colonnes d'information suivantes :
Colonne | Description | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Numéro d'octet à partir du début du fichier ou doit commencer l'analyse
">" indique une dépendence par rapport à la ligne non-">" précédente |
||||||||||||||||||||||
2 | type de donnée à analyser
|
||||||||||||||||||||||
3 | contenu attendu pour les données à analyser | ||||||||||||||||||||||
4 | Type MIME associé si la correspondance est faite | ||||||||||||||||||||||
5 | Encodage MIME si la correspondance est trouvée (optionnel) |
Par exemple, les ligne ssuivantes dans un fichier "magique" reconnaitrait un fichier de type audio.
# Sun/NeXT audio data 0 string .snd >12 belong 1 audio/basic >12 belong 2 audio/basic >12 belong 3 audio/basic >12 belong 4 audio/basic >12 belong 5 audio/basic >12 belong 6 audio/basic >12 belong 7 audio/basic >12 belong 23 audio/x-adpcmLes suivantes peuvent faire reconnaitre entre deux fichiers "*.doc" lequel contient le code d'in document Microsoft Word et lequel contient un document FrameMaker. (Ce sont typiquement deux fichiers de format incompatible qui partagent le même suffixe).
# Frame 0 string \<MakerFile application/x-frame 0 string \<MIFFile application/x-frame 0 string \<MakerDictionary application/x-frame 0 string \<MakerScreenFon application/x-frame 0 string \<MML application/x-frame 0 string \<Book application/x-frame 0 string \<Maker application/x-frame # MS-Word 0 string \376\067\0\043 application/msword 0 string \320\317\021\340\241\261 application/msword 0 string \333\245-\0\0\0 application/mswordUne explicitation de l'encodage MIME peut être spécifiée dans la cinquième colonne. Par exemple, ces lignes peuvent reconnaître des fichiers gzippés et préciser l'encodage comme tel.
# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver) 0 string \037\213 application/octet-stream x-gzip
Cependant, un effort à été fait pour optimiser cette fonction par rapport à la commande originale file(1) de sorte à pouvoir l'exploiter même sur un site assez chargé. Elle a été essentiellement fournie dans l'optique d'un serveur contenant un très grand nombre d'utilisateurs pouvant publier chacun leur documents personnels. Ceci est souvent le cas dans des architectures Intranet. Il est dans ce contexte souvent utile que le serveur puisse prendre des décisions plus "intelligentes" quant au contenu des fichiers que simplement se fier à l'extension du nom des fichiers ...ne serait-ce que pour réduire la fréquence des appels du type "Pourquoi que ça ne marche pas ?" de la part d'utilisateurs qui n'ont pas correctement nommé leurs fichiers. Vous serez seul juge pour savoir si les contraintes en termes de performances sont acceptables pour votre environnement.
Lorsque vous compilez le serveur Apache, ce module devra être déclaré le plus proche du début de la liste des modules à inclure dans le fichier Configuration. Les modules sont listés par priorité ascendante et le fait de le déclarer dansles premier le rend moins prioritaire. C'est un "dernier recours", et c'est tel qu'il a été conçu.
Syntaxe : MimeMagicFile nom-fichier-magique
Défaut : conf/magic
Contexte : configuration serveur, hôtes virtuels
Statut : Extension
Module : mod_mime_magic
La directive MimeMagicFile définit le nom du fichier magique. Si omise, le fichier "magique" est recherché en tant que conf/magic
relativement à ServerRoot. Le chemin d'accès peut être un chemin absolu ou pris relativement à ServerRoot.
/* * mod_mime_magic: MIME type lookup via file magic numbers * Copyright (c) 1996-1997 Cisco Systems, Inc. * * This software was submitted by Cisco Systems to the Apache Group in July * 1997. Future revisions and derivatives of this source code must * acknowledge Cisco Systems as the original contributor of this module. * All other licensing and usage conditions are those of the Apache Group. * * Some of this code is derived from the free version of the file command * originally posted to comp.sources.unix. Copyright info for that program * is included below as required. * --------------------------------------------------------------------------- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin. * * This software is not subject to any license of the American Telephone and * Telegraph Company or of the Regents of the University of California. * * Permission is granted to anyone to use this software for any purpose on any * computer system, and to alter it and redistribute it freely, subject to * the following restrictions: * * 1. The author is not responsible for the consequences of use of this * software, no matter how awful, even if they arise from flaws in it. * * 2. The origin of this software must not be misrepresented, either by * explicit claim or by omission. Since few users ever read sources, credits * must appear in the documentation. * * 3. Altered versions must be plainly marked as such, and must not be * misrepresented as being the original software. Since few users ever read * sources, credits must appear in the documentation. * * 4. This notice may not be removed or altered. * ------------------------------------------------------------------------- * * For compliance with Mr Darwin's terms: this has been very significantly * modified from the free "file" command. * - all-in-one file for compilation convenience when moving from one * version of Apache to the next. * - Memory allocation is done through the Apache API's pool structure. * - All functions have had necessary Apache API request or server * structures passed to them where necessary to call other Apache API * routines. (i.e. usually for logging, files, or memory allocation in * itself or a called function.) * - struct magic has been converted from an array to a single-ended linked * list because it only grows one record at a time, it's only accessed * sequentially, and the Apache API has no equivalent of realloc(). * - Functions have been changed to get their parameters from the server * configuration instead of globals. (It should be reentrant now but has * not been tested in a threaded environment.) * - Places where it used to print results to stdout now saves them in a * list where they're used to set the MIME type in the Apache request * record. * - Command-line flags have been removed since they will never be used here. * */
Version française © Valery Fremaux / EISTI 1998