phpRS            

Dnešní datum: 10. 09. 2010   | Hlavní stránka | Seznam rubrik | Kniha návštěv |  
  Hlavní menu
Hlavní stránka
Seznam rubrik
Fotogalerie
Kniha návštěv
Stáhněte si
Odkazy
Ankety
TOP 15

  Reklama


  Rubriky

  Poslouchám na síti


Spusť přehrávač


Spusť přehrávač


  Informace o webu
Všehochuť aneb od každého trochu

Content © 1991-2010 Slávek Rydval

View Slávek Rydval's profile on LinkedIn

Vytvořeno pomocí phpRS a Texy!

RSS kanál

Odborné články

* API = Apache, PHP, InterBase - instalace, konfigurace a příklady použití

Vydáno dne 04. 08. 2005 (5646 přečtení)

Na slovo zadarmo nemusí slyšet jen lidé pohybující se okolo Linuxu, ale také zarputilí „oknaři“. A ačkoliv technologie uvedené v nadpisu pocházejí převážně z linuxového světa, ukážeme si, že je můžeme naprosto bez problémů používat i ve Windows.

Nepůjde jen o práci jednotlivých prvků, ale o vzájemné propojení tak, abychom mohli z webu přistupovat pomocí skriptu vytvořeného v PHP přímo k datům uložených na databázovém stroji InterBase. Heslo zní zdarma a kvalitně včetně zdrojových kódů. V textu jsou uvedeny adresy, odkud si můžete stáhnout aktuální verze programů. Pokud nechcete nic stahovat, pak se podívejte na přiložené CD, kde všechny produkty najdete a platí pro ně uvedený postup. Jestliže budete mít jinou verzi některého z produktů, je možné, že konfigurace bude probíhat trošku jinak, ale princip by měl zůstat stejný.

Budu předpokládat, že znáte alespoň základy PHP a SQL a InterBase vám také není zcela cizí. Server Apache znát není potřeba, pro náš účel stačí to, co bude napsáno.

Apache

Apache (A PAtCHy sErver) je HTTP server založený na kódech kdysi velmi oblíbeného serveru NCSA httpd 1.3. Od té doby (1995) byl kompletně přepsán a patří mezi nejpoužívanější servery na Internetu. Tolik teorie, pojďme si ale sednout k počítači a začít instalovat. Aktuální verzi Apache lze stáhnout z adresy http://httpd.apache.org/dist/binaries/win32/.

Výsledkem dosavadního snažení je spustitelný soubor, který nainstaluje Apache na váš počítač. Volitelně lze nainstalovat manuál a zdrojové kódy. A to je vlastně vše. V nabídce Start/Programs/Apache Web Server zvolte Start Apache as console app. Pokud vše proběhlo v pořádku, mělo by se objevit konzolové okno s informací, že server běží. Nyní spusťte prohlížeč a napište localhost případně 127.0.0.1 - měly by se zobrazit stránky s informacemi o serveru včetně odkazu na manuál (byl-li nainstalováni).

Jestliže se ale vyskytly problémy, ujistěte se, že v souboru hosts (ve Windows 2000 umístěn v adresáři %SYSTEMROOT%\system32\drivers\etc, kde %SYSTEMROOT% je proměnná systému určující adresář, ve kterém je nainstalován operační systém) je následující řádek:

127.0.0.1       localhost

PHP

Skriptovací jazyk PHP (Personal Home Page) běžící na straně serveru si napsal v roce 1994 pro svou potřebu Rasmus Lerdorf, protože se mu nelíbilo, jak neustálé spouštění interpretu Perlu zatěžuje WWW server. Jenže se to zalíbilo ostatním autorům, kteří chtěli další a další vylepšení, až z toho vznikl systém, jak jej známe dnes.

Instalace PHP není o nic složitější než instalace Apache. Aktuální verzi lze nalézt na českém zrcadle originálních stránek http://www.php.cz/downloads.php. Po stažení binární podoby (opět lze na stejné stránce získat i zdrojové kódy) ji rozbalte do libovolného adresáře (například C:\Program Files\PHP) a tam naleznete soubor php.ini-dist. Ten přejmenujte na php.ini a přesuňte do %SYSTEMROOT%. Nakonec je ještě potřeba tento soubor otevřít a přepsat hodnotu direktivy extension_dir na C:\Program Files\PHP. Tímto je instalace PHP hotova.

