Hlavná stránka · Diskusné Fórum · Pracovné príležitosti · Zoznam

 Main Menu
o Hlavná stránka
o Zoznam tém
o Zoznam
o Odporučte nás
o Užívatelia
o Vaše konto
o Pridaj článok
o Štatistiky
o Top 10

 Reklama


 Developer Zone's
o Internet
o Tools
o Linux
o CGI Zone
o ASP Zone
o ASP.net
o PHP Zone
o CSS Zone
o JavaScript
o MySQL
o WAP / WML
o WML / WMLScript
o XML / XHTML
o Tipy a triky
o Best of web
o WebServers
o WebDesign
o Grafika

 Servis
o Vyhľadávanie
o Fórum
o Workoffice
o Zoznam článkov
o Reklama
o Pridaj článok
o Pridaj novinku

Napíšte nám
Homepage Do favoritov

 LinkExpres
Interval.cz · Pc.sk
Builder.cz · Mobilmania
PCSvet.cz · Asp.cz
Webdnes · Živě.sk
Zoznam.sk · Atlas.sk
Inzine.sk · PHP.sk
Agent.sk · Lupa.cz
Code.box.sk · Root.cz
Pixel32 · Grafika.cz

 forum.developer.sk
o Fórum ::
o Markup languages
o Scriptové jazyky
o CGI
o PHP/MySQL
o Perl
o Grafika
o Webservery
o HTML Editory
o Browsery
o Bookmarx
o ASP
o Vytvor tému ::

 Pracovné príležitosti
o Ponúkate prácu?
o Hľadáte prácu?

 Autori developer.sk
o Martin Nemeček
o Sväťo Straka
o Jany Masaryk
o Jozef Murín

 
CGI / Perl [ 25. February 2000] - Svato_Straka
Jednoduché textové počítadlo - 10. časť CGI
Určite ste si už na mnohých stránkach všimli počítadlá prístupov. Môžu byť rôzne - od vyčačkaných nevkusných obrovských pestrofarebných oháv až po strohé obyčajné textové.



A práve na tie druhé - podstatne vkusnejšie - sa pozrieme a ukážeme si, ako v Perli takéto jednoduché počítadlo vytvoriť.

Takže ozrejmime si, ako bude naše počítadlo fungovať. Potrebujeme, aby sa hodnota počítadla zvýšila vždy pri prístupe k stránke. Takže najjednoduchšie sa tu javí použitie SSI direktívy, ktorá vždy spustí skript, ktorý zistí aktuálny stav počítadla a zvýši ho o 1. druhou možnosťou je volať priamo CGI skript, ktorý načíta stránku a vloží do nej hodnotu počítadla. Ukážeme si obe možnosti, pri čom počet prístupov budeme zaznamenávať v textovom súbore.

Počítadlo - SSI verzia

Pre našu ukážku si vytvoríme jednoduchú stránku, do ktorej pomocou SSI direktívy vložíme volanie na skript count1.cgi. Táto stránka môže vyzerať nasledovne:
<HTML>
<HEAD>
<TITLE>Jednoduche pocitadlo</TITLE>
</HEAD>
<BODY>
Počet prístupov k stránke: <!--</BODY>
</HTML>

Budeme už potrebovať len dva súbory. Jeden s aktuálnym stavom počítadla. Nazveme si ho stav1.txt. Druhým bude samotný skript, ktorý pri svojom zavolaní otvorí súbor stav1.txt, prečíta z neho stav počítadla, zvýši ho o 1 a zapíše naspäť. Takýto skript môže vyzerať nasledovne:

$subor = $ENV{DOCUMENT_ROOT} . "/stav1.txt";

open(STAV, $subor);
$stav = <STAV>;
close(STAV);

$stav++;

open(ZAPIS, ">".$subor);
print ZAPIS $stav;
close(ZAPIS);

print "Content-type: text/htmlnn";
print $stav;

Tu je vysvetlenie ku skriptu. Uložíme si cestu k súboru i s jeho názvom do premennej $subor. Tento súbor pomocou príkazu open otvoríme, pri čom dostane symbolické meno STAV. Toto symbolické meno sa v Perli nazýva ovládač súboru (z anglického file handle). S jeho pomocou môžete pracovať so súborom bez toho, aby ste vedeli kde je na disku v skutočnosti umiestnený atď. Pokým nezadáte pri otváraní súboru spôsob, akým sa má k súboru pristupovať, bude daný súbor otvorený len pre čítanie.

