Príklady skriptov CGI

linux_server.jpg V pre­doš­lej čas­ti sme vy­svet­li­li, čo sú to skrip­ty CGI, ako fun­gu­jú, a uká­za­li sme si, ako nas­ta­viť pros­tre­die webo­vé­ho HTTP server­a Apac­he na prá­cu so skrip­ta­mi CGI. Ten­to­raz si na vzo­ro­vých prík­la­doch uká­že­me, ako na­pí­sať a prak­tic­ky spus­tiť a od­la­diť jed­no­duc­hé skrip­ty CGI.

Zá­sa­dy tvor­by skrip­tu CGI
Tak ako v kaž­dom prog­ra­mo­va­ní aj v tvor­be skrip­tov CGI pla­tia ur­či­té všeo­bec­ne plat­né zá­sa­dy. Sú to tie­to:
- Ana­lý­za čin­nos­ti skrip­tu
Je dob­ré, ak sa ana­lý­ze čin­nos­ti prog­ra­mu ve­nu­je dos­ta­toč­ný čas. Pre­dí­de­me tým rôz­nym prek­va­pe­niam pri je­ho čin­nos­ti, prí­pad­ne skla­ma­niam klien­ta, že po­ža­do­val inú čin­nosť.
- Voľ­ba prog­ra­mo­va­cie­ho pros­tried­ku
Už sme spo­me­nu­li, že skrip­ty CGI mož­no na­pí­sať v po­dsta­te v ľu­bo­voľ­nom „kla­sic­kom“ prog­ra­mo­va­com ja­zy­ku či pria­mo v pros­tre­dí shel­lu. Ako naj­čas­tej­šie sa po­uží­va­jú nás­tro­je, ako je Perl, Pyt­hon, PHP a C.
- Test prog­ra­mu (skrip­tu) v lo­kál­nom pros­tre­dí
Ak neod­skú­ša­me prog­ram v lo­kál­nom pros­tre­dí, ne­bu­de­me ve­dieť, či vznik­nu­té chy­by sa vy­tvá­ra­jú pri pre­no­se pro­to­ko­lom HTTP ale­bo už pri be­hu skrip­tu. Prá­ve test v lo­kál­nom pros­tre­dí eli­mi­nu­je zdro­je chýb.
- Nas­ta­ve­nie prís­tu­po­vých práv
Ok­rem tvor­by skrip­tu je ne­vyh­nut­né ve­no­vať po­zor­nosť bez­peč­nos­ti. V dneš­nej do­be si ne­mô­že­me do­vo­liť, aby ne­ja­ký „ne­nec­ha­vec“ zneu­ží­val na­še skrip­ty a zís­kal tak prís­tup do sys­té­mu.
- Od­la­de­nie chýb (sys­té­mo­vých aj koz­me­tic­kých)
Je dô­le­ži­té, aby prog­ram nie­len dob­re fun­go­val, ale aj dob­re vy­ze­ral. Nas­ta­ve­nie správ­nych fa­rieb, for­má­to­va­nie vý­stup­ných textov či umož­ne­nie ich tla­če na tla­čiar­ni je ta­kis­to dô­le­ži­tá sú­časť prog­ra­mo­va­nia (tú­to časť mla­dí prog­ra­má­to­ri, žiaľ, čas­to opo­mí­na­jú).
- Na­sa­de­nie do os­trej pre­vád­zky
A na­ko­niec si všet­ko ove­rí­me v sku­toč­nej čin­nos­ti.

Aj nap­riek uve­de­ným spo­loč­ným zá­sa­dám tvor­by či prog­ra­mo­va­nia skrip­tov CGI pred­sa len exis­tu­jú dva hlav­né roz­die­ly med­zi „kla­sic­kým“ a CGI prog­ra­mo­va­ním. Po pr­vé, všet­ky vý­stu­py skrip­tu CGI by ma­la pred­chád­zať tak­zva­ná hla­vič­ka MI­ME. Je to v po­dsta­te prí­kaz HTTP (tag), kto­rý klien­tske­mu preh­lia­da­ču ho­vo­rí, o aký typ ob­sa­hu ide. Veľ­mi čas­to hla­vič­ka MI­ME ob­sa­hu­je to­to:

Con­tent-ty­pe: text/html 

Po dru­hé, vý­stup skrip­tu CGI mu­sí byť vy­tvo­re­ný (vy­ge­ne­ro­va­ný) v ja­zy­ku HTML ale­bo vo for­má­te, kto­ré­mu inter­ne­to­vý preh­lia­dač ro­zu­mie. Ta­kým prík­la­dom vý­stu­pu mô­že byť aj ob­rá­zok (naj­čas­tej­šie vy­ge­ne­ro­va­ný graf), text a po­dob­ne.

Náš pr­vý skript CGI
Pri tom­to prík­la­de po­uži­je­me prog­ra­mo­va­cí nás­troj ja­zy­ka Perl. Ne­boj­te sa, ne­bu­de­me po­tre­bo­vať ni­ja­ké ve­do­mos­ti, prík­la­du po­ro­zu­mie­me in­tui­tív­ne (ako­že inak, však?). Nas­le­du­jú­ci prík­lad je veľ­mi jed­no­duc­hý. Na ob­ra­zov­ke preh­lia­da­ča sa zob­ra­zí iba je­den je­di­ný ria­dok.

Zdro­jo­vý kód skrip­tu
Spus­ťme te­da vhod­ný texto­vý edi­tor a na­píš­me tie­to riad­ky zdro­jo­vé­ho kó­du skrip­tu:

#!/usr/bin/perl
print "Con­tent-ty­pe: text/html\n\n";
print "To­to je pr­vy CGI skript."; 
print "\n";
vPr­vý ria­dok ho­vo­rí, že na vy­ko­na­nie toh­to prog­ra­mu tre­ba po­užiť ja­zyk Perl, kto­ré­ho bi­nár­ny kód sa nac­hád­za v ces­te /usr/bin/perl. Dru­hý ria­dok je už spo­me­nu­tá hla­vič­ka MI­ME, nas­le­do­va­ná dvo­ma no­vý­mi riad­ka­mi (pa­ra­me­ter \n v ja­zy­ku Perl spô­so­bí prec­hod na no­vý ria­dok, dva pa­ra­met­re zna­čia dva no­vé riad­ky). Tie­to riad­ky od­de­ľu­jú hla­vič­ku skrip­tu od te­la skrip­tu, kto­ré tvo­rí tre­tí ria­dok prog­ra­mu. Ten na ob­ra­zov­ku po­čí­ta­ča za­bez­pe­čí vý­pis textu

To­to je pr­vy CGI skript. 

A na zá­ver vlo­ží­me opäť no­vý ria­dok. No a to je všet­ko. Tak­to na­pí­sa­ný skript ulo­ží­me do ad­re­sá­ra, kto­rý sme v kon­fi­gu­rač­nom sú­bo­re httpd.conf ur­či­li ako ad­re­sár na skrip­ty CGI, te­da do /var/www/cgi-bin. Po­me­nu­je­me ho nap­rík­lad pr­vy.pl.

Spus­ti­teľ­nosť a skúš­ka
Ako ďal­ší krok mu­sí­me za­bez­pe­čiť, aby bol skript spus­ti­teľ­ný. To vy­ko­ná­me nas­ta­ve­ním at­ri­bú­tu execu­te v prá­vach sú­bo­ru nap­rík­lad prí­ka­zom

 [root@gmrs cgi/bin]# chmod 755 pr­vy.pl

Te­raz v zmys­le uve­de­ných zá­sad vy­skú­ša­me prog­ram v lo­kál­nom pros­tre­dí ope­rač­né­ho sys­té­mu. Prej­de­me do ad­re­sá­ra /var/www/cgi-bin a za­dá­me prí­kaz:

 [root@gmrs cgi/bin]# ./pr­vy.pl

Ak sme všet­ko uro­bi­li správ­ne, na ob­ra­zov­ke server­a sa zob­ra­zí vý­stup prog­ra­mu pr­vy.pl (obr. č. 1).

linux_prakticky OBR1.bmp
Obr. 1