InterBase

InterBase je poměrně rychlý a kvalitní databázový server střední třídy založen na architektuře client/server podporující databáze o velikosti až několika gigabajtů. V loňském roce přešel pod hlavičku Open Source, přesněji IPL licenci, takže i v tomto případě to máme zdarma.

Produkt si lze stáhnout na adrese http://www.borland.com/interbase/downloads/, kde kromě vlastního serveru najdete i zdrojové kódy, IB Consoli pro správu databáze, Interbase Express pro programátory v Delphi a C++ Builderu a další software, který může být užitečný.

Po stažení souboru ib_server_6_0_1.zip (jedná se o klienta i server) jej rozbalte a spusťte setup.exe, který vás v několika málo krocích provede jednoduchou instalací. Proběhne-li vše v pořádku, server po instalaci již běží a lze jej používat. V Control Panelu přibude nová ikona s názvem Interbase Manager, kde můžete zvolit základní nastavení serveru.

Instalace je tedy hotova, ale ještě u Interbase chvíli zůstaneme a založíme si tabulku, abychom mohli odněkud získávat data. Předpokládám, že dokážete vytvořit databázi. V ní založte tabulku PERSON podle následujícího kódu a zadejte několik údajů:

CREATE TABLE PERSON
(
   NAME VARCHAR (20) NOT NULL,
   AGE SMALLINT CHECK (AGE IS NOT NULL AND AGE >= 0 AND AGE < 150)
)

Použijeme ji v závěrečném PHP skriptu.

Apache + PHP

Jednotlivé nástroje jsou nakonfigurovány a použitelné, pojďme je dát dohromady. Budu předpokládat, že jste Apache nainstalovali standardně do C:\Program Files\Apache a PHP je v C:\Program Files\PHP. Do souboru httpd.conf, který se nachází v C:\Program Files\Apache\conf\, je potřeba přidat následující tři řádky:

ScriptAlias /php/ "c:/program files/php/"
AddType application/x-httpd-php .php .phtml
Action application/x-httpd-php "/php/php.exe"

První zakládá alias /php/ a říká, kde je interpret tohoto jazyka umístěn (lomítka jsou správně), přesněji hlavní adresář. Druhý říká, které soubory s uvedenou příponou budou interpretu podstrkovány a nakonec jaký program se má spustit.

Ještě než soubor uložíte a zavřete, podívejte se, jak máte nastavenou direktivu DocumentRoot. Jedná se totiž o adresář, kde jsou umístěny vaše dokumenty. Jestliže chcete, můžete zvolit jiný.

<?
  PHPInfo();
?>

Do prohlížeče napište adresu localhost/první.php a je-li vše v pořádku, zobrazí se relativně velké množství informací o PHP.

PHP + Interbase

Nakonec dáme dohromady PHP a Interbase, čímž budeme mít vzhledem k předchozímu kroku zajištěn přistup z webu. V již jednou zmíněném souboru %SYSTEMROOT%\php.ini je mimo jiné následující řádek:

;extension=php_interbase.dll

Středník znamená, že je zakomentovaný. Proto jej odstraňte a přidejte cestu, kde jsou vaše rozšíření uložena, například takto:

extension=extensions/php_interbase.dll

(zde byly mezi některými verzemi PHP drobné změny v umístění, takže je potřeba se řídit dle vaší verze). Soubor uložte a je hotovo. Abychom vyzkoušeli, zda je vše v pořádku, vytvořte v adresáři, kde je již první.php, soubor interbase.php a v něm tento kód:

<HTML>
  <?PHP
    $host = "localhost:c:/temp/pokus.gdb";
    $username = "sysdba";
    $password = "masterkey";
    $dbh = ibase_pconnect ($host, $username, $password);
    $stmt = 'SELECT AVG (AGE) FROM PERSON';
    $sth = ibase_query ($dbh, $stmt);
    $row = ibase_fetch_row ($sth);
    print "Průměrný věk: ".$row[0];
    ibase_close ($dbh);
  ?>
