IPRO - PC Magazine Romania, Ianuarie 2003
SOLUȚII PENTRU PROGRAMATORII ȘI DESIGNERII WEB
Totul despre situri dinamice
Konstantin Klyagin
Începând din acest număr colaboratorul nostru din Ucraina, Konstantin Klyagin,
v-a pregătit o serie de articole despre crearea și întreținerea unui sit web
dinamic.
Începem cu câteva elemente introductive, apoi vom prezenta cea mai simplă pagină
web dinamică scrisă în SSI, vom descrie metodele de transmitere a informațiilor
prin formulare web și vom încheia cu un exemplu de script PHP.
Internetul e plin de informații. Aici se găsesc atât muzee dedicate lui Eminescu
și Pușchin, cât și concursul pentru cea mai bună imagine a pisicii făcută cu
scanner-ul. Nu mă crezi? Poftim: www.mihaieminescu.ro/,
www.pushkin.ru/, www.cat-scan.com/,
ca să nu spui că exagerez. Chiar se găsește orice. Uneori pare a fi un loc pentru
depozitat gunoiul din toată lumea, dar în realitate este o colecție de informații
de orice gen, fără granițe, și exact aspectul acesta îi atrage cel mai mult
pe oameni. Normal că într-un loc atât de mare se pot afla atât prostii cât și
lucruri extrem de utile și câteodată chiar vitale.
Nu voi părea un mare clarvăzător dacă spun că serviciul cel mai popular din
internet a fost și rămâne web-ul, între paginile căruia se poate rătăci atât
un începator în ale internetului cât și un profesionist căutând ceva de care
are nevoie. Web-ul se bazează pe HTML (Hypertext Markup Language), un limbaj
de reprezentare a informațiilor care prin avantajele conferite de simplitate,
portabilitate și legăturile hipertext, extrem de utile, a făcut ca internetul
să se dezvolte atât de repede și să aibă succes.
HTML-ul este un limbaj extraordinar de simplu. Ca să creezi cea mai simplă pagină
este destul să înveți doar câteva tag-uri (instrucțiuni). Apoi poți infrumuseța
pagina cu javascript-uri (se învață în câteva ore cel mult) și cascading style-sheet-uri,
care-ți permit să depășești limitele standard ale limbajului de bază, adică
ale HTML-ului, punând mai multe culori și descriind compartamentul unor elemente
în funcție de deplasarea mouse-ului, de exemplu. Totuși, deschizând ferestrele
și colorând regiunile și textele de pe ecran în culori diferite nu ajungi la
nivelul unui sit web care-și trăiește viața proprie, la care conținutul unei
pagini depinde de datele introduse anterior de vizitator sau de informații extrase
din baze de date, fișiere locale sau chiar din alte situri.
Există foarte multe moduri de a realiza conținut dinamic, atât cu ajutorul unor
programe scrise aproape în orice limbaj, cât și cu tehnologii create special
pentru asta. Este greșită ideea că e greu să devii programator web. De altfel,
începutul este cel mai simplu. Evident că ne va trebui un server web. Deoarece
sunt adeptul convins al mișcării free software și având experiență în crearea
unor aplicații web destul de complexe, vă recomand Apache-ul, cel mai bun server
web din lume. Este un caz aproape unic: cel mai bun program este și cel mai
difuzat. Peste 60 la sută, după statistici, deci majoritatea siturilor care
găzduiesc diverse servicii utilizează serverul de web Apache.
Apache-ul apare în toate distribuțiile de Linux. Alegeți-o pe oricare: Redhat,
SuSE, Mandrake, Slackware, Gentoo, Debian... le găsiți pretutindeni. Chiar dacă
în acest articol mă voi referi numai la Linux, există și versiuni pentru Windows
care seamănă cu cea de Linux foarte mult privind configurarea și utilizarea.
Cea mai simplă metodă de creare a paginilor cu conținut dinamic o întâlnim la
SSI (server-side includes). Acesta înlocuiește cuvinte cheie cu informațiile
dorite. Din păcate, SSI nu poate prelucra cereri cu parametri. Iată primul nostru
fișier cu conținut dinamic, index.shtml, pe care îl publicăm în directorul public_html/
din "home".
index.shtml
<html>
<b>Vrei</b> să știi ora actuală?
<b>Vezi</b> aici: <!--#echo var="DATE_LOCAL" -->,
iar în GMT acum este <!--#echo var="DATE_GMT" -->.
</html>
Aici, în loc de directivele speciale încadrate de comentarii standard HTML ("<!-"
și "-->>") va apărea ora exactă, cea locală și, respectiv, în format GMT.
Iar cu ajutorul tag-urilor <b> am accentuat verbele (cine știe, poate
hipnotiza pe cineva ;). Fișierul are extensia .shtml pentru că vrem ca Apache-ul
să îl prelucreze. Toate documentele web publicate în contul unui utilizator
pot fi vizualizate la următoarea adresă: http://localhost/~<numele contului>.
Astfel, dacă lucrăm sub contul ipotetic konst, URL-ul exemplului nostru va fi:
http://localhost/~konst/.
Respectiv, din exterior în loc de "localhost" se va pune numele domeniului calculatorului.
Voila! Pagina din statică a devenit "vie" - de fiecare dată când o descarcăm
ne arată ora exactă. Minune? Încă nu, căci cele adevărate doar urmează.
CGI
Special pentru conectarea dintre un server web și programele care deservesc
solicitările a fost inventată o interfață standard - CGI (common gateway interface),
care permite ca programele să fie lansate și controlate de către serverul respectiv.
De asemenea, nu este obligatoriu să folosești biblioteci speciale, și de aceea
programele pentru web pot fi scrise în orice limbaj.
Nu ne vom complica cu instrumentele serioase cum ar fi C/C++, Java sau Perl,
ci vom scrie un program care folosește standardul CGI în shell (analogul limbajului
fișierelor .bat din DOS și Windows, însă mult mai avansat).
numbers.sh
#!/bin/sh
IFS="&"
for i in $QUERY_STRING; do
if test `echo "$i" | grep ^n=`; then
n=`echo "$i" | awk '{ print substr($0, 3) }'`
elif test `echo "$i" | grep ^msg=`; then
msg=`echo "$i" | awk '{ print substr($0, 5) }'`
fi
done
actual=$(($n))
anterior=$(($actual-1))
urmator=$(($actual+1))
cat <<EOF
Content-type: text/html
<html>
<center>
Numărul actual este <b>$actual</b>.
EOF
if test ! -z "$msg"; then echo "Ultima dată ați ales <b>$msg</b>.";
fi
cat <<EOF
<br>
<a href="numbers.sh?n= ${anterior}&msg=anterior">Anterior<a>
<a href="numbers.sh?n= ${urmator}&msg=urmator">Următor<a>
</center>
</html>
EOF
Publicăm fișierul în directorul cgi-bin/ din "home".
Metode de transmitere a parametrilor: GET
Pe pagină, apăsând pe link-uri vedem numărul care crește sau se micșorează în
funcție de ce am ales. Fiți atenți că de fiecare dată script-ul se referă la
sine transmitând parametrii după semnul "?" în URL. Fiecare parametru constă
din nume și valoare, separate de semnul "&". Această metodă de transmitere
a parametrilor în URL se numește GET. În acest caz programul primește parametrii
prin variabila de mediu cu numele standard QUERY_STRING, care de fapt nu este
singura care ne poate interesa. De exemplu, variabila HTTP_USER_AGENT conține
numele browser-ului folosit de vizitator, iar REMOTE_ADDR - adresa lui de IP.
Metode de transmitere a parametrilor: POST
A doua metodă de a transmite parametri se numește POST. Diferența apare atunci
când trebuie să transferi multă informație printr-un formular online. POST-ul
ne permite să transferăm cantități de informație mai serioase, fișiere sau texte
lungi, ca de exemplu, capitolele din "Capitalul" lui Marx. În această metodă
programul primește datele din unitatea standard de intrare ("stdin" în C, "cin"
în C++, s.a.m.d.). Formatul parametrilor însă rămâne la fel ca și la GET.
Diferența între cele două metode la nivelul unui program CGI se face de obicei
după valoarea din variabila de mediu REQUEST_TYPE, care conține cuvântul GET
sau POST în funcție de metoda folosită. În primul caz se citesc parametrii din
QUERY_STRING, iar în cel de-al doilea citim datele de la intrarea standard.
PHP
Pentru a ușura munca programatorilor, au fost scrise diverse biblioteci de funcții
și au fost inventate noi limbaje de programare. Poate cel mai eficient și, în
același timp, cel mai simplu dintre ele este PHP, un acronim recursiv pentru
"PHP: Hypertext Preprocessor".
Deci, prin ce se remarcă PHP-ul ăsta? Mai întâi, într-adevăr fascinant este
că toate funcțiile utilitare, inclusiv cele pentru legarea la baze de date,
sunt deja integrate în bibliotecile standard ale limbajului. Chiar dacă PHP
permite scrierea de aplicații mai avansate decât CGI-urile obișnuite, nu necesită
configurări speciale pentru ca script-urile să poata fi executate, spre deosebire
de CGI-uri.
Situl oficial al PHP-ului este http://www.php.net/.
Găsim aici atât un manual pentru începători cât și sfaturi, documentații avansate
și anunțurile unor evenimente mari din lumea programatorilor în acest limbaj.
De asemenea, lista cu toate funcțiile din limbaj se află la http://www.php.net/manual/.
În finalul acestui articol voi prezenta un scurt exemplu de script PHP, urmând
ca în numerele viitoare să facem cunoștință cu metode avansate de programare
pentru web și cu sistemul de gestiune a bazelor de date MySQL.
Deci, cum scriem un document în PHP? Voi rescrie exemplul anterior, cu cifrele,
în acest limbaj.
numbers.php
<html>
<center>
Numărul actual este
<b><?php
if(empty($n)) $n = 0;
echo($n);
?></b>.
<?php
if(!empty($msg)) echo
("Ultima dată ați ales <b>$msg</b>.");
?>
<br>
<a href="numbers.php?n=<?= $n-1 ?>&msg=anterior">Anterior<a>
<a href="numbers.php?n=<?= $n+1 ?>&msg=urmator">Următor<a>
</center>
</html>
Codul scris în limbaj PHP și elementele de HTML se pot amesteca în orice ordine,
dacă includem codul PHP între "<?php", și "?>".
Observați variabila $n? Nu este o variabilă obișnuită, pentru că nu se definește
nicăieri în script. Aceasta e metoda de transmitere a unui parametru. Parametrii
se pot accesa astfel numai dacă variabila de configurare register_globals din
/etc/php.ini este setată "on". Altfel, parametrii CGI (am descris mai sus cele
două metode - POST și GET) se accesează cu ajutorul masivelor $HTTP_GET_VARS[]
și $HTTP_ POST_VARS[] în funcție de metoda de transmitere a parametrilor aleasă.
|