Všim­ni­me si, že sa vy­pí­sa­la aj hla­vič­ka MI­ME Con­tent-ty­pe: text/html! To pre­to, že v zdro­jo­vom texte je uve­de­ný prí­kaz print a ten sa v kon­zo­lo­vom pros­tre­dí Per­lu vy­ko­ná­va bez ob­med­ze­ní, tak ako je. Keď te­raz spus­tí­me na klien­tskom po­čí­ta­či vhod­ný preh­lia­dač a za­dá­me ad­re­su k uve­de­né­mu sú­bo­ru, nap­rík­lad www.gmrsnm.edu.sk/cgi-bin/pr­vy.pl, v ok­ne preh­lia­da­ča sa zob­ra­zí vý­stup prog­ra­mu (obr. č. 2).

linux_prakticky OBR2.bmp
Obr. 2

Ten­to­raz sa už hla­vič­ka MI­ME ne­zob­ra­zi­la, ale je preh­lia­da­čom inter­pre­to­va­ná ako nas­ta­ve­nie zob­ra­ze­nia. Nes­mie­me za­bud­núť, že mu­sí­me uvád­zať me­no aj s prís­luš­nou prí­po­nou. Tre­ba po­zna­me­nať, že prí­po­na .pl je len ilus­tra­tív­na, aby nám bo­lo zrej­mé, že skript je na­pí­sa­ný v ja­zy­ku Perl. Spo­koj­ne by sa však sú­bor mo­hol na­zý­vať pr­vy.cgi. Je­ho spus­ti­teľ­nosť nie je zá­vis­lá od prí­po­ny (ako je to napr. v pros­tre­dí ope­rač­né­ho sys­té­mu MS Win­dows), ale od at­ri­bú­tu spus­ti­teľ­nos­ti, ne­zá­vis­lé­ho od prí­po­ny. Do­kon­ca by ten­to sú­bor ne­mu­sel mať ni­ja­kú prí­po­nu.

Pri nas­ta­vo­va­ní práv k sú­bo­ru mu­sí­me po­stu­po­vať opatr­ne. Naj­prv si mu­sí­me uve­do­miť, či sú­bor ná­ho­dou nep­ra­cu­je s iný­mi sú­bor­mi – či ich čí­ta, či do nich ne­za­pi­su­je a po­dob­ne. Tu by moh­li nas­tať kom­pli­ká­cie, pre­to­že by náš skript, kto­rý má ob­med­ze­né prá­va, mo­hol po­ža­do­vať prá­cu so sú­bo­rom, kto­rý po­tre­bu­je prá­va roo­ta. Ten­to prí­pad si uká­že­me prak­tic­ky nes­kôr.

Náš dru­hý skript

V tom­to prík­la­de uká­že­me, ako jed­no­duc­ho vy­pí­sať ob­sah pre­men­ných pros­tre­dia. Pre­men­né pros­tre­dia sú hod­no­ty, kto­ré sa po­uží­va­jú pri prá­ci po­čí­ta­ča. Asi naj­zná­mej­šia z nich je ces­ta, zná­ma aj z ope­rač­né­ho sys­té­mu MS DOS a MS Win­dows. V sys­té­me Li­nux však exis­tu­jú aj iné, nie me­nej dô­le­ži­té pre­men­né pros­tre­dia (an­glic­ky En­vi­ron­ment va­riab­les). Po­čas prie­be­hu skrip­tu CGI server a preh­lia­dač nas­ta­vu­jú pre­men­né pros­tre­dia, tak­že do­ká­žu po­tom nav­zá­jom ko­mu­ni­ko­vať. Nie­ke­dy je dob­ré ve­dieť, ako sú pre­men­né pros­tre­dia nas­ta­ve­né. Jed­no­duc­hý skript v ja­zy­ku Perl za­bez­pe­čí ich vý­pis do ok­na preh­lia­da­ča:

#!/usr/bin/perl
print "Con­tent-ty­pe: text/html\n\n";
fo­reach $key (keys %ENV) {

print "$key --> $ENV{$key}<br>";

} 

Keď ten­to skript spus­tí­me v ok­ne preh­lia­da­ča, dos­ta­ne­me for­má­to­va­ný vý­stup pre­men­ných (obr. č. 3).