</HTML>

A to je vlastně vše. Do prohlížeče napište adresu http://localhost/interbase.php a je-li vše v pořádku, dostanete průměrný věk osob ve vaší tabulce.

API: příklady použití

V minulém čísle jsme předvedli, jak lze spojit dohromady Apache, PHP a Intebase. Dneska si představíme několik postupů jak s uvedenými informacemi nakládat. Vše bude ukázáno na příkladu počítadla přístupů na webové stránky. Podobně jako v úvodním čísle, i zde předpokládám, že SQL, potažmo Interbase, a PHP vám není až tak úplně cizí.

Operace, kterou musíte provést vždy, chcete-li získat informace z databáze, je napojení se na ní. K tomu slouží funkce ibase_pconnect(), která potřebuje umístění databáze, uživatelské jméno a heslo. Po ukončení práce s databázi je potřeba se od databáze odpojit funkcí ibase_close():

      $host = "localhost:c:/ibdatabases/pocitadlo.gdb";
      $username = "sysdba";
      $password = "masterkey";
      $dbh  = ibase_pconnect ($host, $username, $password);
      if (!dbh)
      {
        echo "Spojení se nezdařilo.";
      } else {
        //zde pracujeme s daty...
        ibase_close ($dbh);
      }
    

Jak bylo uvedeno na začátku, ukážeme si, jak počítat přístupy k našim stránkám. První, co je k tomu zapotřebí, je mít v databázi odpovídající tabulky. Ty nám budou stačit dvě: v první budou uloženy informace o stránkách a v druhé zaznamenány jednotlivé přístupy (viz následující obrázek).

API - datový model

Vlastní tabulky vytvoříme následujícími příkazy (předpona PC je z Page Counter):

      CREATE TABLE PC_PAGE
      (
        IDPAGE    INTEGER NOT NULL,
        PAGENAME  VARCHAR(40) NOT NULL,
        FILENAME  VARCHAR(100) NOT NULL,
        CREATEDAT DATE NOT NULL,
        PRIMARY KEY (IDPAGE)
      )
      ;

      CREATE TABLE PC_ACCESS (
        IDACCESS INTEGER NOT NULL,
        IDPAGE INTEGER NOT NULL,
        ACCESSDAY    SMALLINT NOT NULL,
        ACCESSMONTH  SMALLINT NOT NULL,
        ACCESSYEAR   SMALLINT NOT NULL,
        ACCESSHOUR   SMALLINT NOT NULL,
        ACCESSMINUTE SMALLINT NOT NULL,
        ACCESSSECOND SMALLINT NOT NULL,
        PRIMARY KEY (IDACCESS)
      )
      ;

      ALTER TABLE PC_ACCESS ADD
        FOREIGN KEY (IDPAGE) REFERENCES PC_PAGE (IDPAGE)
        ON UPDATE CASCADE
        ON DELETE CASCADE
      ;

      CREATE GENERATOR G_PC_PAGE_ID;
      CREATE GENERATOR G_PC_ACCESS_ID;

      SET TERM ^;

      CREATE TRIGGER T_INSERT_PC_PAGE FOR PC_PAGE
      ACTIVE BEFORE INSERT POSITION 0
      AS BEGIN
        NEW.IDPAGE = GEN_ID (G_PC_PAGE_ID, 1);
        NEW.CREATEDAT = "NOW";
      END
      ^

      CREATE TRIGGER T_INSERT_PC_ACCESS FOR PC_ACCESS
      ACTIVE BEFORE INSERT POSITION 0
      AS BEGIN
        NEW.IDACCESS = GEN_ID (G_PC_ACCESS_ID, 1);
      END
      ^

      SET TERM ;^
   

 Nyní bychom mohli ukázat, jak vypsat, které stránky jsou v databázi zavedeny, případně počty přístupů na ně. Ovšem neuděláme to už jenom z toho důvodu, že jsme tabulky právě vytvořili a nic v nich není. Nejprve je naplníme z formuláře, který budeme moci spustit přímo z webu.

