Portál AbcLinuxu, 28. května 2024 23:30

PEAR - I

30. 3. 2005 | Pavel Szalbot
Články - PEAR - I  

Nebojte se, jste tu správně. Nebude řeč o ovoci, ale o frameworku pro jazyk oblíbený mezi vývojáři webových aplikací. Tím jazykem je PHP a framework se jmenuje, jak jistě správně tušíte, PEAR.

Úvod - framework

Webové aplikace se od ostatních liší v mnoha směrech. Jedním z nich je relativně časté opakování stejných problémů. Spousta webových aplikací například musí spravovat uživatelské účty, definuje způsob zobrazování a ukládání obsahu, pracuje s databázemi, zpracovává různé datové formáty jako např. XML atd. Programovací jazyky nabízejí často jen parciální řešení podobných problémů, a tak je nasnadě navrhnout vlastní knihovnu, která poskytne potřebnou funkcionalitu prostřednictvím dobře definovaného rozhraní. Knihovna může žít vlastním životem a s novou verzí zpravidla není složité upgradovat i aplikaci.

Samotný návrh knihovny ovšem není jen otázkou tvorby rozhraní a implementace příslušných algoritmů ve zvoleném jazyce. Je potřeba udržet konzistentní styl psaní kódu a vytvořit jednoduchou a úplnou dokumentaci, aby knihovnu mohli používat i další programátoři. Nakonec všichni skončíme u toho, že definujeme vlastní framework, což není vůbec špatné, ale někdo už to mohl udělat dříve a taky lépe.

PEAR

Tento seriál se bude věnovat frameworku a distribučnímu systému knihoven a rozšíření pro aplikace psané v jazyce PHP nazvanému PEAR. Začneme seznámením s frameworkem a ukážeme si, jak jej nainstalovat a používat. Další díly budou věnovány konkrétním balíčkům, jak se aplikace a knihovny obsažené v PEARu nazývají.

PEAR (PHP Extension and Application Repository) vznikl z diskuse na PHP Developers' Meeting v roce 2000 a od té doby urazil docela dlouhou cestu. V současnosti archiv balíčků obsahuje na 250 open source knihoven a rozšíření roztříděných tématicky do několika kategorií (např. databáze, souborový systém, HTTP, matematika, text, xml, web services apod.). Archiv doplňuje sofistikovaný distribuční systém, kvalitní dokumentace samotného frameworku, návody, mailing-listy a v neposlední řadě IRC kanál sloužící jak uživatelům, tak vývojářům nových projektů, které usilují o začlenění do repositáře.

PEAR navíc definuje čtyři zvláštní skupiny balíčků. Jednou z nich je repositář PECL (PHP Extension Community Library), který obsahuje rozšíření pro samotné PHP. PECL má vlastní webové stránky a definuje vlastni styl psaní kódu, ovšem distribuční systém včetně struktury balíčků sdílí se svojí sestrou, jak PEAR nazývá (ženský rod je zřejmě používán kvůli věnování frameworku dceři autora). Mimo PECL jsou obzvláště důležité tzv. PHP Foundation Classes (PFC), což je skupina balíčků, které standardní distribuce PHP instalují spolu s nástroji pro práci s archivem. PFC tvoří jen stabilní balíčky, které nejsou vázány na konkrétní systém a jsou díky standardizovanému API do budoucna snadno rozšiřitelné. Pokud budou distribuce PHP i nadále instalovat balíčky z PEARu, budou to ty z PFC.

Balíčky

Ještě než začneme s frameworkem pracovat, podíváme se na proceduru, kterou prošel každý balíček, a na jeho vlastnosti, které z ní vyplynuly. Bude nám pak jasné, jaké konvence balíček dodržuje, jaký kód budeme používat a co můžeme očekávat od jeho autora. Pokud se rozhodnete rozšířit PEAR o vlastní knihovnu, doporučuji vám přečíst si kompletní dokumentaci na webových stránkách projektu. Následující text je vhodný spíše pro uživatele (i ti by se však měli s dokumentací seznámit).

