Hlavní navigace

PEAR - framework pro PHP

26. 6. 2003
Doba čtení: 3 minuty

Sdílet

Máte rádi hrušky, hruškovici nebo používáte PHP? Určitě musíte zkusit tenhle skvělý framework :) Článek se pokusí zlehka představit PEAR. Na několika příkládcích také ukáže jeho jednoduchost a použitelnost.

Malý historický výlet

Jak už to tak bývá, někomu se nelíbila roztříštěnost přístupu PHP k databázím. A protože to nebyl lenoch, začal to řešit po svém. Ten někdo byl Stig Bakken a údajně to bylo v pondělí 22. listopadu 1999.

Vývoj se nezastavil, projekt pokračuje vesele dál. V současné době je k dispozici už 177 balíků řešící nejen databáze, ale také např. logování, autentizaci, emailování a mnoho dalšího. Zajímavé je také, že PEAR je oficiální částí PHP od verze 4.3.0.

Název a struktura

Každý správný projekt musí mít jednoduché a snadno zapamatovatelné jméno. Název PEAR to naprosto splňuje. Podle doporučení se vyslovuje jako ono známé ovoce (možná je autor fanouškem hruškového kompotu :). Oficiální název je PHP Extension and Application Repository. (Pozn.: ta hruška a kapalné produkty z ní jsou ale mnohem sympatičtější.)

Projekt kromě kódu samotného obsahuje také další vymoženosti, které zvyšují jeho i tak velkou hodnotu.

  • Systém pro správu a distribuci kódu.
  • Normy pro vývoj. Začínají odsazováním, pokračují přes definice a volání funkcí,… a končí jmennými konvencemi. (Není to tedy projekt typu nahoře huj a vespod fuj, procházet a popř. měnit zdrojáky je radost sama)
  • PHP Foundation Classes (PFC). Zde se autoři zaměřují na kvalitu, kompatibilitu … Hlavní dopad je tedy distribuce balíků ve verzi STABLE – stálé API, vyladěná rychlost, může záviset pouze na STABLE balících atd.
  • PHP Extension Code Library (PECL) anglicky [pickle], česky asi [pikl](kujme pikle?!). Rozšiřování Céčkem, k nastudování za domácí úkol.
  • Poslední částí je bugtrag, mailing list, web, mirrory.

Připoutejte se, odlétáme

Pro začátek něco běžného, co třeba unifikovaný přístup k databázím prostřednictvím balíku PEAR::DB?

  1. require_once 'DB.php';
  2. $db = DB::connect("pgsql://username:password@localhost/sazka");
  3. if (DB::isError($db)) {
        die ($db->getMessage());
     }
  4. $result = $db->query("select * from ne");
  5. if(DB::isError($result)){
        die ($result->getMessage());
     }
  6. while ($row = $result->fetchRow()){
        echo $row[0]."<br>\n";
     }
  7. $db->disconnect();

Uznávám, že ten příklad je hodně „trivoš“, ale na vysvětlení bude stačit. Aspoň je vidět ta jednoduchost.

Řádek 1 snad ani nemá cenu popisovat. Include souboru zvládne i cvičená opice.

Řádek 2 už začíná být zajímavější. Na začátku je uveden ovladač, v tomto případě se tedy budu připojovat k Postgresu. Na výběr jsou samozřejmě i další možnosti, z běžných lze jmenovat MySQL, Oracle, ODBC, SQL Server a ještě pár dalších. Následují login a heslo, počítač a název databáze. (Trochu mi to připomíná Javu, tady se to ale všechno stihne v jednom příkazu.)

Poskočíme na řádek 3. Místo try/catch zde použijeme if a otestujeme případnou chybu, zde selhání přístupu k databázi.

Na řádku 4 se konečně provede dotaz. (Konkrétně se vyberou všechna nedělní losování sazky od roku 1957).

Na pětce opět odchytáváme chybu.

Pokud dotaz proběhl v pořádku, můžeme výsledek začít zpracovávat. Řádek 6 vypíše vždy první pole. Správnější by asi bylo použití hashe, což se dá snadno zařídit. Stačí provést tuto změnu: …->fetchRow(DB_FET­CHMODE_ASSOC) a můžeme vesele používat echo $row[‚rok‘]…

Malá chvilka logování

Další krátká ukázka se bude týkat komponenty pro logování. Možností, kam logovat je několikero, mimo jiné soubor, databáze (samozřejmě používá předchozí), syslog a další. Pro jednoduchost uvedu jenom logování do souboru.

  1. require_once "Log.php";
  2. $log = &Log::singleton('file', '/tmp/log.txt', '--POKUS--');
  3. $log->("ahoj");
  4. $log->log("nazdar",PEAR_LOG_DEBUG);

  Výstup
  Jun 17 23:35:48 --POKUS-- [info] ahoj
  Jun 17 23:35:48 --POKUS-- [debug] nazdar

Tak tomu říkám pohoda. Zařídit logování na dvou řádcích.

Řádek 1 snad ani nepotřebuje komentář.

Na řádku 2 vytvářím kopii objektu. Při změně na …singleton(‚sys­log‘) se hlášení najednou objevují ve /var/log/syslog :) atd.

root_podpora

A dál už jenom používám a loguju a loguju… Závažnost lze měnit od debug až po emerg, celkem 8 stavů.

Jdeme do finále

V předchozím jsem se pokusil pro neznalé aspoň trochu objevit framework PEAR. A úplným závěrem ještě pár bodíků, proč používat zrovna tenhle softík.

  • slušně napsaný kód
  • slušně dokumentovaný
  • zdá se být v dynamickém vývoji
  • a ta cena :)

Byl pro vás článek přínosný?

Autor článku