K tomu potřebujeme kód HTML souboru, který bude k zadávání nových dat sloužit. (Protože je v časopise k dispozici relativně málo místa, budu psát jen to nejnutnější, proto omluvte estetický dojem ze stránek. Stejně tak nebudu ošetřovat všechny možné chyby v PHP skriptech.) Jediné, co je potřeba zadat k identifikaci stránky, je její název a soubor, ve kterém se stránka nachází:

      <html>
        <body>
          <form action="insert.php" method=post>
            <table frame=box rules=none border=1 cellpadding=5>
              <tr>
                <td>Název stránky:</td>
                <td><input type=text name=pagename size=30></td>
              </tr>
              <tr>
                <td>Soubor:</td>
                <td><input type=text name=filename size=30></td>
              </tr>
              <tr>
                <td><input type=submit value="Vlož"></td>
                <td>&nbsp;</td>
              </tr>
            </table>
          </form>
        </body>
      </html>
    

Jako test na správně zadaná data lze s výhodou použít JavaScript, ale to teď není v našem zájmu. Po vyplnění dat a stisku tlačítka Vlož se spustí skript insert.php, který nedělá nic jiného, než že vloží zadané hodnoty do tabulky:

      $host = "localhost:c:/temp/pocitadlo.gdb";
      $username = "sysdba";
      $password = "masterkey";
      $dbh  = ibase_connect ($host, $username, $password);
      $dbq = ibase_query ($dbh, "INSERT INTO PC_PAGE (PAGENAME, FILENAME) ".
                                "VALUES ('$pagename', '$filename')");
      ibase_close ($dbh);
      echo "Data vložena.";
    

Jak k tomu vlastně došlo? Ve formuláři máme dvě vstupní pole pojmenovaná pagename a filename. Po odeslání dat jsou v PHP skriptu naplněné proměnné stejného jména hodnotami, které uživatel zadal. Díky tomu je můžeme použít při vkládání do tabulky.

Máme tedy hotovo vkládání informací o stránkách, takže můžeme bez větších problémů přejít přímo k počítání přístupů. V podstatě jde o stejný úkon, pouze se budou vkládat jiná data do jiné tabulky (konkrétně PC_ACCESS). Je potřeba si uvědomit, že vložení dat může proběhnout několika spůsoby. Nejjednodušší je takový, kdy každá stránka při volání PHP skriptu zná své IDPAGE, které získala při vložení do tabulky. V případě, že je nezná, je potřeba jej zjistit z tabulky PC_PAGE. To je však poměrně velká režie (i v případě existence indexu na sloupečku PAGENAME), proto zvolíme první metodu. Funkce, kterou budeme volat, dostane číslo stránky a na oplátku vloží odpovídající data do tabulky PC_ACCESS a vypíše počet přístupů k dané stránce:

      function WriteAccess ($ID)
      {
        $actdate = GetDate();

        $host = "localhost:c:/temp/pokus.gdb";
        $username = "sysdba";
        $password = "masterkey";
        $dbh = ibase_connect ($host, $username, $password);
        $day = $actdate [mday];
        $mon = $actdate [mon];
        $year = $actdate [year];
        $hour = $actdate [hours];
        $min = $actdate [minutes];
        $sec = $actdate [seconds];
        $dbq = ibase_query ($dbh, "INSERT INTO PC_ACCESS ".
               "(IDPAGE, ACCESSDAY, ACCESSMONTH, ACCESSYEAR, ".
               "ACCESSHOUR, ACCESSMINUTE, ACCESSSECOND) ".
               "VALUES ($ID, $day, $mon, $year, $hour, $min, $sec)");
        $dbq = ibase_query ($dbh, "SELECT COUNT (*) FROM PC_ACCESS ".
                                  "WHERE IDPAGE = $ID");
        $row  = ibase_fetch_row ($dbq);
        print $row[0]; //vypiseme pocet
        ibase_close ($dbh);
      }
    