Na začátku vývoje balíčku stojí otázka, k čemu bude knihovna nebo rozšíření sloužit. Podle toho jej autor musí správně pojmenovat a zařadit do kategorie. Svůj návrh pošle do mailové konference a počká na vyjádření, zda neexistuje podobný či stejný balíček a zda vůbec bude přínosem. Nemělo by se tedy stát, že by archiv obsahoval dva balíčky, které řeší stejný problém, a tak se netrapte tím, že jste našli jen jeden, který splňuje vaše představy. Pokud se vám balíček hodí, nezapomeňte zkontrolovat jeho závislosti na ostatních (na ty vás případně upozorní i instalační program) a zjistěte, s jakou licencí je nabízen k použití. Autor se vytvořením zavazuje poskytnout podporu, opravovat nahlášené chyby a také by měl rozšiřovat kód o nové funkce, které navrhnou nebo jimi rovnou přispějí ostatní vývojáři. Může se stát, že objevíte chybu a pak byste ji určitě měli nahlásit správci balíčku. K tomu účelu slouží formulář umístěný v rámci distribučního systému.

Konvence

Jedním z požadavků kladených na každý balíček je dodržení konvence formátování řídících struktur, názvů proměnných, tříd atd. Zkrátka musí zdrojový kód odpovídat stylu, jehož popis je k dispozici v dokumentaci PEARu. Styl psaní kódu se docela podobá doporučení Sunu pro programovací jazyk Java a převratné novinky v něm určitě nenajdete. Před začátkem vývoje aplikace používající balíčky z PEARu se ovšem rozhodně vyplatí zvážit, zda vlastní kód jejich použitím neznepřehledníte. Pokud se nevyhnete tomu, že budete muset provést vlastní refaktorizaci kódu balíčku, zkuste raději vytvořit wrapper nad rozhraním knihovny/rozšíření. Starší verze se totiž dají díky instalačním nástrojům poměrně snadno upgradovat a balíček mohou používat i jiné aplikace běžící na serveru.

Autor je dále povinen zveřejnit kompletní dokumentaci zdrojových kódů a to buď ve formátu Docbook XML nebo jako "prostý text". Najít ji můžete jak na webu, tak také v adresáři, kde je PEAR nainstalován. Dokumentace, která je součástí instalace, zpravidla představuje jen návod jak balíček nainstalovat a začít používat. V distribučním systému by pro každý balíček měla být dostupná podstránka s dokumentací celého API.

Vývoj balíčku probíhá pod dohledem ostatních vývojářů, kteří také nakonec rozhodují o jeho začlenění do archivu. Jakmile je autor spokojen se současným stavem balíčku, může jej zařadit do hlasovacího procesu. Během hlasování se projekt až na výjimečné případy nesmí měnit a první verze je tak před vydáním dána na milost ostatním. Nutný počet hlasů pro přijetí je relativně malý (stačí nasbírat 5 kladných hlasů (+1 hlas získá projekt za souhlas, -1 za nesouhlas, 0 za nerozhodnutého vývojáře) za 7 dní (14 pokud se během 7 dní hlasování nezúčastní alespoň pět vývojářů)), nicméně projekt je od svých prvopočátků sledován a výsledná kvalita by měla být zřejmá už před hlasováním (pokud ovšem autor nechce riskovat).

Distribuční systém

Distribuční systém balíčků nabízí mimo funkcí pro získávání zdrojových kódů hlavně jednotné webové rozhraní pro každý balíček, ve kterém najdete informace o jeho stavu, můžete si prohlédnout dokumentaci, zjistit informace o týmu vývojářů, kteří jej mají na starosti, nebo nahlásit nalezené chyby. Pracovat s distribučním systémem se dá pracovat buď přes webové rozhraní, nebo přes správce balíčků, který je obvykle nainstalován spolu s PHP. Obě prostředí ovšem obsahují funkce, které nenabízí to druhé (z webu např. balíčky nenainstalujete, ze shellu zase nenahlásíte nalezené chyby atd.), ale základní funkce (získání a vyhledání balíčku a informací o něm) mají společné.