V ďalšom kroku načítame obsah súboru so premennej $stav. K tomu, aby bola táto operácia úspešná, musí sa daná hodnota nachádzať na prvom riadku v nami tvorenom súbore. Perl totiž rozoznáva kontext, v akom sa k dátam pristupuje. Pokým k ovládaču súboru pristupujete v skalárnom kontexte, prečíta vám z otvoreného súboru aktuálny riadok. Pokým explicitne neurčíte číslo riadku, prečíta sa prvý riadok (viď náš príklad). Pokým však budete s ovládačom súboru pracovať v zoznamovom kontexte (@subor = <SUBOR>), načíta sa do poľa obsah celého súboru.

V ďalšom kroku súbor pomocou príkazu close uzavrieme. Toto je krok, na ktorý by sa nemalo zabúdať, všetci vieme čo robí množstvo naotváraných súborov so systémom.

Nasleduje zvýšenie stavu počítadla: $stav++;. Operátor ++ je operátorom inkrementu - spôsobí zvýšenie hodnoty premennej o 1.

V ďalšom úseku opäť otvoríme súbor so stavom počítadla - tentokrát pre zápis, čo je určené pri názve súboru: ">".$subor. Operátor > presmeruje výstup všetkých príkazov, ktoré svoj výstup posielajú na daný ovládač súboru, do nami otvoreného súboru. Ďalší riadok, print ZAPIS $stav;, posiela výstup príkazu print - hodnotu premennej $stav - na ovládač ZAPIS, ktorý je presmerovaný do súboru, ktorého názov s kompletnou cestou je uložený v premennej $subor.

Po uzavretí súboru už nasleduje len výpis čiastočnej http hlavičky a aktuálneho stavu počítadla.

Príklad v praxi

Počítadlo ako priamo volaný CGI skript

Pokým nemôžete na svojich stránkach použiť SSI, budete musieť zvoliť trochu iný prístup - a to zavolať CGI skript ktorý zobrazí požadovanú stránku a na potrebné miesto vloží aktuálny stav počítadla. Riešenie je možno jednoduchšie ako by sa mohlo zdať. Tvorí ho mierne upravený horeuvedený skript a modifikovaná stránka, v ktorej bude vaše počítadlo.

Stránku s počítadlom je potrebné upraviť takým spôsobom, že na miesto, kde má vaša okrasa figurovať, uvediete nejaký reťazec, ktorý bude skriptom nahradený za aktuálnu hodnotu počítadla. Z toho vyplýva, že by to mal byť reťazec, ktorý sa inak v stránke nevyskytuje - jedine že by ste chceli použiť počítadlo viackrát.

Povedzme teda, že naša stránka bude obsahovať na mieste počítadla reťazec CNTR (pozor na veľkosť písmen!):
<HTML>
... stránka...
<P>
Počet prístupov k stránke: CNTR
<P>
... dokončenie stránky...
</HTML>

Uložíme si túto stránku povedzme pod menom counter.html. Stav počítadla budeme ukladať v súbore s názvom stav2.txt. Tu je teda upravený skript:

$stranka = $ENV{DOCUMENT_ROOT} . "/counter.html";
$pocitadlo = $ENV{DOCUMENT_ROOT} . "/stav2.txt";

open(STAV, $pocitadlo);
$stav = <STAV>;
close(STAV);

$stav++;

open(ZAPIS, ">".$pocitadlo);
print ZAPIS $stav;
close(ZAPIS);

print "Content-type: text/htmlnn";

open(STRANKA, $stranka);
while(<STRANKA>) {
   if(/CNTR/) {
      s/CNTR/$stav/;
   }
   print;
}
close(STRANKA);

Ako tento skript funguje by ste už mali vedieť. V každom prípade si ho môžete pozieť v praxi.

Všetky vaše komentáre, pripomienky a návrhy očakávam na mojom maili: straka@developer.sk.

 
 Príslušné odkazy k téme
Viac o téme: CGI / Perl | Iné články od: Admin | Pošli komentár | Stránka vhodná na tlač width=15 height=11  Pošli tento článok priateľovi, známemu width=15 height=11


Najčítanejšie články CGI / Perl:
Čo je to CGI? - Úvod do CGI

Ďalšie články v rubrike CGI / Perl:

 

"Jednoduché textové počítadlo - 10. časť CGI" | Login / vytvor konto | 0 Komentárov
Prah
Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.



Autorské práva:   ©1999 - 2001 Developer Zone [developer@developer.sk]

Všetky články sú vlastníctvom autorov Developer Zone. Všetky práva vyhradené. Stránky Developer.sk sú vytvorené pomocou PHP-Nuke.
Odkazy na nové články je možné preberať pomocou:Backend.php.