In tutte le piattaforme Unix, esiste un comando chiamato file che, confrontando i primi byte di un file con dei pattern noti, può dedurre il tipo del file stesso.
Questo è possibile perchè diversi file dello stesso tipo (per esempio immagini GIF) hanno sempre alcuni byte in comune (di solito all'inizio) che li identificano e permettono ai programmi che li utilizzano di riconoscerli e trattarli opportunamente. Molti tipi di file sono associati ad un "magic number" in modo univoco.
Questa funzionalità si può applicare anche in ambito web tramite Apache ed il modulo mod_mime_magic.
Il modulo mod_mime_magic è un supplemento rispetto alle direttive MIME gestite dal modulo mod_mime.
I vantaggi nell'utilizzo del primo modulo derivano dal fatto che non è necessario aggiungere direttive o modificare file di configurazione mime.type oppure semplicemente dal fatto che alcuni file non possono essere distinti dall'estensione.
Queste operazioni costano molto in termini di prestazione e di velocità di risposta del server ed è proprio per questo che la configurazione consigliata è l'utilizzo di entrambi i moduli, dando precedenza al caricamento di mod_mime ed in un secondo tempo, se il primo dovesse fallire nel riconoscere il file type il caricamento del modulo mod_mime_magic.
Il modulo in questione fa parte della configurazione standard di Apache ma a differenza del modulo mod_magic che carica di default il file mime.type, occorre specificare a livello di server configuration il caricamento del proprio file di configurazione, che solitamente risiede nella sottodirectory conf del tree di Apache:
MimeMagicFile conf/magic
Ecco come si presentano le entry del file magic:
[byte offset] [match type] [match criterion] [MIME type] ([encoding])
0 string \000\000\001\263 video/mpeg
-offset
Indica da quale byte, rispetto all'inizio del file, inizia l'analisi
-match type
E' simbolo che identifica il tipo di match da eseguire (es una stringa oppure un set di bit)
-match criterion
Dipende esclusivamente dal match type (es: Se match type è una stringa allora sarà testo oppure può contenere valori espressi in scala ottale)
-MIME type/ encoding
Lo standard mime type (text/html etc..)