Instalace

Instalace pomocí správce balíčků

Pokud máte nainstalováno PHP ve verzi 4.3.0 a vyšší, máte standardně k dispozici i správce balíčků, ledaže jste při překladu použili volbu without-pear.

Jestliže správce balíčků nemáte, můžete ho nainstalovat ručně. Stačí v shellu zadat lynx -source http://go-pear.org/ | php a řídit se instrukcemi.

Jakmile je správce nainstalován, můžete s ním začít pracovat. Seznam argumentů spouštěcího příkazu je výstupem skriptu bez parametrů:

pear

Zvědavé povahy si určitě všimnou, že samotný správce balíčků je PHP aplikace a dokonce je součástí balíčku se jménem PEAR. Někdo si možná prohlédnul kategorii "PEAR", někdo zase nahlédnul do zdrojových kódů a zjistili jste tak, že existují i grafické podoby správce. V současnosti to jsou další dvě verze - jedna webová a druhá postavená na PHP-GTK (balíčky, které PHP-GTK používají, patří do zvláštní skupiny jako např. PFC) - obě zatím jen ve stavu betaverze. V dokumentaci o nich proto není žádná zmínka, ale vezměme webovou variantu a demonstrujme si na ní práci s CLI nástroji.

Seznam dostupných balíčků lze zobrazit příkazem:

pear remote-list

Na terminálu uvidíte názvy všech balíčků a čísla jejich verzí. Balíček, který chceme nainstalovat, ovšem není zobrazen. Jak je to možné? Chování správce totiž ovlivňují konfigurační proměnné a jednou z nich je i preferred_state, která určuje, jakou verzi (alpha, beta, devel, stable, snapshot) chceme přednostně instalovat. Určitě šikovná volba, nicméně ovlivní i seznam balíčků, který se zobrazí (vyhledávání pomocí pear search neovlivňuje). Dostupná verze PEAR_Frontend_Web je pouze beta, tudíž změníme nastavení správce:

pear config-set preffered_state beta

Po ukončení experimentů si vraťte nastavení zpět na původní (nejspíš stable).

Teď už balíček v seznamu vidíte a hlavně je možné jej konečně nainstalovat:

pear install PEAR_Frontend_Web

Pracujete-li s čistým PEARem, instalátor vám ohlásí, že PEAR_Frontend_Web potřebuje ještě balíčky Net_UserAgent_Detect a HTML_Template_IT. Nainstalujeme tedy všechny najednou:

pear install PEAR_Frontend_Web NET_UserAgent_Detect HTML_Template_IT

Abyste mohli frontend vyzkoušet, zkopírujte soubor WebInstaller.php, který se nachází v adresáři PHP_LIB_DIR/php/PEAR/ (PHP_LIB_DIR nahraďte adresářem, kde jste PHP řekli, že se nachází knihovny [/usr/local/lib/]), do www adresáře webserveru a zkuste jej zobrazit v prohlížeči.

Balíček odinstalujete triviálním:

pear uninstall PEAR_Frontend_Web

Instalace z tarballů

Existují i balíčky, které framework používají, ale nejsou zařazeny v repositáři. Takové balíčky jsou zpravidla dostupné jako tarbally, přičemž jejich obsah je vytvořen tak, aby je správce dokázal nainstalovat. Instalace z tarballu je umožněna díky souboru package.xml, jehož formát je vysvětlen v dokumentaci. Při instalaci zadáte místo názvu balíčku cestu k souboru package.xml.

Instalace v prostředí webhostingu

K webhostingu zpravidla nedostanete přístup k shellu a instalaci pak musíte provést ručně. Naštěstí to není nic obtížného a většina z vás by určitě přišla, jak na to. Stáhněte si zdrojové kódy vybraného balíčku a přes FTP je uploadujte např. do adresáře /include ve vašem webovém prostoru. Ve skriptech nezapomeňte pomocí funkce ini_set nastavit proměnnou "include_path" na /include.

