Mime\Types – implementace dle Ruby MIME::Types

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Trunda
Člen | 26
+
0
-

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)

pekelnik
Člen | 462
+
0
-