Mime\Types – implementace dle Ruby MIME::Types
- Trunda
- Člen | 26
Ahoj všem,
potřeboval jsem „uhádnout“, v jedné aplikaci, mime-type souboru dle jeho koncovky. Koukal jsem na různé implementace v jiných jazycích a nejvíc se mi zalíbila implementace pro Ruby (https://github.com/…e/mime-types).
Připravil jsem tedy obdobnou implementaci pro PHP >= 5.3 + Nette (Používá se zejména Nette\Object a Nette\String).
Nejprve uvedu nějaké ukázky použití, pak vysvětlení co do paměti a dat a nakonec odkazy.
Základní použití
<?php
// předpokládám, že je již naincludováno (RobotLoader, Manuálně, ...)
$type = Thereto\Mime\Types::get('text/plain');
// najde jeden (nejvhodnější) type pro content-type plain/text
// $type je objekt typu Thereto\Mime\Type, jeho vlastnosti si lze prohlédnout v
// níže uvedené dokumentaci, tedy jen ve zkratce
echo $type->mediaType; // plain
echo $type->subType; // text
echo implode(' ', $type->extensions); // txt asc c cc h hh cpp hpp dat hlp
// ... a další
// lze najít i seznam typů
$types = Thereto\Mime\Types::getList('text/plain');
// výsledkem je pole seřazené dle "vhodnosti"
// vyhledávat se dá i regulárním výrazem
$types = Thereto\Mime\Types::getList('/^text/', array('regexp' => true));
// výsledkem je pole všech mime types, které odpovídají reg. výrazu
// dají se použít i další argument 'complete' => true | false, pak se
// nalezené mime typy omezí pouze na ty, které mají | nemají uvedeny
// koncovky
// Dále se dá vyhledávat dle názvu souboru
$type = Thereto\Mime\Type::typeFor('text.txt');
// vyhledá se mimetyp pro koncovku txt,
// kompletní seznam lze najít
$type = Thereto\Mime\Type::typesFor('text.txt');
?>
Kód funguje tak, že při prvním volání jakékoliv statické metody se
zakládá singleton instance objektu Types a
načtou se do ní všechna data (může to zabrat poměrně dost paměti).
Data se načítají z datového souboru a parsují se, to zabere dost času.
Proto je potřeba ve složce s kódem
založit tmp adresář s právem zápisu, do kterého se uloží serializovaný
objekt Types, tím se při inicializace
pouze deserializuje. Pokud se provede změna v datovém souboru, serializovaný
objekt se vygeneruje znova.
Zdrojáky jsou k dispozici na svn:
http://svn.trunecek.net/nette-mime-types/
Stáhnout pomocí
svn – svn co http://svn.trunecek.net/nette-mime-types/trunk Mime
Dokumentaci vygeneruji asi zítra a doplním.
Doufám, že někomu pomůže, připomínky a jakýkoliv feedback je samozřejmě vítán.
P.S. Ten namespace (Upnette) je jen pracovní název pro nadstavby nad
Nette, doufám, že tím nic neporušuji ;). Díky, opravil jsem to.
Editoval Trunda (5. 3. 2011 23:40)