Tento způsob instalace - pravděpodobně nejčastější, jaký budete provádět - s sebou nese malý zádrhel. Je třeba si ověřit závislosti a "nainstalovat" také balíčky, na kterých vámi zvolený závisí. Samotný balíček PEAR definuje pro PHP4 mj. často používané speciální funkce, které fungují jako destruktory.

Závěr

Tento díl vás měl s frameworkem seznámit a poskytnout vám základy pro práci s ním. Netvrdím, že jsem vyčerpal všechna zajímavá témata, ale to jsem ani nechtěl. Výborným zdrojem nejen pro začátečníky je určitě online dokumentace, která není příliš rozsáhlá, ale najdete v ní všechno, co budete potřebovat. Pro budoucí přispěvatele je její znalost nutností.

Další díl se dle ohlasu bude věnovat konkrétním balíčkům z archivu. Pokud máte konkrétní přání, můžete jej sdělit v diskusi pod článkem a já se pokusím balíček nastudovat.

Seriál PEAR (dílů: 3)

První díl: PEAR - I, poslední díl: PEAR - III (Autentizace).
Následující díl: PEAR - II (Profilování, hledání chyb)

Související články

PEAR - II (Profilování, hledání chyb)
PEAR - III (Autentizace)
Přihlašování uživatelů do webové aplikace v PHP
Srovnání HTML editorů
phpAdsNew - správa bannerů
AbcLinuxu pro programátory aneb od PHP k Javě

Odkazy a zdroje

PEAR
online dokumentace

Další články z této rubriky

LLVM a Clang – více než dobrá náhrada za GCC
Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
Reverzujeme ovladače pro USB HID zařízení
Linux: systémové volání splice()
Programování v jazyce Vala - základní prvky jazyka

Diskuse k tomuto článku

30.3.2005 00:25 doubleZ | skóre: 24 | blog: smazano
Rozbalit Rozbalit vše Error
Odpovědět | Sbalit | Link | Blokovat | Admin
Tak clanek je velice zajimavy, nicmene dostavam ve Slackwaru 10.1 s dist balickem error PHP: Error parsing /etc/apache/php.ini on line 257

a nemuzu se ani prepnout do jineho modu, vsechno da failed, jako user i jako root...
30.3.2005 13:58 rane
Rozbalit Rozbalit vše Re: Error
ak prezradis co sa nachadza na riadku 257 v subore /etc/apache/php.ini tak by ti mozno aj niekto dokazal pomoct :)
Jiří Němec avatar 30.3.2005 00:47 Jiří Němec | skóre: 22 | blog: BluPix | Horní Smrčné
Rozbalit Rozbalit vše webhosting
Odpovědět | Sbalit | Link | Blokovat | Admin
Super článek. Jen se bojím instalace na webhostingu, snad o tom bude jeden z dalších dílů.

Kdysi jsem chtěl použít nějaký XML parser z pear a nakonec jsem to vzdal, mělo to moc závislostí. O tom instalátoru jsem tenkrát nevěděl.
Spock: "Logic, logic, logic. Logic is the beginning of wisdom, not the end.
30.3.2005 07:14 ondrej
Rozbalit Rozbalit vše framework?
Odpovědět | Sbalit | Link | Blokovat | Admin
Nazvat PEAR frameworkom je trochu silne. Je to len obycajne repozitory.
30.3.2005 11:48 Marek 'marx' Grác | skóre: 21 | blog: Paralelný blog | Brno / Bratislava
Rozbalit Rozbalit vše Re: framework?
Podľa mňa to nie je len repository. Repository je cpan, kde každý pridá čo chce a nakoniec je tam bordel. Tak zlé to zatiaľ v PEARe nie je :) Existujú isté postupy, ktorými sa rozhoduje, či tam pridať package, alebo nie. Aj keď uznávam, že od skutočného frameworku to má ešte ďaleko.
30.3.2005 12:15 Pavel 'lingeek' Szalbot | skóre: 54 | Třinec
Rozbalit Rozbalit vše Re: framework?
Co je podle tebe skutečný framework?
Math, as Barbie says, is hard.
30.3.2005 21:39 Marek 'marx' Grác | skóre: 21 | blog: Paralelný blog | Brno / Bratislava
Rozbalit Rozbalit vše Re: framework?
niečo, čo je viac previazané a hlavne sa podobné veci robia vždy rovnako. Problém/výhoda PEARu je, že poskytuje často viac možných riešení rovnakej veci akurát z rôznych pohľadov. Plus je, že je zrejmá snaha o to, aby tam jeden pohľad na jednu vec nebol zastúpený miliónkrát (a la CPAN). Ako framework sa mi celkom pozdával struts a čo som len počul tak aj zope (ale ten som sám nepoužíval).
30.3.2005 14:14 morf
Rozbalit Rozbalit vše Zkusenosti s PEAR
Odpovědět | Sbalit | Link | Blokovat | Admin
S PEAR pracuji uz neco pres rok, a je to vyborny doplnek k PHP. Namatkou bych zminil:

DB objektove orientovana (OO) abstrakcni vrstva pro spoustu databazi, z mnoha funkcemi HTML_Template_Flexy OO sablonovaci system, ktery podporuje v sablonach napr. i syntaxy Smarty XML_Parser parser XML, doporucuji vsak pouzivat Simple XML pokud mate PHP5 Auth jednoducha trida pro autorizaci uzivatelu z databaze

a dalsi a dalsi a dalsi :-)

Urcite je o co stat a rozvijet. Hodne uspechu s PEARem.
30.3.2005 14:54 manas456 | blog: sem_manas
Rozbalit Rozbalit vše PEAR je lamoidni masturbace
Odpovědět | Sbalit | Link | Blokovat | Admin
Tak nevím, jestli jsem se svým názorem osamocen, ale PEAR jsem zkoušel od jeho slavného spuštění asi třikrát a vždycky to skončilo neúspěchem.

Testování vždy dopadlo tak, že se ukázalo, že celé toto "repository" je jenom přebubřelá sada nic nedělajících knihoven. Snaha o velkou objektovost zatím vedla jenom k přemíře závislostí všeho na všem a ke spoustě nic nedělajících funkcí.

Pokud byla u nějakého projektu snaha PEAR používat, vždy se narazilo na nějaký problém, který byl řešitelný jen - instalací jiné kvalitní knihovny mimo PEAR - použitím nějaké nízkoúrovňové extension - napsáním vlastní funčknosti

Nemůžu vyloučit, že někdo PEAR rutinně používá, ale nám se to zatím nikdy neosvědčilo.

Bohužel měřit popularitu čehokoliv podle množství nadšených lidí kolem projektu je ve světě PHP velmi obtížné, protože mezi PHP programátory se vyskytuje velké množství nedouků, kteří jsou ochotni lepit cokoliv jakkoliv a nadchnou se pro každou blbost.
30.3.2005 17:30 Ladislav Hagara | skóre: 102 | blog: Ride the Raven
Rozbalit Rozbalit vše Source Mage a PEAR
Odpovědět | Sbalit | Link | Blokovat | Admin
V Source Mage máme v grimoire sekci php-pear. S PEAR balíčky lze proto pracovat stejně jako s jinými aplikacemi (spells). Nainstalovat "cast PEAR-Net_Whois", odinstalovat "dispel PEAR-Net_Whois".
25.10.2005 14:46 Krakonoš | skóre: 17 | Nová Ves v Horách
Rozbalit Rozbalit vše Re: PEAR - I
Odpovědět | Sbalit | Link | Blokovat | Admin
Je 'preferred_state' jak je psano v textu, nikoliv preffered_state jak je psano v prikladu ;)..Jinak dobre, jenom bych si predstavoval neco jako seznam nejuzitecnejsich (nejpouzivanejsich) balicku a jejich strucne vyuziti a odkaz na nejaky manual :)..Jinak dobre

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.