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ă.
|