Jen tak mimochodem je v uvedené funkci ukázán způsob zjišťování dat. Je vidět, že se nejedná o žádná velká kouzla. Každopádně se k tomu ještě vrátíme.

Funkce je hotová, ještě si ale musíme ukázat způsob, jak ji zavolat. Mějme proto v databázi uložené informace o nějaké stránce, jejíž IDPAGE bude například 5. Zavolání uvnitř stránky může vypadat například takto:

      Jste naším jubilejním návštěvníkem číslo <?WriteAccess (5)?>. 

Na řadu přichází slíbené zobrazování dat z databáze. Zřejmě nejdůležitější pro majitele stránek bude seznam všech stránek a počet přístupů na ně:

      $host = "localhost:c:/temp/pokus.gdb";
      $username = "sysdba";
      $password = "masterkey";
      $dbh  = ibase_connect ($host, $username, $password);
      $dbq = ibase_query ($dbh, "SELECT PAGENAME, COUNT (*) ".
                                "FROM PC_PAGE P, PC_ACCESS A ".
                                "WHERE P.IDPAGE = A.IDPAGE ".
                                "GROUP BY P.PAGENAME ");
      print '<table border="1">';
      print "<tr><td>Stránka</td><td>Přístupů</td></tr>";
      while ($row = ibase_fetch_object ($dbq))
      {
        print "<tr><td>";
        print $row->PAGENAME;
        print "</td><td>";
        print $row->COUNT;
        print "</td></tr>";
      }
      print "</table>";
      ibase_close ($dbh);
    

Závěr

Ukázali jsme si jednoduché ukázky použití PHP, jeho napojení na databázi InterBase a následné zobrazování dat v prohlížeči. Podobně, jako je provedeno vkládání do databáze, lze udělat úpravu dat (UPDATE) či jejich mazání (DELETE). Pokud chcete problematiku studovat více, než bylo uvedeno zde, doporučuji jednak (manuálové) stránky PHP (http://www.php.net) a jednak výbornou knihu Jirky Koska PHP - Tvorba interaktivních internetových aplikací, podrobný průvodce. Naleznete zde velké množství informací nejen o tvorbě databázových aplikací a formulářů.

V tabulce jsem uvedl všechny funkce, které lze při práci s InterBase používat.

Název funkce Popis
ibase_connect Otevře spojení s databází
ibase_pconnect Otevře perzistentní spojení s databází
ibase_close Ukončí spojení s databází
ibase_query Provede dotaz nad databází
ibase_fetch_row Vybere řádku z databáze
ibase_fetch_object Vybere objekt z databáze
ibase_field_info Vrátí infomace o poli
ibase_free_result Uvolní výslednou množinu
ibase_prepare Předpřipraví dotaz ke spouštění s parametry
ibase_execute Spustí předem připravený dotaz
ibase_trans Začátek transakce
ibase_commit Commit transakce
ibase_rollback Rollback transakce
ibase_free_query Uvolní paměť zabranou předpřipraveným dotazem
ibase_timefmt Nastaví formát typů timestamp, date a time které mohou být vráceny v dotazu
ibase_num_fields Vrátí počet sloupečku ve výsledné množině
ibase_errmsg Vrátí popis chyby

Tento článek byl napsán pro časopis Softwarové noviny 3 a 4/2001.

Upozornění: tento text neprošel redakční úpravou, takže je tak, jak byl napsán včetně případných chyb. Žádná část tohoto článku nesmí být použita bez předchozího souhlasu autora.

Seznam mých dalších článků je v tomto přehledu.



Související články:
Z Delphi na Interbasi (04.08.2005)
InterBase a UDF (04.08.2005)

[Akt. známka: 0 / Počet hlasů: 0] 1 2 3 4 5

Celý článek | Autor: Slávek Rydval | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek

  Čtenář
Jméno:
Heslo:


Registrace | Info
Zapomenuté heslo

  Vyhledávání

Hledej
na Nawebce!


Rozšířené vyhledávání

  Kalendář
<<  Září  >>
PoÚtStČtSoNe
  1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    

  Reklama


rkEdit Oracle Profiler
rkEdit Oracle Profiler