linux_prakticky OBR3.bmp

Obr. 3

Už z po­hľa­du vi­dí­me, že sa zob­ra­zu­jú tak pre­men­né server­a, ako aj preh­lia­da­ča a spo­je­nia med­zi ni­mi.

Náš tre­tí skript
Ho­vo­ri­li sme, že vý­stup skrip­tu CGI by mal byť v tva­re HTML. O uve­de­ných prík­la­doch sa to jed­noz­nač­ne po­ve­dať ne­dá, veď aj pre­to ich vý­stu­py ne­ma­jú so strán­kou HTML ve­ľa spo­loč­né­ho. Up­rav­me te­da náš pr­vý skript tak, že ho „za­ba­lí­me“ do kó­du HTML:

#!/usr/bin/perl
print "Con­tent-ty­pe: text/html\n\n";
print "<HTML>";
print "<HEAD>";
print "<TIT­LE> Perlo­vy skript CGI</TIT­LE>";
print "</HEAD>";
print "<BO­DY>";
print "<hr>";
print "<H1><CEN­TER>To­to je dru­hy CGI skript v tva­re HTML. </CEN­TER> </H1>"; 
print "<hr>";
print "</BO­DY>";
print "</HTML>";

Pri­da­li sme pár jed­no­du­chých ta­gov ja­zy­ka HTML, kto­ré sfor­má­tu­jú text na ob­ra­zov­ke preh­lia­da­ča do po­dstat­ne kraj­šej po­do­by (obr. č. 4).

linux_prakticky OBR4.bmp
Obr. 4

To­to bo­li len ilus­tra­tív­ne prík­la­dy. Na­bu­dú­ce vy­tvo­rí­me skript, kto­rý už bu­de aj účel­ný.

Ďal­šie čas­ti >>

Zdroj: Infoware 3/2008



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Li­nux prak­tic­ky ako server úvod
Linux ako server je pomerne zložitá technológia. Jej výhodou je určitá modularita, keď sa nemusí nastaviť celý server naraz, ale postupne. čítať »
 
Syn­chro­ni­zá­cia ča­su v Li­nuxe
V predchádzajúcich dvoch častiach sme si ukázali, že Linux a všeobecne open source softvér sa nenachádza iba v serveroch a počítačových sieťach, ale aj v iných zariadeniach bežnej domácej potreby a v oblasti hobby. čítať »
 
Za­ria­de­nia za­lo­že­né na Li­nuxe
V predchádzajúcej časti sme si spomenuli definície nie - ktorých pojmov z oblasti nášho záujmu, teda Linuxu. Vysvetlili sme si, čo je to Open Source, Public Domain, proprietárny softvér a GNU GPL. Tentoraz ukážeme, ako sa tieto pojmy využívajú v praxi. čítať »
 
Po­jmy z ob­las­ti
Tentoraz na chvíľu trochu odbočíme od bezpečnosti Linuxu a jeho siete. V tejto neštandardnej časti seriálu sa mu budeme venovať len okrajovo. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí II.
V predchádzajúcej časti sme sa začali zaoberať bezpečnosťou bezdrôtových sietí. Poukázali sme na rôzne faktory zneužitia siete, podstatu rizika a vysvetlili sme základné prvky bezpečnosti. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí I.
V predchádzajúcich častiach sme sa venovali bezpečnosti linuxového servera. Riešili sme firewall, bezpečnosť prístupu na internet, zaoberali sme sa demilitarizovanou zónou a podobne. čítať »
 
Údr­žba lo­gov – kon­fi­gu­rá­cia log­ro­ta­te
V predchádzajúcej časti sme sa venovali rotácii logov. Vysvetlili sme princíp ukladania logov, spôsob, ako sa rotujú, a uviedli sme niečo o tom, čo a ako treba nastaviť čítať »
 
Údr­žba lo­gov – ro­tá­cia
V predošlej časti sme sa zaoberali spôsobom logovania informácií na iný alebo vzdialený počítač a ukázali sme, ako riešiť problém s logovaním uzavretých procesov pomocou chroot. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter