Sunteți pe pagina 1din 213

UNIVERSITATEA DIN BACU

FACULTATEA DE INGINERIE

POPA SORIN EUGEN

TEHNOLOGII INTERNET
note de curs i aplicaii
pentru studenii Facultii de Inginerie

2007
Cuvnt nainte,

Volumul "Tehnologii Internet" se adreseaz studenilor de la


specializarea Tehnologia informaiei anul III i cuprinde att cursul ct i
lucrrile de laborator pentru disciplina cu acelai nume.

Cartea este structurat pe dou pri, prima, de noiuni teoretice,


conine 6 capitole care ncearc s acopere, ct mai succint, o parte din
ntinsul domeniul al tehnologiilor utilizate pentru a crea, ntreine,
administra, securiza i, nu n ultimul rnd, a utiliza Internetul. Partea a
doua conine 12 lucrri de laborator n care studenii vor experimenta
mare parte din ceea ce este prezentat n curs.

Primul capitol, "Conceptele Internetului" face o descriere


succint a noiunii de internet, cu descrierea modelului de referin OSI
care st la baza dezvoltrii reelelor de calculatoare, implicit a
internetului. Apoi continu cu clasificarea tehnologiilor Internet:
hardware, software,d e comunicaii i Dataware.
Al doilea capitol, intitulat "Servicii Internet sub FreeBSD"
prezint ore scurt istoria i dezvoltarea sistemului FreeBSD, care este un
sistem de operare open source, bazat de UNIX, i la ora actial,
considerat ca fiind cel mai sigur, stabil i rapid. Tot aici se prezint i
configurarea unui server multifuncional: mail, ftp, web i baze de date.

Capitolul al treilea trateaz tehnologiile Internet din punctul de


vedere al sistemului de operare Windows, prezentnd procedurile i
modul de configurare a acestuia ca server cu aceleai roluri ca i cel sub
FreeBSD.

Capitolul patru, denumit generic "Protocoale i servicii" face o


prezentare i descriere succint a principalelor protocoale utilizate n
Internet, i anume: DNS, SSH, telnet, http. FTP, SMTP, POP, SSL i
TLS.

Capitolul cinic, cel mai mare, intitulat Limbaje de programare i


tehnologii WEB" prezint principalele limbaje de programare utilizate n
prezent pentru realizarea paginilor Web, cu o prezentare mai detaliat a
urmtoarelor limbaje: html, css, AMP = Apache + MySQL + PHP,
javascript.

i
Ultimul capitol, al aselea, "Crearea paginilor Web cu
Dreamweaver" face o scurt introducere n unul dintre cele mai utilizate
programe de proiectare a paginilor Web, i anume Adobe Dreamweaver.

A doua parte a volumului conine 12e lucrri practice de laborator


n care se vor experimenta i verifica noiunile i instruciunile predate n
cadrul cursului. Laboratoarele au un caracter evolutiv i repetitiv,
studenii fiind nevoii s repete la urmtoarea lucrare comenzile nvate
n lucrrile anterioare.
Aceste lucrri au titluri sugestive, i anume:
Lucrarea 1 Instalarea i configurarea serverului Apache, MySQL i
PHP pe sistemul de operare FreeBSD;
Lucrarea 2 instalarea i configurarea serverului Apache, MySQL i
PHP pe sistemul de operare Windows;
Lucrarea 3 Primii pai n HTML, elemente constructive;
Lucrarea 4 Principalele structuri n HTML: legturi, liste i tabele;
Lucrarea 5 Primii pai n PHP sintaxa, variabile i tipuri de date, cod
php n script html;
Lucrarea 6 Construirea unui site dinamic n php;
Lucrarea 7 Stiluri CSS i Chestionar n PHP;
Lucrarea 8 Formular de prelucrare a datelor din baza de date MySQL;
Lucrarea 9 Sistem de nregistrare, autentificare i protecie la accesarea
unei baze de date MySQL;
Lucrarea 10 Realizarea unui formular de contact;
Lucrarea 11 - Sistem de cutare n baza de date MySQL;
Lucrarea 12 Sistem de blocare acces al unui utilizator asupra unui site,
sistem de contorizare click-uri pe un link.

Autorul

ii
1. Conceptele Internetului

Tehnologiile Internet sunt asociate n cultura managerial cu posibilitatea de a


obine, prelucra i transmite informaie (n special de afaceri, economic, marketing)
rapid i eficient.
Tehnologia Informaiei cuprinde clasa tehnologiilor utilizate pentru procesarea
informaiei. Informaia este un termen vast. Dac pentru public informaia reprezint
noutile zilei, utilizat n contextul tehnologiei informaiei i al firmei informaia
desemneaz ansamblul cunotinelor, al datelor i al comunicaiilor firmei (Apostol et
al., 2003). Dei tehnologiile de procesare a informaiei pot fi utilizate in sisteme izolate,
practic valoarea de utilizare a sistemelor izolate pentru firma contemporan tinde s
devin nul fr utilizarea sistemelor de comunicaie.
n proces de inovare continu, tehnologiile de comunicaie sunt disponibile pe
pia sub form de brevete, licene, produse sau servicii. Cu excepia firmelor care au un
rol direct n dezvoltarea de tehnologii specifice de comunicaie, firmele sunt n ipostaza
de consumator al acestor tehnologii i servicii de comunicaii. Firmele furnizoare de
servicii cu valoare adugat n comunicaii sunt o clas aparte de consumatori i
furnizori de tehnologie, deoarece pe baza noilor tehnologii de comunicaii i de
prelucrare produc i furnizeaz produse sau servicii noi sau particularizate.
Internet desemneaz reeaua mondial de reele de calculatoare interconectate n
scopul schimbului continuu de date. Tehnologiile Internet desemneaz clasa TIC
utilizat n reelele de calculatoare sau pentru comunicaia cu calculatoarele. Astfel,
Tehnologiile Internet definesc multitudinea tehnologiilor de comunicare i de
procesare a informaiei prin care reeaua Internet capt valoare de utilizare pentru
firm.
Termenul internet (i non capital) desemneaz reelele individuale de calculatoare
care sunt interconectate, nu sunt parte din reeaua Internet dar folosesc tehnologii de
comunicare compatibile Internet (Huston,1999).
n ianuarie 2006, reeaua Internet deservea peste 395 milioane computere.
Aceast dimensiune nu cuprinde milioanele de dispozitive i calculatoare conectate prin
reelele de telefonie mobil sau reele private. (http://www.isc.org/index.pl?/ops/ds/host-
count-history.php, 2006)

1.1. Modelul de referin OSI


Multitudinea sistemelor interconectate Internet, de la telefoane mobile,
dispozitive automate de achiziie de date pn la noduri de prelucrare bazate pe ferme
de servere pot comunica n aceast reea mondial de date respectnd standardele de
comunicaie.
Modelul de referin Open Systems Interconnection International Standard
Organization (ISO-OSI) este o descriere standard sau un model de referin al modului
cum mesajele sunt transmise ntre dou puncte ale unei reele de telecomunicaii. Scopul
modelului ISO-OSI este acela de ghid de implementare de produse. n consecin
produsele compatibile
ISO-OSI funcioneaz i-sau utilizeaz alte produse de acest tip, constituind o
baz de plecare pentru interconectarea calculatoarelor, reelelor i a aplicaiilor n
reelele de calculatoare.
5
Tehnologii Internet
Modelul ISO-OSI (figura 1.1) poate fi utilizat pentru catalogarea produselor i
tehnologiilor, astfel nct fiecare produs poate fi nglobat n sisteme complexe fiind
folosit ca un bloc funcional.

Fig. 1.1: Modelul conceptual ISO-OSI.

ISO-OSI definete apte niveluri pentru o sesiune Internet astfel:


1. Fizic. Nivelul la care sunt realizate fizic conexiunile. Debutul reelelor de
comunicaie este reprezentate de reelele de telefonie, publice sau private, bazate pe fire
metalice (cupru sau fier). Ulterior, aceste reele de comunicaie proiectate pentru
transportul semnalelor vocale analogice, au evoluat n reele pentru transportul
semnalelor digitale: Integrated Services Digital Network (ISDN), Asynchronous Digital
Line Subscriber (ADSL). Reelele moderne sunt proiectate pe baza tehnologiilor
digitale de comunicaie care utilizeaz fibre optice (FDDI) sau semnale radio pentru
realizarea reelelor fr fir: Wireless Local Area Networks (WLAN), Wireless
Interoperability for Microwave Access (WiMax)
2. Date (Data link). Nivelul la care sistemul de comunicaie stabilete o legtur
ntre dou puncte ale unei reele fizice. Legtura de date presupune un protocol de
comunicaie i sincronizare. Figura enumr protocoalele cunoscute, fr ns a epuiza
lista protocoalelor folosite: Serial Line Internet Protocol (SLIP), Point to Point Protocol
(PPP), Ethernet sunt cteva exemple.
3. Interconexiune (Network): Nivel de realizare i gestiune al reelei de
calculatoare. Bazat pe nivelul de date, nivelul conexiune determin funcionalitatea
reelei de calculatoare pe baza protocolului de reea. n cazul reelei Internet se
utilizeaz protocolul IP v4 bazat pe adrese de 32 bii a nodurilor de reea. Reeaua
Internet contemporan se confrunt cu limita fizic a adreselor, dezvoltarea viitoare
fiind limitat de lipsa adreselor disponibile. Acesta fiind unul din motivele
implementrii protocolului IPV6 ce ofer oportunitatea dezvoltrii viitoare. Nivelul
Network gestioneaz datagrame.
6
Cap 1: Conceptele Internetului
4. Transport. Definit de protocoalele Internet Transmission Control Protocol
(TCP) i User Datagram Protocol (UDP). Spre deosebire de TCP, UDP asigur un nivel
mai redus de control al erorilor fiind protocolul preferat pentru transmiterea mesajelor
de tip broadcast.
5. Sesiune (Session). Nivelul sesiune bazat pe nivelul transport asigur
funcionalitatea necesar sesiunilor de comunicaie. Figura exemplific porturile 110/25
pentru a oferi funcionalitatea de pot electronic prin protocoale corespunztoare
POP/SMTP, sau portul 80 pentru protocolul http web.
6. Prezentare (Presentation). Simple Mail Transfer Protocol (SMTP) sau
HyperText Markup Protocol (HTTP) sunt exemple de implementare la nivelul OSI
Presentation. Acest nivel prin protocoalele implementate asigur un nivel de
comunicaie independent de adresa fizic, acest detaliu este rezolvat la nivelele OSI
inferioare. Astfel utilizatorii reelei Internet (de exemplu utilizatorii de pot
electronic) se pot concentra asupra mesajului i a destinaiei reprezentat de un nume i
nu de o adres IP.
7. Aplicaie (Application). Nivelul cel mai nalt al modelului OSIdefinete
nivelul la care aplicaiile de comunicaie interacioneaz cu nivelul Presentation.
Exemplul cel mai cunoscut l poate constitui aplicaia pentru pot electronic. Acesta
asigur funcionalitatea necesar utilizrii umane i exploateaz nivelurile OSI
inferioare pentru a asigura gestiunea mesajelor, adreselor i a erorilor.
Modelul TCP-IP (Transmission Control Protocol/Internet Protocol Model) este
o suit standard de protocoale i un model conceptual cunoscut i sub numele DARPA.
Corespondena nivelurilor celor dou modele este prezentat n figura 1.2.

Fig.1.2: Corespondena nivelurilor TCP-IP i ISO OSI.

Suita de protocoale TCP-IP definete serviciile pentru aplicaii Telnet, FTP (File
Transfer Protocol), http (Hypertext Transfer Protocol), DNS (Domain Name System),
RIP (Routing Interface Protocol), SMTP (Simple Mail Transfer Protocol), POP (Postal
Office Protocol), ECHO i multe altele (Figura 1.3). Aceste servicii i aplicaii sunt
implementate n sistemele de operare i prin urmare disponibile ca resurse software i
de comunicaie nc de la punerea n funciune a resurselor de calcul. mpreun cu
celelalte tehnologii ITC ele formeaz resursele baz de plecare pentru definirea
aplicaiilor de afaceri.

7
Tehnologii Internet

Fig.1.3: Suita de protocoale TCP-IP

Figura 1.4 ilustreaz un model de programare al aplicaiilor pentru afaceri care


utilizeaz resursele Internet n comparaie cu modelul ISO OSI. Modelul de programare
ilustrat n figura 1.4 n comparaie cu modelul TCP i ISO OSI reprezint punctul de
vedere al dezvoltrii de aplicaii din componente i servicii. Pe baza principiului utilizat
n modelul OSI prin care o component de pe un nivel superior ascunde complexitatea
i tehnologiile nivelului inferior, similar n modelul de programare comunicaia Internet
este expus aplicaiilor de ctre sistemul de operare.
Programatorii de aplicaii economice i de afaceri nu se confrunt cu necesitatea
rescrierii componentelor de pe nivelurile inferioare OSI.

Fig. 1.4: Redefinirea modelului OSI pentru aplicaii de afaceri

Figura 1.5 ilustreaz comparativ cu modelul ISO OSI evoluia modelelor


utilizate pentru dezvoltarea aplicaiilor economice i de afaceri utiliznd mediul
Internet. Aceste modele ncearc s rezolve problema administrrii complexitii
aplicaiilor, respectiv a multitudinii de componente prin clasificarea componentelor i
administrarea lor specific. n funcie de caracteristicile tehnice specifice aplicaiei de

8
Cap 1: Conceptele Internetului
afaceri finale, accentul se poate pune pe calitatea componentelor de gestiune a
documentelor semnate digital, sau pe securitatea legturilor multimedia etc.

Fig. 1.5: Redefinirea modelului OSI pentru aplicaii de afaceri

1.2. Clasificarea Tehnologiilor Internet


Tehnologiile Internet pot fi clasificate n:
Tehnologii hardware
Tehnologii de comunicaii
Tehnologii software
Tehnologii dataware

1.2.1. Tehnologii Internet Hardware


Clasa tehnologiilor hardware cuprinde acele tehnologii care conduc la
realizarea unor componente sau dispozitive fizice. Microprocesoarele, computerele pe
un cip, tehnologia identificrii radio RFId (Radio Frequency Identity), smart card,
cititoare optice de coduri i multe alte componente electronice, optice sau
electromecanice dar i cu tehnologii foarte noi, cum este biotehnologia, sunt exemple
cuprinse n aceast clas.
n decada urmtoare n nodurile Internet vor fi prezente din ce n ce mai multe
dispozitive (Internet appliances) i nu sisteme tradiionale de tip computer personal
(PC) sau server. Estimrile ajung la peste 80% din nodurile reelei care vor fi echipate
cu astfel de echipamente. Aceast realitate este posibil datorit avansului fr
precedent al tehnologiilor hardware n special n domeniul microprocesoarelor,
memoriilor i soluiilor de stocare.
Astfel, piaa produselor electronice ofer nu numai microcalculatoare pe un chip,
dar i soluii integrate ce conin procesoare pentru protocoalele Internet precum i
aplicaii i servicii web implementate hardware. (www.cssinfo.com, 2006)
Resursele hardware pot constitui baza realizrii unor centre de prelucrare cu un
singur server sau pot fi asociate n noduri de prelucrare a informaiei bazate pe resurse
distribuite. Sistemele de procesare a datelor bazate pe resurse distribuite au la baza
arhitecturii componente hardware standard. Sistemele redundante de tip Redundant
Array of Inexpensive Disks (RAID), formate din dou sau mai multe discuri organizate
n matrice de discuri, cu scopul realizrii unui volum de date tolerant la defecte, este un
exemplu de tehnologie hardware ce utilizeaz componente standard. Acest principiu al
9
Tehnologii Internet
utilizrii componentelor standard cu scopul realizrii unor sisteme cu funcionalitate
tolerant la defecte este utilizat n sistemele de servere de tip cluster.

1.2.2. Tehnologii Internet de comunicaii


Clasa tehnologiilor de comunicaii cuprinde acele tehnologii prin care este
asigurat comunicaia Internet. Tehnologiile de comunicaie sunt dezvoltate prin
utilizarea echipamentelor hardware i componente software specializate. Piaa
telecomunicaiilor este reglementat prin legi i alte acte legale emise de autoritile
publice. n Romnia, autoritatea public responsabil pentru domeniul comunicaiilor
este Autoritatea Naional pentru
Reglementare n Comunicaii ANRC (ANRC, 2006). Domeniile supuse
reglementrilor legale sunt resursele considerate naionale cum sunt frecvenele radio,
plaja de numerotaie pentru telefonia public, proprietatea domeniilor Internet,
transportul datelor i al documentelor digitale, semnturile digitale, serviciile
electronice publice etc.
Tehnologiile de comunicaie disponibile firmei sunt livrate de ctre operatorii de
telecomunicaii autorizai. Datorit complexitii domeniului comunicaiilor i/sau
interaciunii cu specificaiile legii, conectarea i gestiunea resurselor Internet externe
sunt de regul contractate cu unul sau mai muli operatori de telecomunicaii.
Caracteristicile canalelor de comunicaie determin clasificarea comunicaiilor n:
Comunicaie pe fir (cablu)
o Operatori de telefonie fix (reea n topologie stea)
Servicii de telefonie i transmisiuni de date (viteza maxim 56Kbps) prin reea
analogic comutat pe dou fire de tip dial-up Public Switched Telephone
Network (PSTN)
Servicii de telefonie i transmisiuni de date prin reele comutate de telefonie
digital de tip ISDN. (64, 128, 2Mbps)
Transmisiuni digitale prin linii fizice comutate sau nchiriate tehnologie ADSL
(Viteze de pn la 8Mbps)
o operatori de cablu coaxial (reea n topologie bus) 128, 256 Kbps, de
regul operatori de cablu TV.
Comunicaie prin fibr optic
Comunicaie radio
o WiFi WiMax 1- 100Mbps pe frecvene libere 2,4 GHz, 5.4GHz
o Prin frecvene radio operate de operatori de telecomunicaii liceniai
(Radio Comunicaii SA, Orange, Vodafone)
o Transmisiuni de date prin echipamente fixe prin canal radio dedicat.
o Transmisiuni de date mobile prin canale GPRS de telefonie mobil.
o Transmisiuni de date prin canale dedicate (nchiriate) folosind reeaua de
telefonie mobil.
o Comunicaii prin satelit
o Transmisiuni de date pe canale dedicate (nchiriate) n locaii fixe
o Transmisiuni de date mobile.

Necesitatea conectrii firmei la internet este manifestat prin alegerea a cel puin
unui operator de telecomunicaii. Operatorul va instala la sediul firmei canalul de
comunicaie contractat, eventual echipamentele i serviciile software necesare firmei
pentru comunicaia Internet.
10
Cap 1: Conceptele Internetului
Un rol foarte important n portofoliul soluiilor de comunicare disponibile
firmelor contemporane sunt soluiile de comunicare bazate pe telefonia mobil.
Serviciile oferite de operatorii de telecomunicaii mobile sunt foarte variate i includ
soluii de cofinanare a investiiei iniiale. Terminalele reelelor de telefonie mobil sunt
capabile s transmit i s prelucreze sunete, imagini, filme, aplicaii la cerere cum sunt
cititoare detectoare de coduri de bare, soluii de identificare bazate pe tehnologia RFId,
s asocieze datelor coordonatele geografice calculate pe baza tehnologiilor GPS (Global
Positioning System) i s foloseasc sisteme de transmisiuni securizate bazate pe
semnturi digitale.
Pe msur ce reeaua Internet a evoluat, au aprut i s-au dezvoltat servicii
fundamentale. La rndul lor, serviciile au influenat gradul de folosire i de extindere a
Internet-ului. Dintre acestea, cele care au avut un impact deosebit sunt (Roca et al.,
2004):
Servicii de baz:
o Nume n adres IP: Domain Name System (DNS)
o Pot electronic: Protocolul pentru transport potal Simple Mail
Transport Protocol (SMTP) i protocolul pentru oficiul potal Post
Office Protocol (POP)
o Web: World Wide Web (WWW)
o Transfer fiiere: File Transfer Protocol (FTP)
o Servicii de tiri: News Transport Protocol (NNTP)
o Voce: Voice over IP (VoIP)
Servicii avansate
o Servicii de stocare n siguran bazate pe serviciul web (WebDAV)
o Protocoale securizate: Secure IP (IPSec), Virtual
o Private Network (VPN)
o Semnturi digitale, Certificate digitale
o Servicii pentru echilibrarea ncrcrii reelei: Network load balancing
(NLB)
o Servicii pentru autentificare de la distan: Remote Authentication Dial
In User Service (RADIUS)
Servicii de integrare n reeaua Internet a altor tipuri de reele de telecomunicaii:
o Serviciul Web integrat cu sistemul de mesaje scurte SMS al reelelor de
telefonie mobil GSM.
o Integrarea serviciului SMS al reelelor de telefonie mobil cu sistemul de
pot electronic SMTP i POP.
o Serviciul Wireless Access Protocol pentru integrarea navigatoarelor
telefoanelor mobile cu serviciile web
Servicii speciale
o Integrarea aplicaiilor bazate pe sisteme distribuite i eterogene prin
apelul procedurilor la distan prin protocolul web i XML: Extensible
Markup Language Web services
o Servicii pentru interogarea de la distan a coleciilor de date: Reporting
services
o Gzduire a aplicaiilor, bazelor de date sau a sistemelor de calcul.
(Hosting Services) Tendina actual este aceea de a folosi tehnologiile de
virtualizare care permit gzduirea mai multor sisteme de calcul virtuale
(sisteme de operare) ntr-un singur sistem fizic.
11
Tehnologii Internet
Lista serviciilor poate continua cu servicii complexe ce nu pot fi cuprinse ntr-o
anume categorie, dar se bazeaz pe principiul conectivitii
Internet, pe schimbul de documente digitale convenit prin contractul ntre pri i
pe o anumit modalitate de securizare i decontare.
Modelul de afaceri pe baza cruia firma utilizeaz canalele de telecomunicaii
prin care menine conexiunea cu reeaua Internet poate fi de tip:
Decontare bazat pe timpul exploatrii. Model bazat pe capacitate de date
limitat a canalului, canal pe care firma nu l utilizeaz permanent. Acest tip de
decontare este ce mai adesea utilizat n cazul conexiunilor prin linii telefonice
comutate sau prin reelele de telefonie mobil (Dial-up). Bugetul asociat acestui
model de exploatare este variabil.
Canal cu band partajat, buget fix. Model de decontare n care nu este garantat
calitatea serviciului, dar valoarea este limitat la o valoare fix. Caracteristicile
tehnice ale acestui tip de contract sunt utile unei prezene Internet permanente de
performan redus.
Canal de comunicaie cu band garantat i buget fix. Acest tip de contract poate
cuprinde i garania calitii serviciului. Cunoscut i sub numele de contract
utilizator de band larg (broadband) devine contractul standard pentru
exploatare n mediul de afaceri. Pe baza bugetului fix i al garaniei serviciului
firma poate defini o prezen internet continu i supus unor norme de calitate,
design i serviciu la nivelul ateptrilor partenerilor.
Decontare bazat pe buget variabil cu o component fix i una variabil n
relaie cu exploatarea bazat pe timp a unor resurse de comunicaie partajate.

1.2.3. Tehnologii Internet Software


Clasa tehnologiilor software cuprinde acele tehnologii preponderent software
prin care firma asigur serviciile necesare exploatrii resurselor interne i externe.
Aplicaii software, servicii software, componente software, programe sunt cteva din
denumirile utilizate pentru a desemna implementarea tehnologiilor software.
Tehnologiile software sunt asociate cu dreptul de autor i licena de exploatare.
Autoritile publice au reglementat exploatarea drepturilor de autor i piaa licenelor
software n ncercarea de a limita evaziunea fiscal i distribuia ilegal a programelor.
n Romnia, Oficiul pentru Drepturile de Autor - ORDA este mandatat prin lege n a
impune i monitoriza domeniul drepturilor de autor i al pieei tehnologiilor software.
Firma poate utiliza tehnologiile software pe baza unor modele de afaceri:
Achiziie. Utilizarea de tehnologii pe baza licenelor de utilizare. Prezente pe
pia sub numele mrcilor comerciale ca pachete de programe, licena d dreptul
utilizrii neexclusive a produselor software cuprinse n pachet dup un model de
liceniere autorizat conform legii. Exemplele sugestive pentru acest model sunt
pachetele de programe produse de corporaii cu notorietate internaional cum
sunt Microsoft, Oracle, IBM, SAP etc. Suita de programe cuprinse n licena
produsului Microsoft SQL Server 2005 permite utilizarea tehnologiei SQL pe un
server liceniat n modul per procesor sau per client i licene pentru clienii
serviciului. Licenele pot fi achiziionate pe durat nedeterminat sau prin
abonament limitat n timp.
Dezvoltare. Prin dezvoltare proprie. Pe baza forei de munc specializate, i a
altor contracte cu parteneri de afaceri, firma devine proprietarul unei soluii
12
Cap 1: Conceptele Internetului
software pe care este obligat de lege s o nregistreze la ORDA i eventual la
OSIM. Managementul firmei este constrns s se asigure c mediile de
dezvoltare al tehnologiilor i contractele cu furnizorii sunt de natur s genereze
o proprietate fr litigii. Costurile acestui model sunt mari i solicit resurse
importante. Sistemul organizatoric este deosebit de important. Cele mai bune
practici n domeniu impun utilizarea rolului de manager de proiect (project
manager).
Asamblare. Tehnologii disponibile Internet prin servicii software, decontate
dup modul de utilizare integrate cu produsele proprii i cu produsele
disponibile pe baza licenelor achiziionate. Tehnologii software disponibile
firmei ca servicii sunt de regul exclusiv prin Internet, respectiv nu dau
posibilitatea instalrii lor pe resursele interne ale firmei. Firma are ca opiune
integrarea acestor servicii n portofoliul propriu de servicii sau pentru exploatare
intern. Serviciul de cutare Google poate reprezenta un exemplu pentru acest
model de lucru. Firma nu poate dispune de resursele hardware, de comunicaii
implicate n constituirea unei baze de cutare de nivelul celui ntreinut de
compania Google. Firma utilizeaz serviciul de cutare pus la dispoziie prin
Internet i ntreinut de Google. Exemplul Google poate s nu fie semnificativ
deoarece este un serviciu public gratuit, dar devine semnificativ n cazul n care
firma dorete un serviciu specializat, de exemplu rezultatele cutrilor s nu
conin reclame. Serviciul specializat va fi livrat pe baza unui contract prin care
firma achit valoarea serviciului Google. Exemplu poate fi extins i pentru alte
servicii software livrate pe baza unui asemenea model.
Configurare. Soluii de uz general, configurate de specialitii IT ai firmei
pentru a surprinde specificul activitii. Situaia n care tehnologiile sunt
achiziionate astfel nct s fie numai configurate se potrivesc cel mai bine
soluiilor de tipul videoconferin (protocol SIP sau H323), n care specialitii
configureaz local produsele pentru a beneficia de infrastructura pus la
dispoziie de furnizorul soluiei.
Utilizare. Soluii de uz general, disponibile prin Internet i configurate de la
distan accesibile permanent firmei printr-un model de afaceri bazat pe plata
serviciului prin abonament.

1.2.4. Tehnologii Internet Dataware


Clasa tehnologiilor dataware cuprinde acele tehnologii hardware, software i
comunicaii precum i tehnici specializate pentru stocarea, ntreinerea i exploatarea
volumelor mari de date denumite data warehouse.
Data warehouse manipuleaz datele care reprezint istoria tranzaciilor
economice ale firmei folosite pentru analiza i suportul deciziei de afaceri ncepnd cu
planificarea strategic pn la evaluarea performanei. Datele din Data Warehouse sunt
organizate optim pentru suportul analizei i nu pentru suportul tranzaciilor n timp real.
Tehnologiile dataware fac posibil analiza n timp real, furniznd rspunsuri
rapide la interogri analitice complexe i iterative. Modelul multidimensional de date
online analytical processing (OLAP) i tehnicile de agregare organizeaz i totalizeaz
volume mari de date aa nct pot fi evaluate rapid folosind analiza online i instrumente
software grafice.

13
2. Servicii Internet sub Free BSD
FreeBSD este un sistem de operare liber Unix-like descendent din AT&T
UNIX prin ramura Berkeley Software Distribution (BSD), mai exact provine din
sistemele de operare 386BSD i 4.4BSD. Ruleaz pe calculatoare cu procesoare
compatibile cu familia Intel x86, dar i pe procesoare DEC Alpha, UltraSPARC (al
firmei Sun Microsystems), Itanium (IA-64), AMD64, PowerPC, PC-98, ARM i MIPS.
FreeBSD este un sistem de operare complet, dezvoltat unitar. Nucleul, driverele
pentru dispozitive i utilitarele din spaiul utilizatorului, cum ar fi interpretorul de
comenzi sau shell-ul, sunt inute n acelai arbore de urmrire a revizuirilor codului
surs (CVS). Aceast metod de dezvoltare vine n contrast cu cea folosit pentru Linux
(un sistem de operare similar, dar mai bine cunoscut), unde nucleul este dezvoltat de o
echip de dezvoltatori, utilitarele din spaiul utilizator i aplicaiile sunt dezvoltate de
alte echipe (cum ar fi proiectul GNU), iar apoi toate acestea sunt mpachetate mpreun
i publicate de alte echipe sub form de distribuii Linux.
Ca sistem de operare, FreeBSD este privit n general ca fiind foarte fiabil i
robust, iar dintre sistemele de operare ce raporteaz la distan timpul de funcionare de
la ultima iniializare a sistemului (uptime) [1], FreeBSD este cea mai
popular alegere dintre sistemele de operare libere afiate n lista
Netcraft a primelor 50 de servere web cu cel mai lung uptime [2]
(uptime n unele versiuni de GNU/Linux nu poate fi calculat). Un
uptime lung indic de asemenea faptul c nu au fost necesare
actualizri ale nucleului sistemului de operare, pentru c instalarea
unui nou nucleu implic reiniializarea sistemului i rescrierea de la
zero a contorului sistemului. Fig. 1: Mascota
proiectului
2.1. Istoria i dezvoltarea FreeBSD FreeBSD:
Dezvoltarea iniial a sistemului FreeBSD a nceput n 1993, pornind de la
sursele 386BSD. Totui, din cauza ngrijorrilor privind legalitatea tuturor surselor
folosite n 386BSD i a unui proces ntre Novell (pe atunci proprietarul drepturilor
pentru UNIX) i Berkeley, FreeBSD a sfrit prin reproiectarea unei mari pri a
sistemului pentru versiunea FreeBSD 2.0 (ianuarie 1995), folosind versiunea 4.4BDS-
Lite de la Universitatea din California, Berkeley. Manualul FreeBSD (n limba
englez)1 cuprinde mai multe date istorice despre geneza sistemului de operare
FreeBSD.
Poate cel mai notabil ctig al versiunii FreeBSD 2.0 a fost restructurarea
sistemului Mach Virtual Memory (memorie virtual Mach) al CMU-ului original, care a
fost optimizat pentru performan sub ncrcri mari, precum i crearea sistemului de
porturi, care face ca descrcarea, construirea i instalarea de software din surse tere
foarte uoar. FreeBSD echipeaz situri de mare succes cum ar fi: cdrom.com (un
depozit imens de software care a dobort multe recorduri din internet), Hotmail i
Yahoo!.
FreeBSD 3.0 a adus mai multe schimbri: mutarea la formatul binar ELF, suport
iniial pentru sistemele SMP i de asemenea a adugat suport pentru o nou platform
pe 64 bit: Alpha. La vremea sa, ramura 3.X a fost sever criticat pentru c multe

1
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/history.html
14
Cap 2: Servicii Internet sub Free BSD
schimbri nu erau evidente n beneficiul i afectarea performanei, dar a fost un pas
necesar pentru dezvoltarea a ceea ce avea s fie ramura de mare succes 4.X.
Iniial, FreeBSD a folosit i pe post de logo mascota BSD Daemon, dar n anul
2005 a fost organizat o competiie pentru un logo propriu. Pe data de 8 octombrie,
2005, competiia a luat sfrit, iar proiectul propus de Anton K. Gural a fost ales s
devin logo FreeBSD. BSD Daemon, rmne ns mascota proiectului FreeBSD (fig. 1).

2.1.1. FreeBSD 5 schimbri i dezvoltare


Versiunea FreeBSD final i ultima din ramura 5-STABLE este 5.5, a fost
lansat n mai 2006. Dezvoltatorii FreeBSD menin (cel puin) dou ramuri de
dezvoltri n acelai timp. O ramur -STABLE de FreeBSD este creat pentru fiecare
numr de versiune major, pentru care sunt scoase versiuni odat la fiecare 4--6 luni.
Ulitma versiune de FreeBSD 4-STABLE este 4.11, care este i ultima din versiunile
ramurii 4-STABLE. Prima versiune 5-STABLE a fost 5.3 (de la 5.0 la 5.2.1 au fost
parte din ramura -CURRENT). Prima versiune 6-STABLE a fost 6.0. Ramura de
dezvoltare, -CURRENT, n acest moment este 7.0-CURRENT i conine caracteristici
agresive pentru un nucelu nou i pentru aplicaii din spaiul utilizator. Dac o
caracteristic este suficient de stabil i matur, atunci ea poate fi portat pe versiuni
anterioare ale ramurii -STABLE (n slang-ul FreeBSD operaia este denumit MFC,
Merge from CURRENT). Modelul de dezvoltare FreeBSD este descris mai amnunit
ntr-un articol, n limba englez, de Niklas Saers2.
Marea diferen n FreeBSD 5 a fost o schimbare major n mecanismul de nivel
jos al blocrii nucleului care permite un suport mai bun pentru multiprocesor simetric
(SMP, symmetric multiprocessor), elibernd o mare parte de nucleu de blocarea
multiprocesorului, menionat uneori ca Big Giant Lock. Acum este posibil executarea
n acelai timp mai multor procese n mod nucleu.
Alt schimbare major include o soluie de thread-ing m:n, numit KSE, care
acum este biblioteca implicit pentru threading (pthreads) ncepnd cu 5.3 (crearea
ramurii 5-STABLE). Terminologia m:n, unde m i n sunt ntregi pozitivi, implic faptul
c m fire de execuie (thread) din spaiul utilizator corespund la n fire de execuie ale
nucleului. Multe alte caracteristici noi sunt legate de securitate. A fost format proiectul
TrustedBSD de ctre Robert Watson cu scopul expres de a aduga ncredere n
funcionalitatea sistemului de operare pentru FreeBSD. Un mediu extensibil pentru
controlul obligatoriu al accesului (TrustedBSD MAC Framework, MAC este acronim
pentru mandatory access control), un sistem de fiiere Access Control Lists (ACL, liste
de control pentru acces) i noul sistem de fiiere UFS2 toate provin din TrustedBSD.
Unele din funcionalitile TrustedBSD au fost integrate de asemenea i n sistemele de
operare NetBSD i OpenBSD.
FreeBSD 5 a schimbat de asemenea semnificativ stratul block I/O (bloc de
intrare/ieire) prin introducerea mediului de transformare a cererii intrare/ieire pentru
disc modular GEOM (GEOM modular disk I/O request transformation framework),
contribuie a lui Poul-Henning Kamp. GEOM activeaz crearea simpl a multor feluri
de funcionalitate, cum ar fi creare de imagini n oglind, mirroring, (gmirror) i
criptarea (gbde). Lansarea recent a FreeBSD 5.4 a confirmat ramura FreeBSD 5.X ca
pe o verisiune foarte stabil i foarte performant, n ciuda faptului c a avut o perioad
de concepie lung din motive de set cuprinztor de caracteristici.

2
http://www.freebsd.org/doc/en_US.ISO8859-1/books/dev-model/
15
Tehnologii Internet
2.1.2. FreeBSD 6 i 7
FreeBSD 6.1 a fost lansat n 8 mai, 2006, iar 7.0-CURRENT este n dezvoltare
activ. Aceste versiuni continu s lucreze la optimizri SMP i threading, la zona
funcionalitii avansate a 802.11 i la auditarea evenimentelor de securitate
TrustedBSD. Realizrile primei versiuni ale acestora includ nlturarea Giant lock din
VFS, nlocuirea bibliotecii libthr cu o implementare 1:1 pentru threading care se execut
mai bine, i adugarea unei implementri de audit BSM, numit OpenBSM creat de
proiectul TrustedBSD, care se bazeaz solid pe implementarea BSD gsit n producia
Open Source de la Apple: Darwin, publicat sub o licen de tip BSD.

2.1.3. Compatibilitate cu Linux


FreeBSD ofer compatibilitate binar cu mai multe alte sisteme de operare Unix-
like (de tip unix), inclusiv cu Linux. Motivaia din spatele acestui fapt este de obicei
atribuit rulrii aplicaiilor dezvoltate pentru Linux, adesea comerciale, i care sunt
distribuite de obicei sub form binar, astfel ele ne putnd fi portate pe FreeBSD n
lipsa acceptului acelor care controleaz codul surs.
Din linie de comand, compatibilitatea permite utilizatorilor de FreeBSD s
ruleze majoritatea aplicaiilor care sunt distribuite doar ca binare Linux. n comparaie
cu numrul vast de aplicaii native disponibile pentru FreeBSD folosind colecia de
porturi, aceste aplicaii sunt minoritare. Aplicaiile folosite n nivel de compatibilitate
Linux includ StarOfice, versiunea Linux de Netscape, Adobe Acrobat, RealPlayer,
VMware, Oracle, WordPerfect, Skype, Doom 3, Quake 4, seria Unreal Tournaments,
Sea Monkey, i altele. n general, pare s nu existe nici o diminuare notabil a
performanei cnd se ruleaz binarele Linux comparativ cu aplicaiile native FreeBSD.
Dei exist multe aplicaii care ruleaz fluent n stratul de compatibilitate,
trebuie notat c stratul nu este complet, astfel ducnd unele binare Linux n situaia de
nu putea fi folosite sau de a le limita funcionalitatea, probabil din cauza faptului c
stratul de compatibilitate suport doar apelurile de sistem pentru nucleul Linux 2.4.2, o
distribuie care a fcut istorie. Un exemplu din aceast categorie este Cedega, produsul
firmei TransGaming pentru rulat jocuri de Microsoft Windows sub Linux. Folosirea
acestuia n acest moment este n mare msur compromis din cauza unui strat de
compatibilitate incomplet. Exist ns un succes limitat n folosirea lui la rularea
jocurilor pe FreeBSD. A fost acceptat un proiect pentru ediia 2006 Sumer of code, de a
actualiza stratul de compatibilitate i de a implementa apeluri de sistem care lipsesc.
Pentru cele mai multe aplicaii tiinifice, compatibilitatea Linux lucreaz corect;
aplicaii precum nmrpipe, ccp, Mathematica sau Matlab lucreaz conform ateptrilor.

2.1.4. Licen
Ca i sistemele de operare surori, codul din FreeBSD este publicat sub termenii
diferitelor licene. Totalitatea codului nucleului i cea mai nou creat de cod este
publicat sub termenii licenei BSD cu dou clauze, care permite tuturor s foloseasc i
s redistribuie FreeBSD dup dorin. Exist de asemenea pri publicate sub alte
licene: GPL, LGPL, ISC, licen BSD cu trei clauze, licen BSD cu patru clauze.
Pentru unele funcionaliti particulare, exist de asemenea i binare fr cod
surs cum ar fi Atheros HAL pentru funcionalitate wireless i o unealt doar n format
binar pentru AAC RAID de la Adaptec.

16
Cap 2: Servicii Internet sub Free BSD
2.1.5. Produse derivate din FreeBSD
O gam larg de produse sunt bazate direct sau indirect pe FreeBSD. Aceast
gam cuprinde de la dispozitive de tip embedded (integrate), cum ar fi rutere Juniper
Networks i sisteme de operare firewall de la Nokia, la poriuni ntregi ale altor sisteme
de operare incluznd aici Linux i RTOS WxWorks. Darwin, inima Mac OS X de la
Apple, se bazeaz n mare msur pe FreeBSD incluznd aici sistemul de fiiere virtual,
stiva de reea i componente din spaiul utilizator. Apple continu s integreze cod nou
din FreeBSD i contribuie napoi ctre FreeBSD cu schimbri. Produsul open source
OpenDarwin, dezvoltat original din codul de baz al Apple dar acum entitate separat,
include de asemenea cod FreeBSD n mod substanial. n plus exist cteva sisteme de
operare originale desprinse din sau bazate pe FreeBSD incluznd aici PC-BSD i
DesktopBSD, care include mbuntiri destinate utilizatorilor de acas sau staiilor de
lucru; distribuiile FreeSBIE i Frenzy live CD; produsele firewall embedded m0n0wall
i pfSense; DragonFly BSD o notabil desprindere din FreeBSD 4.8 conceput pentru o
strategie de sincronizare multiprocesor diferit care a fost apoi aleas pentru FreeBSD 5
i dezvoltarea unor caracteristici microkernel (micronucleu); i nu n ultimul rnd
RoFreeSBIE, un proiect rezultat colaborrii membrilor ROFUG.

2.1.6. TrustedBSD
Proiectul TrustedBSD ofer FreeBSD-ului un set de extensii de ncredere
pentru sistemul de operare, fiind iniiat de Robert Watson. Scopul proiectului a fost
implementarea conceptelor de la Common Criteria pentru Information Technology
Security Evaluation (evaluarea securitii tehnologiei informaiilor) i Orange Book.
Acest proiect rmne nc n dezvoltare, i multe din aceste extensii de ncredere au fost
integrate n lista de dezvoltare a FreeBSD 5.X, 6.X i acum 7.X-CURRENT.
Pincipalul obiectiv al proiectului TrustedBSD este contribuia la Access Control
Lists (listele de control al accesului), auditul evenimentului, atribuii extinse, capaciti
de acord fin i mandatory access control (control al accesului obligatoriu). Ca parte din
proiectul TrustedBSD, exist de asemenea un port care ruleaz pe FreeBSD al
implementrii FLASK/TE al NSA n SELinux. Contribuii mai recente includ
dezvoltarea OpenBSM, o implementare open source a API-ului Basic Security Module
(BSM, modul de securitate fundamental) al companiei Sun i un format de fiiere
pentru jurnale de audit, care suport un sistem de audit pentru securitate extins care
face parte din FreeBSD 6.1.
Dei majoritatea componentelor proiectului TrustedBSD sunt incluse n arborele
surs principal al FreeBSD, aceasta nu este singura lor destinaie. Multe caracteristici,
odat ajunse la maturitate, i gsesc locul n OpenBSD sau Darwin de la Apple
Computer.

17
Tehnologii Internet
2.2. Configurarea unui server multifuncional pe baza la
FreeBSD
2.2.1. Introducere:
Vom ncerca s instalm un server multifuncional pe baza sistemului de operare
din familia UNIX FreeBSD.
FreeBSD este un sistem comod organizat i se deosebete de cele alte sisteme de
operare UNIX prin distibutivul simplu i modalitatea simpl de instalare.

Serverul nostru va ndeplini urmtoarele funcii:


1. Marrutizator
2. Mail server (POP3 + IMAP)
3. FTP server
4. Web server (Apache + PHP)
5. Data base server (MySQL)

2.2.2. Instalarea sistemului


Vom examina versiunea FreeBSD 5.0. Pentru simplitate se va descrie toata
procedura pe pai. Dac se a face totul corect, instalarea va dura circa 40 minute.
1. plasam CD ul cu distributivul FreeBSD n CD-ROM.
2. Dup ce se pornete instalarea alegem regimul CUSTOM de instalare. Acest
regim ne va permite s instalm doar ceea ce avem nevoie.
3. Pasul urmtor este de a mpri corect HDD-ul pe partiii. Dat fiind faptul c
pentru serverul nostru HDD-ul nu joac cel mai important rol, l vom mpri aa
cum ne ofer sistemul. Activam punctul PARTITION apsm litera A , i dup
ce el a mprit totul automat apsm litera Q .
4. Activm punctul LABEL. Apsm iari litera A i apoi Q .
5. Activm punctul DISTRIBUTIONS. Apoi de aici alegem MINIMUM. Adic
instalm sistemul cu minimum de resurse. Apoi EXIT
6. Activm punctul MEDIA, de acolo alegem de unde vom instala sistemul n
cazul nostru va fi CDROM ;
7. Activm punctul COMMIT. i pe vreo 20 minute putem savura o cafea.
8. Activm punctul CONFIGURATION. De aici putei s adugai porturile i
sursele care se afla n DISTRIBUTION, PACKAGE, PORTS. Apoi mergem s
schimbm parola pentru userul ROOT;
9. n Punctul USER MANAGEMENT adugm un utilizator din grupa WHEEL,
pentru a putea trece de la acest user la ROOT
10. Setam TIME ZONE
11. Trecem la punctul NETWORKING
12. Atenie!!! Se presupune c serverul nostru are 2 plci de reea. Una se va uita n
Internet alta spre reeaua local.
13. Mergem la punctul GATEWAY, apsm spaiu i bifam opiunea.
14. Accesm punctul INTERFACES. Vom vedea pe ecran toate plcile noastre de
reea.
15. La dou din ele care pot s se numeasc lnc0 i lnc1 (n dependen de versiune
denumirea poate sa varieze, dar 0 i 1 este neaprat.) la sfritul rndului este
notat ETHERNET. Deci anume acestea sunt plcile noastre.

18
Cap 2: Servicii Internet sub Free BSD
16. O activm pe prima. Setm numele calculatorului, numele de domeniu, adresa
DNS, i IP-ul din reeaua din care face parte aceasta plac.
17. Activm a doua plac i cu ea procedm la fel.
18. Ieim din instalare i restartm calculatorul.
19. Felicitri ROUTER-ul este instalat

2.2.3. Setarea marrutizatorului


Deci deja avem calculatorul cu 2 interfee de reea din care una se uita spre
Internet si alta spre reeaua local. Vom continua pe pai.

Server
FreeBSD

INTERNET
LAN local
10.7.0.0/16

NIC2 NIC1
10.7.0.1/16 195.131.31.240

1. Verificm dac funcia de router este activat.


/etc/rc.conf
gateway_enable='YES'

2. Recompilm nucleul adugnd elementele de care vom avea nevoie i


eliminnd cele de care nu avem nevoie. Asta se face n felul urmtor.
cd /usr/src/sys/i386/conf
cp GENERIC my # facem o copie a nucleului
Redactam fiierul adugnd:
########### FIREWALL
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_FORWARD #enable transparent proxy support
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default

########### DUMMYNET saiper in FreeBSD


options DUMMYNET

######### IPDIVERT - sistemul NAT


options IPDIVERT #divert sockets

3. Recompilam
config my
cd ../../depend/my
make depend && make && make install

4. Restartam computerul
shutdown -r now

5. Cream fiierul rc.firewall.local


Presupunem ca reeaua local este 10.7.0.0/16 i interfaa ce privete Internetul
este 195.131.31.240, care este asociata interfeei dc1.
19
Tehnologii Internet
Atunci fiierul rc.firewall.local va fi:
#!/bin/sh

/sbin/ipfw -f flush
/sbin/ipfw add 5000 divert natd ip from 10.7.0.0/16 to any out xmit
dc1
/sbin/ipfw add 5100 divert natd ip from any to 195.131.31.240

activm acest fiier:


sh /etc/rc.firewall.local

6. Pornim programul NATD


/sbin/natd -n dc1
Din acest moment routerul ar trebui s lucreze. Dar dup prima rencrcare totul
se va pierde de aceea trebuie s automatizm procesul de ncrcare a marrutizatorului.

7. Cream fiierul /etc/rc.local i introducem urmtorul text


/sbin/natd n dc1
/bin/sh /etc/rc.firewall.local

8. Restartm sistemul i ne convingem c totul lucreaz.

2.2.4. Mail server


Mail serverul const din 2 componente. Componenta de transmitere a e-mail-
urilor de la un calculator la altul - protocolul SMTP i componenta de primire a
scrisorilor de la server spre client protocoalele POP3 i IMAP.

2.2.4.1. Setarea SMTP


1. Agentul standard pentru SMTP este programul sendmail. Vom avea nevoie de
urmtoarele fiiere de configurare:
/etc/mail/access
/etc/mail/aliases
/etc/mail/local-host-names
/etc/mail/mailer.conf
/etc/mail/mailertable
/etc/mail/sendmail.cf
/etc/mail/virtusertable

2. Setam fiierul /etc/mail/access . Aici noi putem seta hosturile i IP-urile


crora le permitem sau nu s se foloseasc de SMTP-ul nostru. Editm
fiierul.
cyberspammer.com 550 We don't accept mail from spammers
FREE.STEALTH.MAILER@ 550 We don't accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
RELAY

Dac este setat OK sau RELAY atunci de pe aceste hosturi sau IPuri, sau
nceputuri de IPuri se vor putea transmite scrisori. Dac este REJECT atunci nu se va
permite de transmis.
20
Cap 2: Servicii Internet sub Free BSD
3. n /etc/mail/aliases se pot notata sinonimele la utilizatori i liste de utilizatori.
Presupunem c dorim ca utilizatorul X s primeasc e-mailuri adresate i pe
numele X i pe Y. Atunci vom nota:

Y:X

Dac noi dorim ca adresa Y s se refere la mai muli abonai atunci scriem:

Y: joe,eric,paul sau Y: joe@host.com, eric@host.org, paul@host.md

Dup ce am editat acest fiier neaprat trebuie s scriem:


Newaliases

2.2.4.2. Configurarea POP3 i IMAP


Pentru nceput vom instala un program care ne permite s folosim protocoalele
IMAP i POP3. Sunt foarte multe programe de acest fel. Unul din ele poate fi gsit i
aici http://www.washington.edu/imap/ programul se numete IMAPD
ftp://ftp.cac.washington.edu/imap/imap.tar.Z

Dezarhivm:
gunzip imap.tar.Z
tar xvf imap.tar

Trecem n directoriul IMAP i compilm:


make bsf
Trecem n directorul ../imapd i copiem fiierul imapd i pop3 n
/usr/local/libexec
Intrm n fiierul /etc/inetd.conf i tergem semnul # din faa la IMAP4 i
POP3, n rndul POP3 n loc de pop3 schimbam n ipop3d, i la IMAP respectiv tot
schimbm

Restartam serviciul
ps ax | grep inetd'
inem minte numrul din /usr/sbin/inetd wW i scriem kill HUP numrul.
Controlm, trebuie s lucreze ambele protocoale

2.2.5. FTP server


Ca ftp server poate fi folosit programul PROFTPD . Acest program poate fi gsit
aici http://www.proftpd.org
De asemenea putem instala din porturi
cd /usr/ports/ftp/proftpd/
make all install
make clean
Pornim serviciul din fiierul /etc/inetd.conf
Adugm:
ftp stream tcp nowait root /usr/local/libexec/proftpd proftpd

21
Tehnologii Internet
Restartm serviciul
inetd kill HUP

Configurm serviciul
Copiem fiierul de configurare
cp /usr/local/etc/proftpd.conf.default /usr/local/etc/proftpd.conf
Acum n fiierul /usr/local/etc/proftpd.conf putem configura toate opiunile
dorite. Explicaii adugtoare sunt prezente aici http://www.proftpd.org/docs

2.2.6. Web server (Apache + PHP)


Exist dou versiuni absolut independente de Web: servere Apache. Apache 1 i
2. n acest curs vom examina cum se instaleaz apache 2 care poate fi gsit aici:
http://www.apache.org/
Se dezarhiveaz cu ajutorul comenzii tar zxvf , apoi intram in directoriul creat
./configure
Make
Make install
Automatizam ncrcarea serverului, n fiierul /etc/rc.local (dac nu exist acest
fiier l crem noi) adugm :
/usr/local/apache22/bin/apachectl start
Toate fiierele Apache inclusiv acele de configurare se afla n
/usr/local/apache22

Urmtorul pas este instalarea PHP pe care l gsim aici www.php.net


Dezarhivm i configurm metoda de instalare prin:
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
make
make install

Dac nc nu avem instalat MySQL tergem mbinarea --with-mysql


Instalarea MySQL va fi explicat n pasul urmtor.
Schimbm configuraia Apache:
Intrm n /usr/local/apache22/conf/httpd.conf

Verificm dac exist:

Pentru PHP4
LoadModule php4_module libexec/libphp4.so

Pentru PHP5
LoadModule php5_module libexec/libphp5.so

Adugm sau scoatem # din fata la rndurilor


AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps

Restartam apache
/usr/local/apache22/bin/apachectl restart

22
Cap 2: Servicii Internet sub Free BSD

2.2.7. Instalarea MySQL


Exist cteva pachete de distribuie MySQL. Toate pot fi gsite pe
www.mysql.com . Noi ne vom folosi de o versiune necompilat a programului i o vom
compila-o singuri. MySQL necompilat toate fi gsit aici:
ftp://unix.hensa.ac.uk/sites/master.us.finkmirrors.net/distfiles/mysql-4.0.16.tar.gz

Dezarhivm
tar -zxvf mysql-4.0.16.tar.gz -C /usr/local/src

Crem utilizatorul mysql i grupa pentru acest utilizator deoarece mysql va


lucra sub propriul utilizator
pw groupadd mysql
pw useradd mysql -g mysql -d /usr/local/mysql -s /dev/null

Configurm instalarea
cd /usr/local/src/mysql-4.0.16
./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql

Compilm
make
make install

Instalm baza de date mysql


scripts/mysql_install_db

Atribuim fiierele compilate utilizatorului mySQL


chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql/var

n mapa /usr/local/etc/rc.d/ crem fiierul mysql.sh


Coninutul acestui fiier poate fi gsit n Internet,
http://tutorial.ru/files/mysql/mysql.sh
sau se copie urmtoarele:
#!/bin/sh
basedir="/usr/local/mysql"
datadir="$basedir/var"
pid_file="$basedir/var/mysqld.pid"
bindir="$basedir/bin"
PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
export PATH
mode=$1 # start or stop
parse_arguments() {
for arg do
case "$arg" in
--basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--pid-file=*) pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
esac
done
}

23
Tehnologii Internet
# Get arguments from the my.cnf file,
# groups [mysqld] [mysql_server] and [mysql.server]
if test -x ./bin/my_print_defaults
then
print_defaults="./bin/my_print_defaults"
elif test -x $bindir/my_print_defaults
then
print_defaults="$bindir/my_print_defaults"
elif test -x $bindir/mysql_print_defaults
then
print_defaults="$bindir/mysql_print_defaults"
else
# Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf
print_defaults=
if test -r $conf
then
subpat='^[^=]*basedir[^=]*=\(.*\)$'
dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
for d in $dirs
do
d=`echo $d | sed -e 's/[ ]//g'`
if test -x "$d/bin/my_print_defaults"
then
print_defaults="$d/bin/my_print_defaults"
break
fi
if test -x "$d/bin/mysql_print_defaults"
then
print_defaults="$d/bin/mysql_print_defaults"
break
fi
done
fi
# Hope it's in the PATH ... but I doubt it
test -z "$print_defaults" && print_defaults="my_print_defaults"
fi
#
# Test if someone changed datadir; In this case we should also read
the
# default arguments from this directory
#
extra_args=""
if test "$datadir" != "@localstatedir@"
then
extra_args="-e $datadir/my.cnf"
fi
parse_arguments `$print_defaults $extra_args mysqld mysql_server
mysql.server`
# Safeguard (relative paths, core dumps..)
cd $basedir
case "$mode" in
'start')
# Start daemon
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file &
24
Cap 2: Servicii Internet sub Free BSD
# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysql
fi
else
echo "Can't execute $bindir/mysqld_safe from dir $basedir"
fi
;;
'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.
if test -s "$pid_file"
then
mysqld_pid=`cat $pid_file`
echo "Killing mysqld with pid $mysqld_pid"
kill $mysqld_pid
# mysqld should remove the pid_file when it exits, so wait for it.
sleep 1
while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
]
do
[ -z "$flags" ] && echo "Wait for mysqld to exit\c" || echo ".\c"
flags=a$flags
sleep 1
done
if [ -s $pid_file ]
then echo " gave up waiting!"
elif [ -n "$flags" ]
then echo " done"
fi
# delete lock for RedHat / SuSE
if test -f /var/lock/subsys/mysql
then
rm /var/lock/subsys/mysql
fi
else
echo "No mysqld pid file found. Looked for $pid_file."
fi
;;
'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
$0 stop
$0 start
;;
*)
# usage
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
Atribuim drepturi acestui fiier
chmod 700 mysql.sh
Lansm MySQL
/usr/local/etc/rc.d/mysql.sh start

25
Tehnologii Internet
Setm parola pentru adminul mysql
/usr/local/mysql/bin/mysqladmin -u root password PAROLA

Facem cteva linkuri la alte programe care vor lucra cu Internetul :


ln -s /usr/local/mysql/include/mysql /usr/include
ln -s /usr/local/mysql/lib/mysql /usr/lib
ln -s /usr/local/mysql/bin/mysql /usr/local/bin
ln -s /usr/local/mysql/bin/mysqldump /usr/local/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin
ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.12 /usr/local/lib

Restartm calculatorul.

26
3. Servicii Internet sub Windows
3.1. Generaliti
n acest capitol se vor prezenta generaliti legate de sistemul de operare
Windows, cu exemplificri pe Windows 2000 server. Cum cursul nu se refer la sisteme
de operare, ci doar la implementarea tehnologiilor internet n acestea, nu vom insista
asupra variantelor de sisteme Windows, a modului de instalare i a diferitelor faciliti
furnizate de acestea, ci doar la acele module considerate utile i necesare pentru aplicaii
Internet.
Sistemul de operare Windows 2000 este sub licen Microsoft, i suport dou
tipuri de licen:
per server pentru stabilirea de ctre server a numrului de conexiuni
concurente;
per seat n care fiecare staie de lucru din domeniu are propriul su C.A.L.
(Client Access License) achiziionat o dat cu sistemul de calcul.

Prima variant este mai viabil deoarece ntr-o reea pot exista sisteme cu
diferite sisteme de operare care ar putea s nu aib un C.A.L. n modul de liceniere per
server, numrul de conexiuni este dat de numrul clienilor care a fost achiziionat odat
cu sistemul de operare. Acest numr poate fi schimbat i se stabilete funcie de
necesitile fiecrei reele.
La instalarea unui sistem de operare Windows server, avem la dispoziie mai
multe componente pe care le putem s le instalm sau nu. n continuare prezentm
cteva din acestea cu rolul i importana lor:
Certificate Service reprezint suportul pentru aplicaiile care utilizeaz chei
publice de securitate, permind instalarea i configurarea certificatelor de
autoritate (Certificate Authority);
Internet Information Service (IIS) reprezint serviciul care se instaleaz i se
configureaz pentru a putea pune la dispoziie fiiere via Web, utiliznd serviciul
HTTP. Atenie: nu instalai acest serviciu pe serverele de domeniu, pentru c
accesul prin http reprezint un risc de securitate suplimentar ntr-o reea de
calculatoare;
Network Monitor Tools o unealt din componenta Management and
Monitoring Tools, folosit pentru urmrirea traficului pe reea.

3.2. Configurarea Windows 2000 ca server de domeniu


La prima conectare pe server se deschide o fereastr de configurare care ne
permite s alegem din mai multe opiuni, i anume:
Active directory serviciul pentru configurarea i administrarea utilizatorilor
dintr-un domeniu de calculatoare
File server server pentru fiere;
Print server server dedicat gestionrii imprimantelor din reea i a accesului
ctre acestea;
Web/Media Server server dedicat publicrii fiierelor HTML sau media pe
Internet sau Intranet.

27
Tehnologii Internet
n Windows 200, serverul este un termen generic, care poate fi configurat n
funcie de necesiti. Un server de domeniu este recunoscut generic sub denumirea de
Domain Controler (DC), ntr-o reea putnd exista mai multe astfel de servere care
partajeaz informaia din Active Directory n scopul unei mai mari sigurane a reelei.
Proprietatea de Domain Controller este vzut n Windows 2000 ca un rol care
poate fi schimbat uor ntre diferitele servere din reea. primul server care a fost
configurat ca DC n reea este recunoscut i ca Master Domain Controller (MDC), toate
celelalte servere fiind Secondary Domain Controller (SDM).

3.2.1. Instalare Active Directory


Pasul l - Lansarea n execuie a ferestrei de configurare
Start Programs Administrative Tools Configure Your Server.
Pasul 2 - Instalare Active Directory
n fereastra care s-a deschis se apas pe Active Directory i n josul ferestrei
exist hyperlink-ul Start.
n fereastra de Welcome apsai Next, apoi n alegerea tipului serverului: pentru
un domeniu nou (Domain controller for a new domairi) sau ca un server suplimentar
pentru un domeniu existent (Additional domain controller for an existing domairi).
Atenie: Dac avei conturi de utilizatori locale precum i alte setri de securitate
i csue de e-mail pe serverul pe care dorii s configurai Active Directory, aceste vor
fi terse automat. Dac se instaleaz primul server, vom alege prima opiune i trecem la
etapa urmtoare.
Pasul 3 - Crearea unui arbore de domenii
n Active Directory reelele locale sunt organizate arborescent, momentul
configurrii primului server din reea coincide cu crearea unui nou arbore de domenii.
Alegei, aadar, prima opiune (Create a new domain tree) i trecei la pasul urmtor
unde va trebui s creai o nou pdure" (forest).
Pasul 4 - Crearea unui nou nume de domenii
Active Directory presupune existena unei alte structuri arborescente care
reprezint scheletul de comunicaie ntre staiile din viitorul domeniu. Acest nou
serviciu care trebuie instalat este DNS (Domain Name System - Sistemul numelor de
domenii).
Programele utilizate, n mod curent, se refer rareori la sistemele gazd, cutii
potale i alte resurse prin adresa lor binar (IP), n locul acesteia fiind folosite iruri de
caractere de forma:
nume_host.subdomeniul.. .subdomeniu_n. domeniu
Folosirea unor iruri de caractere n locul adreselor binare duce la utilizarea
uoar a adreselor, fiind mult mai uor de reinut dect nite numere care nu spun mare
lucru utilizatorilor obinuii. Va fi necesar un mecanism care s permit convertirea unei
adrese din format ASCII n format IP, singurul format recunoscut n reea.
Structura arborescent a DNS permite utilizarea de domenii cu acelai nume.
Pentru a se stabili corespondena ntre nume i adresa IP se procedeaz astfel:
programul de aplicaie apeleaz o procedur de bibliotec (resolver),
transferndu-i ca parametru numele de domeniu;
resolver-ul trimite un pachet UDP la serverul local DNS, care caut numele i
returneaz adresa IP asociat acestuia;
avnd adresa IP, programul apelant poate stabili o conexiune TCP cu destinaia.

28
Cap 3: Servicii Internet sub Windows
Extinderea domeniilor de la diferite niveluri ale arborelui DNS se poate realiza
prin crearea de proxy servere, care permit calculatoarelor unei reele s acceseze n
sens unic resursele reelei Internet, acestea nefiind vzute" din exterior.
n Windows 2000 Server, numele de DNS conine i numele de NetBIOS al
viitorului nume al domeniului de calculatoare.
n cazul nostru, vom folosi drept denumire a domeniului mydom.myorg.ro.
Numele complet al fiecrei staii din viitorul domeniu va fi format din numele acesteia
(NetBIOS Name) urmat de numele domeniului DNS.
Pasul urmtor este reprezentat de specificarea numelui de NetBIOS al
domeniului, propunerea implicit fiind reprezentat de prima categorie : mydom.
Locaia implicit a bazei de date cu informaiile din Active Directory este n
directorul WINNT, subdirectorul NTDS, pe discul pe care a fost instalat sistemul de
operare (n cazul nostru, partiia C :). Aceast locaie poate fi schimbat (prin apsarea
butonului Browse), dar nu v deranjeaz cu nimic dac rmne acolo. De asemenea,
log-urile (jurnalul de activitate) sunt salvate implicit la aceeai adres de pe disc.
Pentru ca anumite obiecte din Active Directory s poat fi accesibile din orice
punct al reelei, acestea trebuie s fie puse la dispoziie n reea prin crearea unui share.
Locul de salvare a acestor obiecte este n directorul WINNT, subdirectorul SYSVOL.
V recomandm s folosii opiunile implicite !
Utilitarul de instalare i configurare a Active Directory v ofer posibilitatea de
configurare n aceast etap a serverului DNS, se recomand instalarea i configurarea
automat a acestuia pe calculatorul curent.
Pasul 5 - Permisiunile
Aceast etap este foarte important din punctul de vedere al structurii reelei.
Prima opiune (Permissions compatible with pre-Windows 2000 servers) ofer
posibilitatea de a conecta la server staii care au instalat sisteme de operare mai vechi
dect Windows 2000. A doua opiune (Permissions compatible only with Windows 2000
servers) asigur o securitate mult mai bun domeniului creat.
n cazul n care toate staiile i serverele din domeniul creat au drept sistem de
operare Windows 2000 sau un sistem Windows mai nou, se recomandm a doua
opiune. Dac nu, atunci obligatoriu este utilizarea primei opiuni.
n cazul n care pe viitor pot exista cderi ale serviciului Active Directory,
serverul poate fi pornit n Directory Service Restore Mode care permite o recuperare a
informaiilor. Pentru accesul la aceast opiune avei nevoie de o parola. Pentru a accesa
opiunea de Restore, introducei CD-ul cu kit-ul de instalare a sistemului de operare n
unitatea de CD-ROM i repornii sistemul. Dup repornire, se lanseaz aplicaia Setup
de pe CD i alegei opiunea Restore (tasta R).
Pasul 6 - Ultima etap
Ultima etap ne prezint un scurt sumar al informaiilor configurate, dup care
se trece la configurarea efectiv a Active Directory.
Pentru a putea configura Active Directory avei nevoie de CD-ul de instalare a
sistemului de operare W2K Server, ntr-o etap anterioar, litera CD-ROM-ului a fost
schimbat cu Z : aa c fiierele de instalare trebuie cutate la aceast nou locaie, n
directorul I386 de pe discul d-voastr.
Finalizarea instalrii presupune n acelai timp repornirea serverului pentru
iniializarea noilor parametri de configurare a acestuia.
Dup repornire, n fereastra de conectare (Log On to Windows) apare o nou
list de opiuni din care putei alege domeniul la care v vei conecta. Pe fiecare staie

29
Tehnologii Internet
de lucru inclus n viitorul domeniu va aprea, pe lng numele domeniului, numele de
NetBIOS al staiei.
Pentru a nu mai vizualiza de fiecare dat la repornire fereastra de configurare a
serverului, dezactivai opiunea Show this screen at startup i nchidei fereastra.
Una dintre ultimele modificri pe care trebuie s le efectuai este reprezentat de
schimbarea adresei DNS de la configurarea adaptorului de reea din 127.0.0. l (adresa de
loopback) n adresa serverului care reprezint n acest moment i server de DNS :
1. RClick (pe pictograma My Network Places) Properties.
2. RClick (pe Local Area Connection) Properties.
3. Internet Protocol (TCP/IP) Properties introducei adresa serverului
la seciunea Preferea DNS server OK pentru vizualizarea n bara de aplicaii a
informaiilor despre conexiunea la reea, activai opiunea Show icon in taskbar when
connected) OK.

3.2.2. Dezinstalarea serviciului Active Directory


Aceast opiune permite administratorilor de sistem schimbarea destinaiei unui
server din cadrul unei reele. Alte cazuri n care aceast opiune se poate aplica este
aceea n care unui server i se atribuie rolul de server de Web ntr-un domeniu.
Pentru acest lucru trebuie s parcurgei urmtoarele etape :
1. Start Run scriei dcpromo OK Next.
2. n fereastra de informare apsai OK.
3. n cazul n care nu avei un server de domeniu secundar, toate informaiile
despre conturile de utilizatori vor fi eliminate, de asemenea politicile de securitate
precum i cheile publice de acces la diferite resurse. Domeniul nu va mai exista!
Selectai opiunea This server is the last domain controller in the domain n cazul n
care nu mai exist nici un alt server de domeniu n reea i apsai Next.

3.3. Instalarea i configurarea unui server de Web


Instalarea serviciului de Web pentru un server se poate realiza o dat cu
instalarea sistemului de operare sau poate fi instalat ulterior:
1. Start Setting Control Panel;
2. Add/Remove Programs Add/Remove Windows Components
Add/Remove Components;
3. n fereastra Windows Components Wizard click pe Internet Information
Services (ISS) Details;
4. Activai Internet Information Service Snap-In, pentru a putea gestiona
serviciul IIS dintr-o consol administrativ. n aceast etap se activeaz
automat i opiunea Common files;
5. Activai opiunea World Wide Web Server;
6. OK Next Next Finsh Close.

Dup efectuarea acestei operaiuni, n Administrative Tools apare o nou


categorie: Internet Service Manager, din care poate fi gestionat noul server Web.
NOT: acest server Web este disponibil i sub Windows XP Profesional.

Pe discul C:, de pe sistem a aprut un nou director: Inetpub, toate noile pagini pe

30
Cap 3: Servicii Internet sub Windows
care le vei crea fiind gzduite n subdirectorul wwwroot.
Verificarea funcionalitii serverului se poate face lansnd Internet Explorer, iar
la adres se trece localhost. Pagina care se afieaz conine informaii despre versiunea
serverului, documentaia online, posibilitatea de administrare a serverului.
Pentru crearea propriilor pagini putei folosi orice editor de pagini Web sau
scrierea codului HTML a paginilor ntr-un editor de texte. n listing-ul urmtor se
prezint pagin de start n care se va specifica faptul c pagina este n construcie.
<HTML>
<HEAD>
<TITLE> Bun venit !! </TITLE>
</HEAD>

<BODY bgColor=" 3A6EA5" text="white">


<H1><CENTER> Aceast pagin este nc n construcie !!
</CENTER></H1>
<P> V rugm revenii ! </P>
</BODY>
</HTML>

Culoarea de background specificat la tag-ul <BODY> este echivalentul culorii


implicite a background-ului din Windows 2000. Am ales aceast culoare pentru a putea
integra o pagin Web pe desktop-ul staiilor de lucru din domeniu. Putei crea pagina
prin introducerea codului direct n notepad i salvai cu o anumit denumire (de
exemplu, HomePage) i extensia HTM, la adresa: C \Inetpub\wwwroot. vizualizarea
acesteia n browser realizndu-se la adresa http : //localhost/HomePage.htm.
Pentru a ncrca pagina creat anterior, n mod implicit, cnd se acceseaz
serverul, trebuie s modificai proprietile implicite ale site-ului d-voastr:
1. n consola de administrare a IIS : RClick pe Default Web Site Properties.
2. n fereastra de proprieti: Documents Add scriei numele fiierului n
csua Default Document Name (n cazul nostru, HomePage.htm) OK.
3. Poziionai documentul pe primul loc prin apsarea butonului cu sgeat n
sus OK.
n acest moment, pagina de start la accesarea serverului, specificnd adresa
localhost, va fi cea creat n etapa anterioar.
Adresa la care poate fi accesat serverul Web de pe alt staie de lucru sau oricare
alt server din reea se poate specifica n genul http: //nume_calculator/ (n cazul nostru
http: //WebServer/") sau prin adresa IP (http://192.168.123.100/').
Instalarea unui server de e-mail ntr-un domeniu Windows trebuie s se realizeze
pe un server declarat mail exchanger n domeniul DNS, care v ofer acces la Internet.
Serverul de e-mail oferit de firma Microsoft este Exchange Server. Acesta se poate
integra cu Active Directory i cu SQL Server.

3.4. Configurarea serverului ca un Gateway


Condiia esenial pentru a instala un gateway este existena a cel puin dou
interfee de reea, una cu conectare direct la Internet (n cazul nostru IP-ul interfeei
Internet este : 193.231.34.101, iar pentru interfaa intern: 192.168.123.254) i cealalt
destinat reelei interne.
Atribuirea rolului de router unui server de Windows 2000 :
31
Tehnologii Internet
1. Start Programs Administrative Tools Routing and Remote Access.
2. RClick pe numele serverului Configure and Enable Routing and Remote
Access Next.
3. n fereastra Common Configurations alegei opiunea pe care o dorii (n cazul
nostru putem alege ultima variant, pentru c scopul nostru este de a configura
rolul de punte serverului n aa fel nct calculatoarele din reeaua privat s
comunice cu cele din alte reele) Next.
4. Finish.

Un serviciu special care poate fi configurat n aceast etap este NAT (Network
Address Translatiori) care presupune ca staiile de lucru dintr-un anumit domeniu
(Intern) s poat accesa alte reele de pe Internet prin intermediul interfeei de reea
reale (cea cu conectare direct la Internet).
Instalarea serviciului NAT:
1. n Routing and Remote Access, RClick pe General din IP Routing New
Routing Protocol Network Address Tmnslation (NAT) OK.
2. RClick pe Network Address Translation (NAT) New Interface.
3. n fereastra New Interface for... click pe interfaa de reea care face legtur cu
reeaua privat OK.
4. n fereastra N.A.T. Properties activai opiunea Private interface connected io
private network OK.
5. RClick pe Network Address Translation (NAT) New Interface.
6. n fereastra New Interface for... click pe interfaa de reea care face legtur cu
reeaua Internet OK.
7. n fereastra N.A.T. Properties activai opiunea Public interface connected to the
Internet Translate TCP/UDP headers (recommended) OK.

Dup configurarea acestui serviciu, toate staiile de lucru din domeniul Intern
care au trecut de la proprietile TCP/IP la seciunea Gateway, IP-ul intern al serverului,
vor putea s acceseze alte reele de pe Internet.
Pentru controlul accesului, monitorizarea i controlul traficului precum i
configurarea unui firewall, trebuie instalat pachetul Microsoft Internet Security and
Acceleration Server 2000.

32
4. Protocoale si servicii
4.1. DNS (Domain Name Service)
4.1.1. Introducere
Domain Name System (DNS) este un sistem distribuit de pstrare i interogare a
unor date arbitrare ntr-o structur ierarhic (figura 4.1). Cea mai cunoscut aplicaie a
DNS este gestionarea domeniilor n Internet.
Caracteristicile sistemului de nume (DNS) sunt:
folosete o structur ierarhizat;
deleag autoritatea pentru nume;
baza de date cu numele i adresele IP este distribuit.
Fiecare implementare TCP/IP conine o rutin software (name resolver)
specializat n interogarea serverului de nume (DNS) n vederea obinerii translatrii
nume/adres IP sau invers.

nregistrarea resurselor
asociate cu un nume
"Zon
delegat" Zon de autoritate, administrat
de un name server

Fig. 4.1: Sistemul ierarhic DNS

Exist 2 tipuri de rezoluie de nume:


rezoluie recursiv (name resolverul cere serverului de nume s fac
translatarea);
rezoluie iterativ (name resolverul cere serverului de nume s i furnizeze
adresa IP a unui server care poate face translatarea).

Tipic, procesul de rezoluie a numelor se desfoar astfel:


name resolverul primete de la o aplicaie client TCP/IP un nume; acesta
formuleaz o interogare primului server de nume din lista serverelor;
serverul de nume (DNS) determin daca este mandatat (autorizat) pentru
domeniul respectiv (dac exist configurat o zon DNS care conine numele

33
Tehnologii Internet
respectiv);
dac este autorizat, transmite rspunsul clientului;
dac nu, transmite o interogare altui server de nume pentru un rspuns autorizat;
obine rspunsul autorizat i transmite clientului un rspuns neautorizat; totodat
stocheaz rspunsul local pentru a rspunde la alte cereri pentru acelai nume.
resolverul de nume transmite rspunsul aplicaiei utilizator i l pstreaz ntr-un
cache pentru o anumit perioad;
dac name resolverul nu primete un rspuns ntr-un anumit timp, transmite
cererea urmtorului server de nume din list. Cnd lista este epuizat, va genera
o eroare.

DNS-ul foloseste n special protocolul UDP, port 53, pentru a deservi cererile.
Majoritatea tranzaciilor DNS constau ntr-o cerere UDP de la client, urmat de un
rspuns de la server. RFC1034 i RFC1035 definesc urmtoarele tipuri de nregistrri
manipulate de sistemul DNS:
nregistrarea A (adres) asociaz o adres IP unui nume;
nregistrarea AAAA este echivalent cu nregistrarea A, dar se aplic
protocolului IPv6;
nregistrarea CNAME este un pseudonim pentru un domeniu, care permite
coexistena a mai multor nume pentru o main, astfel nct s poat fi descris
mai bine existena anumitor servicii. De exemplu ftp, www, mail pot fi
CNAME-uri pentru maina test.exemplu.com ;
nregistrare MX (mail exchanger) definete numele serverelor de mail care
accept mail pentru un anumit domeniu. nregistrrile MX au asociat o
prioritate, sub form numeric, prioritatea cea mai mic, ca valoare, indicnd
serverul de mail principal;
nregistrarea PTR asociaz un nume de main unei adrese IP, fiind folosit n
special de serverele de mail (rezolvarea invers);
nregistrarea NS indic numele serverelor DNS care sunt autoritare pentru o
zon sau domeniu. Aceste nregistrri trebuie s conin numele canonice ale
mainii (numele canonic este cel indicat printr-o nregistrare A i care apare i n
nregistrarea PTR);
nregistrarea SOA (start of authority) indic, n primul rnd, serverul DNS
master pentru o anumit zon, precum i alte informaii, cum ar fi, de
exemplu,TTL-ul (time to live timpul maxim ct poate fi pstrat rspunsul DNS
de ctre serverele cache);
nregistrarea TXT permite administratorului sa insereze informaii suplimentare
intr-o inregistrare DNS.

4.1.2. Instalarea i configurarea serverului BIND


BIND (Berkeley Internet Name Domain) este cea mai cunoscut implementare
DNS n lumea Open Source. Serverul BIND, ajuns la versiunea major 9, este compus
dintr-un daemon (serviciu Unix), numit named, care este serverul propriu-zis, i dou
biblioteci de rezolvare, liblwres i libbind.
Sistemul de operare FreeBSD vine preinstalat cu serverul BIND, el trebuind
activat. Activarea servciului DNS se face adugnd n fiierul de configurare rc.conf
34
Cap 4: Protocoale i servicii
linia
named_enable=YES

Configurarea serverului BIND se face n mai muli pai:


se editeaz fiierul /var/named/etc/namedb/named.conf
se editeaz fiierele zon
se pornete efectiv serverul i se testeaz, corectnd eventualele erori

4.2. Remote Login (SSH, Telnet) SSH


n computing, Secure Shell sau SSH este un set de protocoale de internet
standard i asociate care permite stabilirea unui canal sigur ntre un computer local i
unul controlat de la distana (remote). Este folosit criptografie public-key pentru a
autentifica computerul controlat i (opional) s permit computerului controlat s
autentifice utilizatorul . SSH asigur confidenialitatea i integritatea datelor schimbate
ntre cele dou computere prin folosirea encriptrii i a codurilor de autentificare a
mesajelor (MACs). SSH este de obicei folosit pentru conectarea de la distan i
executarea de comenzi pe acel computer, dar suport de asemeni tunneling, trimiterea
ctre porturi TCP arbitrare i conexiuni X11; poate face transfer de fiiere folosind
protocoalele asociate SFTP sau SCP.
Un server SSH, implicit, ascult pe portul standard TCP 22 . Informaii
suplimentare n http://en.wikipedia.org/wiki/Secure_Shell. Un program ssh client este
folosit de obicei pentru stabilirea unei conexiuni cu un sshd daemon care accept
conexiuni remote. Ambele (clientul si serverul) sunt prezente pe majoritatea sistemelor
de operare moderne, inclusiv Mac OS, Linux, Solaris i OpenVMS.
Istoric
n 1995 a fost proiectat prima versiune a acestui protocol, numit n prezent
SSH-1. Scopul acestuia a fost nlocuirea lui rlogin, TELNET i rsh, care nu ofer o
autentificare puternic sau garantarea confidenialitii.
n 1996 apare o versiune revizuit a protocolului, SSH-2, incompatibil cu SSH-
1. Noile faciliti ale lui SSH-2 sunt: abilitatea de a rula oricte sesiuni shell pe o
singur conexiune SSH, o securitate mai bun vine cu algoritmul Diffie-Hellman de
schimbare a cheilor i o verificare a integritii via MAC.
n 1999 a aprut OpenSSH, implementat n versiunea 2.6 a Open BSD. De la
aceast versiune s-a ncercat portabilitatea lui OpenSSH ctre alte sisteme de operare.
Astfel, n 2005, OpenSSH este cea mai popular implementare ssh, fiind inclus
ntr-un numr mare de sisteme de operare.

4.2.1. Arhitectura lui SSH


n figura 4.2 se prezint diagrama pachetului ssh-2.
Protocolul SSH-2 are o arhitectur intern clar (definit n RFC-4251) cu
straturi bine separate. Acestea sunt:
stratul Transport acest strat se ocup cu schimbul iniial al cheii i
autentificarea serverului i stabilete criptarea, compresia i verificarea
integritii. El expune ctre starul superior o interfa pentru trimiterea i
recepia pachetelor plaintext de peste 32.768 bytes fiecare. De asemenea, stratul

35
Tehnologii Internet
transport pregtete re-negocierea cheii, de obicei dup transferarea a 1 GB de
date sau dup 1 or de la iniierea conexiunii;

Iniial nefuncional,
pachet_length padding_length payload Cel puin 4 bii apoi implementat n
aleatorii de umplutur concordan cu
uint32 byte byte
byte algoritmul i cheia
(pachet_length)- negociate
(padding_length) umplutur de lungime
-1 aleatorie negociere secret cu
algoritmul "mac"
calculare folosind o
Iniial necomprimat, apoi opional cheie public,
comprimat n conformitate cu numrul de secven
schema de comprimare negociat al pachetului i
(n general zlib) coninutul pachetului

Sire de date: iniial necriptat, apoi


obligatoriu criptate n conformitate
cu algoritmul i cheia de criptare
negociate (n general aes128-cbc)

Codul mesajului
autentificat

byte
Fig. 4.2: Arhitectura
pachetului SSH-2
mac_length

stratul Autentificarea utilizatorului se ocup cu autentificarea clientului i


ofer un numr de metode de autentificare. Autentificarea este dictat de client,
un fapt de obicei neneles de utilizatori; cnd este cerut/sugerat o parol, este
cerut/sugerat clientului SSH nu serverului. Serverul pur i simplu rspunde
cererii clientului de autentificare. Metodele de autentificare a utilizatorului
includ urmtoarele:
o "password" o metod pentru o autentificare direct parolat, incluznd
facilitatea ce permite schimbarea parolei. Aceast metod nu este
implementat de toate programele;
o "publickey" o metod pentru o autentificare bazat pe cheie public, de
obicei suportat cel puin de perechea DSA sau RDA;
o " keyboard-interactive " o metod versatil n care serverul trimite una
sau mai multe prompt-uri pentru a introduce informaii i clientul le
afieaz i trimite rspunsul napoi. Folosite pentru a oferi autentificarea
printr-o singur parol cum ar fi S/Key sau SecurID.
stratul Connection (RFC 4254) definete conceptul canalelor, cererii canal i
cererii globale folosind serviciul SSH care este disponibil. O singur conexiune
SSH poate gzdui simultan multiple canale, fiecare canal transfernd date n
ambele direcii. Cererea canal este folosit pentru a schimba date specifice din
afara canalului, cum ar fi: modificarea mrimii ferestrei terminalului sau codul
de ieire a proceselor in partea serverului. Clientul SSH cere un port pe partea
serverului pentru a fi expediat folosind o cerere global. Tipurile standard de
canale includ:

36
Cap 4: Protocoale i servicii
o "shell" pentru terminale shell, SFTP i cereri de execuie (inclusiv
transferuri SCP);
o "direct-tcpip" pentru expedierea conexiunilor client ctre server;
o "forwarded-tcpip" pentru expedierea conexiunilor server ctre client;

Aceast arhitectur deschis (open) ofer o flexibilitate considerabil, permind


SSH s fie folosit pentru a varietate de scopuri peste un shell1 securizat. Funcionalitatea
stratului transport este compatibil cu TLS; stratul autentificare user este extrem de
extensibil cu metode de autentificare particulare, i stratul conexiune ofer abilitatea de
a multiplexa mai multe sesiuni secundare ntr-o singur conexiune SSH.

Securitatea SSH
n toate versiunile de SSH, este important verificarea cheilor publice
necunoscute nainte de a le accepta ca valide. Acceptarea unei chei publice de la un
atacator drept chei publica valid are efectul dezvluirii parolei transmise i permite
celui care o afl s atace.
Ac orice protocol criptat, SSH poate fi considerat cu risc de securitate de ctre
companiile care nu au ncredere n proprii utilizatori i care doresc sp trag cu urechea
la propriile comunicaii. n plus, SSH are integrat faciliti de tunelare care n fac mai
uor pentru utilizatori s obin pasaje a unor volume mari de informaii sau s
stabileasc puncte de intrare pentru acces intern neautorizat peste legturi SSH fa de
alte protocoale.

4.3. HTTP protocolul http


HTTP (Hypertext Transfer Protocol) este metoda cea mai des utilizat pentru
accesarea informaiilor n Internet care sunt pstrate pe servere WWW (World Wide
Web). Protocolul HTTP este un protocol de tip text, fiind protocolul "implicit" al
WWW. Adic, dac un URL nu conine partea de protocol, aceasta se consider ca fiind
http. Acesta presupune rularea unui program corespunztor pe calculatorul destinaie
care nelege protocolul respectiv. Fiierul destinaie poate fi un document HTML
(HyperText Markup Language), un fiier grafic, de sunet, de animaie, un program
executabil pe server-ul respectiv sau un editor de texte. Dup clasificarea n funcie de
modelele de referin OSI, protocolul HTTP este un protocol de nivel aplicaie.
Dezvoltarea sa este coordonat de W3C (World Wide Web Consortium).

4.3.1. Modul de funcionare


HTTP are o tehnic de comunicare prin care pagini web se pot transmite dela un
Computer aflat la distan spre propiul Computer. Dac se apeleaz un link sau adres
de web ca http://www.example.com se cere calculatorului host s afieze o pagin web (
index.html sau altele ). Numele www.example.com vine n prim faz convertit de
protocolul DNS ntr-o adres IP. Urmeaz transferul prin protocolul TCP pe portul
standard 80 a serverului HTTP rspunsul la cererea HTTP-GET. Informaii
suplimentare ca indicaii pentru Browser, limba dorit, e.t.c. se pot aduga n header-ul (
antetul ) pachetului HTTP. n urma cererii HTTP-GET urmeaz din partea serverului
rspunsul cu datele cerute ca : pagini n (X)HTML, cu fiiere ataate ca imagini, fiiere
1
Shell o pies software care ofer o interfa utilizator.
37
Tehnologii Internet
de stil ( CSS ), scripturi ( Javascript ), dar pot fi i pagini generate dinamic (SSI, JSP,
PHP i ASP.NET). Serverul trimite napoi un mesaj de eroare, dac informaiile nu pot
fi trimise dintrun anumit motiv. Modul exact de desfurare aacestei aciuni ( cerere i
rspuns ) este stabilit n specificaiile HTTP.

4.3.2. Transferul argumentelor


Deseori dorete un utilizator s transmit informaii speciale la website. Aici
pune la dispoziie HTTP dou posibiliti :
1. Transferul datelor n combinaie cu o cerere dup o resurs (HTTP-metoda
"GET")
2. Transferul datelor n combinaie cu o cerere special (HTTP-metoda "POST")

Datele transferate vin deseori codate.


La metoda GET se utilizeaz partea de cerere Uniform Resource Identifiers cu
semnul ?.
Aceast metod se utilizeaz, pentru a transfera o list de parametrii, pe care
partea opus trebuie s o ia n considerare la prelucrarea cererii.
Deseori aceast list cuprinde perechi de valori separate prin semnul &, care
sunt alctuite din numele parametrului, semnul = i valoarea parametrului. Rareori vine
utilizat semnul ; pentru separarea nregistrrilor listei [1].

Exemplu: la pagina de start de la wikipedia se introduce n cmpul de cutare termenul


pisici, se alege categoria articole i se apas butonul de cutare.

Browserul trimite atunci urmtoarea cerere la server :


GET /wiki/Spezial:Search?search=Katzen&go=Artikel HTTP/1.1 Host:
de.wikipedia.org ...

Serverului Wikipedia vin transmise dou perechi de valori : Argument Valoare


search pisici go articol
Perechile de valori se transmit sub forma
Argument1=valoare1&Argument2=valoare2
iar cu ? se ataeaz pagina. Astfel tie serverul c utilizatorul dorete s vad
articole despre pisici.
Serverul prelucreaz cererea, dar nu trimite un fiier ci redirecteaz browserul cu
un Location-Header spre pagina dorit :
HTTP/1.0 302 Moved Temporarily Date: Fri, 13 Jan 2006 15:12:44 GMT
Location: http://de.wikipedia.org/wiki/Katzen ... Browserul ascult indicaia i emite pe
baza noilor informaii o nou cerere : GET /wiki/Katzen HTTP/1.1 Host:
de.wikipedia.org ... Serverul rspunde i ofer pagina cu articole despre pisici :
HTTP/1.0 200 OK Date: Fri, 13 Jan 2006 15:12:48 GMT Last-Modified: Tue,
10 Jan 2006 11:18:20 GMT Content-Language: de Content-Encoding: gzip Content-
Type: text/html; charset=utf-8
.........ZKs..>.-[K!luV*3.r`+.Fx!
..7t."9.A.

Partea de date este mai lung i de necitit din cauza compresiei gzip.

38
Cap 4: Protocoale i servicii
n cazul unei cereri POST variabilele nu se afl n URI, ci n partea body :
POST /wiki/Spezial:Search HTTP/1.1 Host: de.wikipedia.org Content-Type:
application/x-www-form-urlencoded Content-Length: 24

search=Katzen&go=Artikel Serverul rspunde astfel : HTTP/1.0 302 Moved


Temporarily Date: Fri, 13 Jan 2006 15:32:43 GMT Location:
http://de.wikipedia.org/wiki/Katzen

4.3.3. Versiuni
HTTP/0.9 - prima versiune dezvoltat de Tim Berners-Lee i echipa sa, fiind
foarte simplu, dar cu numeroase neajunsuri, fiind repede nlocuit de alte versiuni;
HTTP/1.0 versiune introdus n 1996 prin RFC1945, a adus numeroase
mbuntiri;
HTTP/1.1 versiune de mbuntire i reparare a neajunsurilor versiunii
anterioare;

n prezent se utilizeaz dou versiuni ale protocolului, HTTP/1.0 i HTTP/1.1.


La versiunea HTTP/1.0 se stabilete o nou conexiune TCP naintea cererii, iar dup
transmiterea rspunsului conexiunea vine nchis. Astfel dac un document HTML
cuprinde 10 imagini, vor fi necesare 11 conexiuni TCP, pentru ca pagina s fie afiat n
Browser. La versiunea 1.1 se pot emite mai multe cereri i rspunsuri pe o conexiune
TCP. Astfel pentru documentul HTML cu 10 imagini este necesar doar o conexiune
TCP. Deoarece viteza conexiunii TCP este la nceput mic datorit algoritmului Slow-
Start, se scurteaz semnificativ durata de ncrcare a paginii. La aceasta se adaug faptul
c versiunea 1.1 poate continua transferuri ntrerupte. La HTTP se pierd informaiile
cererilor vechi ( deci este un protocol fr reinerea strii ). Prin utilizarea de cooki-uri
n header, se pot realiza aplicaii, care pot utiliza informaii de stare ( alegerile
utilizatorului, co de cumprturi ). Chiar i o recunoatere a utilizatorului este astfel
posibil. n mod normal se pot citi informaiile transmise care parcurg reeaua pe
computere i rutere. Prin HTTPS transferul se poate cripta.

Noua versiune se poate utiliza in chat-uri prin utilizarea MIME-tip-ului


multipart/replace care renoiete complet coninutul ferestrei browser-ului. Noua
versiune permite pe lng preluarea datelor i transmiterea de date la server. Cu ajutorul
metodei PUT pot webdesignerii s-i publice paginile web pe webserver prin WebDAV,
iar prin metoda DELETE chiar i terge de pe server. De asemenea ofer HTTP/1.1 o
metod TRACE, prin care se poate urmrii calea spre webserver, i astfel s se verifice
dac datele au fost corect transferate. Astfel se poate urmrii calea prin diferite proxi-uri
spre webserver, un traceroute la nivel aplicaie.

4.3.4. Metode
Metodele disponibile sunt :
GET : este cea mai folosit metod, fiind utilizat atunci cnd este cerut o
resurs serverului.
HEAD : se comport exact ca metoda GET, dar serverul returneaz doar antetul
resursei, ceea ce permite clientului s inspecteze antetul resursei far a fi nevoit

39
Tehnologii Internet
s ia i corpul resursei.
PUT : metoda este folosit pentru a pune documente pe server, fiind inversul
metodei GET.
POST : a fost proiectat pentru a trimite date de intrare ctre server.
DELETE : este opusul metodei PUT.
TRACE : este o metod folosit de obicei pentru diagnosticare, putnd da mai
multe informaii despre traseul urmat de legtura HTTP, fiecare server proxy
adugndu-i semntura n antetul Via.
OPTIONS : este folosit pentru identificarea capacitilor serverului Web,
nainte de a face o cerere.
CONNECT : este o metod folosit n general de serverele intermediare.

Exemplu

Cererea clientului :
GET / HTTP/1.1
Host: www.example.com

Rspunsul serverului:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html

4.3.5. Serverul Web Apache


Apache este un server HTTP de tip open-source. Apache a jucat un rol important
n dezvoltarea Web-ului, fiind folosit n prezent n 50% din paginile web.

Instalare Apache, MySQL i PHP n Windows


n continuare se prezint paii necesari instalrii celor trei pachete gratuite i
open-source: apache, MySQL i php pe un sistem de operare Windows.
Pentru exemplificare se folosesc:
Sistem de operare: Windows XP Professional (SP2);
Server web: Apache 2.2.2;
Server baze de date: MySQL 5.0.22;
Interpretor: PHP 5.1.4

4.3.5.1. Instalare Apache 2.2.2


Mai nti se obin binarele serverului: apache_2.2.2-win32-x86-no_ssl.msi
(aproximativ 4,2 MB) de pe http://httpd.apache.org/, seciunea download.
Dup ce am descrcat kit-ul, ncepem instalarea, executnd dublu-clik pe
40
Cap 4: Protocoale i servicii
executabil (dac n sistem exist deja o versiune mai veche a serverului, aceasta trebuie
dezinstalat n prealabil).
Urmeaz Next apoi citim (eventual i suntem de acord cu) termenii i condiiile
dup care Next din nou. Citim i instruciunile de folosire i iar Next.
Am ajuns la informaiile despre server, unde completam astfel:
Network Domain (e.g. somenet.com): localhost
Server Name (e.g. www.somenet.com): localhost
Administrator's Email Address (e.g. webmaster@somenet.com):
tu@domeniu.ro
iar mai jos, in aceeai fereastra, bifm

for All Users, on port 80, as a Service -- Recommended

Astfel, serverul Apache se va instala ca serviciu, va porni automat odat cu


Windows-ul si va fi disponibil pentru toi utilizatorii sistemului.
n continuare Next. Ne ntreab de tipul instalrii, bifm Typical i apsm Next.
n continuare, suntem informai c Apache se va instala n C:\Program Files\Apache
Software Foundation\Apache 2.2\. Totul e ok i aici, i dam Next i Install
Installerul i-a fcut treaba, apsm Finish i am terminat cu instalarea serverului
Apache n Windows (vom reveni mai trziu asupra configurrii acestuia). Dac totul a
decurs n regula, vei observa c a aprut o iconia nou n System Tray (n dreapta jos,
unde este i ceasul).

4.3.5.2. Instalare MySQL 5.0


Obinem binarele serverului: http://dev.mysql.com/downloads/mysql/5.0.html
(aproximativ 36,7 MB)
Deschide arhiva (implicit, Windows-ul tie s deschid arhive .zip) i, ca de
obicei, dublu-click pe executabilul din interior (Setup.exe) (Daca n sistem exist deja
41
Tehnologii Internet
instalat o versiune mai veche de MySQL, trebuie dezinstalat. De notat este c dup
dezinstalare, fiierele bazelor de date create cu versiunea veche se pstreaz
(C:\Program Files\MySQL\MySQL Server 5.0\data) i se vor putea refolosi n noua
versiune.).
n continuare Next, iar apoi alegem Typical la tipul instalrii i Next din nou.
Mai departe, ne este prezentat rezumatul instalrii. Apsm Install
Mergnd mai departe, ne este prezentat o fereastr in care este prezent o bif
cu Configure the MySQL Server now
O bifm i apsm Finish, pentru a continua cu configurarea serverului MySQL.
Se va deschide utilitarul de configurare al serverului, n care apsm Next, n
urmtoarea fereastr bifm Standard Configuration i, bineneles, Next.
n continuare, bifam Install As Windows Service pentru ca serverul s se
instaleze ca serviciu i s porneasc de fiecare dat cnd pornete Windowsul. Apsm
Next.
Ne sunt prezentate dou cmpuri, n ambele introducem aceeai parol, a
userului root. Parola o vom folosi ulterior pentru a ne conecta la serverul MySQL.
Apsm Next. Urmtoarea fereastr ne prezint paii ce vor fi executai pentru
configurarea serverului. Apsm Execute iar apoi Finish

4.3.6. Instalare PHP 5.1.4


Obinem binarele interpretorului: PHP 5.1.4 zip package (aproximativ 8,9 MB)
precum i colecia de extensii pentru acesta, Collection of PECL modules for PHP 5.1.4
(aproximativ 2,2 MB)
Dezarhivm coninutul arhivei php-5.1.4-Win32.zip n directorul c:\php\ iar
coninutul arhivei pecl-5.1.4-Win32.zip n directorul c:\php\ext\, proaspt creat anterior
Urmtorul pas este copierea fiierelor c:\php\php5apache2.dll,
c:\php\dev\php5ts.lib i c:\php\php5ts.dll n directoarele c:\windows,
c:\windows\system i c:\windows\system32. Se recomand i copierea fiierelor din
c:\php\ext n directoarele menionate anterior.
n continuare, cream fiierul de iniializare al PHP-ului. Astfel, copiem fiierul
php.ini-recommmended n directorul c:\windows\php.ini, urmnd ca pe viitor s se
editeze acest fiier pentru a activa/dezactiva/modifica diverse opiuni ale PHP-ului.

Acestea fiind zise, s-a terminat cu instalarea PHP-ului. Acum trebuie s se


modifice fiierul de configurare al serverului Apache, pentru ca acesta s tie s
serveasc scripturile PHP. Deschidem fiierul C:\Program Files\Apache Software
Foundation\Apache2.2\conf\httpd.conf cu un editor text (Notepad, de exemplu) i se
modific astfel ("..." reprezint rnduri care pot fi ignorate):

ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"


...
LoadModule php5_module "c:/php/php5apache2.dll"
...
DocumentRoot "C:/calea/catre/fisierele/siteurilor/tale"
...
<Directory "C:/calea/catre/fisierele/siteurilor/tale">
...
<IfModule dir_module>

42
Cap 4: Protocoale i servicii
DirectoryIndex index.php index.html
</IfModule>
...
<IfModule mime_module>
....
AddType application/x-httpd-php .php
...
</IfModule>

Acestea fiind zise, se restarteaz sistemul i gata, avem un server web sub
Windows. Pentru a verifica dac totul e in regul, se creeaz un fiier test.php n
directorul C:/calea/catre/fisierele/siteurilor/tale

<?php
phpinfo();
?>

i se acceseaz n browser http://localhost/test.php sau http://127.0.0.1/test.php

4.4. FTP Protocolul FTP


4.4.1. Instalarea i configurarea unui server FTP
Drept server ftp, am optat pentru pachetul pure-ftpd (http://www.pureftpd.org/) ,
fiind o implementare stabil, conform cu standardele, bine securizat. Aceast
distribuie a fost aleas deoarece ofer un foarte bun suport pentru utilizatori virtuali,
avnd posibilitatea folosirii chiar i a bazelor de date (MySQL, PostgreSQL).
Pachetul se poate instala fie din colecia de porturi (/usr/ports/ftp/pure-ftpd) sau
cu ajutorul utilitarului pkg_add (figura 4.3).

Fig. 4.3. Instalare pure-ftpd cu pkg_add

43
Tehnologii Internet
n ambele cazuri, dup instalare, trebuie editat manual fiierul de configurare al
serviciului, activat s porneasc automat odata cu pornirea sistemului de operare i
lansat n execuie.
Fiierul de configurare, pure-ftpd.conf, trebuie amplasat n directorul
/usr/local/etc (figura 4.4)

Fig.4.4: pure-ftpd.conf
Structura fiierului pure-ftpd.conf este prezentat n anexe. Important de
menionat este faptul c serverul a fost configurat s nu permit accesul anonim,
utilizatorul fiind blocat n directorul su (chroot), evidena utilizatorilor fiind pstrat n
sistemul nativ de baze de date, puredb.
Pentru a se putea crea utilizatori virtuali, n sistemul de operare trebuie creat un
cont de utilizator, care s nu aib posibilitate de login i director home. Acest utilizator
real este necesar deoarece, dup autentificarea prin protocolul ftp, utilizatorul virtual va
fi impersonalizat (va primi identitatea) acestui utilizator real.
n liniile de mai jos este prezentat secvena de comenzi pentru crearea
utilizatorului de sistem i a unui utilizator virtual.
ns1# adduser
Username: ftp
Full name: FTP Virtual user
Uid (Leave empty for default):
Login group [ftp]:
Login group is ftp. Invite ftp into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/ftp]: /dev/null
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : ftp
Password : <disabled>
Full Name : FTP Virtual user
Uid : 1005
Class :
Groups : ftp
44
Cap 4: Protocoale i servicii
Home : /dev/null
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (ftp) to the user database.
Add another user? (yes/no): no
Goodbye!
ns1# pure-pw useradd admin -u ftp -g ftp -d /usr/local/ftp
Password:
Enter it again:
ns1# pure-pw mkdb
ns1# cd /usr/local/etc/rc.d/
ns1# ./pure-ftpd forcestart
Starting pureftpd.
Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -E -fftp -H
-I15 -lpuredb:/usr/local/etc/pureftpd.pdb -L2000:8 -m4 -s -U133:022 -
u100 -k99 Z
ns1# mkdir /usr/local/ftp
ns1# chown -R ftp:ftp /usr/local/ftp/

n liniile de mai sus se remarc necesitatea crerii unui director pentru


utilizatorul virtual, n cazul de fa /usr/local/ftp.

4.5. SMTP protocolul SMTP


SMTP (Simple Mail Transfer Protocol) este un protocol simplu, folosit pentru
transmiterea mesajelor n format electronic pe Internet. SMTP folosete portul de
aplicaie 25 TCP i determin adresa unui server SMTP pe baza nregistrrii MX (Mail
eXchange) din configuraia serverului DNS.
Protocolul SMTP specific modul n care mesajele de pot electronic sunt
transferate ntre procese SMTP aflate pe sisteme diferite. Procesul SMTP care are de
transmis un mesaj este numit client SMTP iar procesul SMTP care primete mesajul
este serverul SMTP. Protocolul nu se refer la modul n care mesajul ce trebuie transmis
este trecut de la utilizator ctre clientul SMTP, sau cum mesajul recepionat de serverul
SMTP este livrat utilizatorului destinatar i nici cum este memorat mesajul sau de cte
ori clientul SMTP ncearc s transmit mesajul.
SMTP a nceput s fie folosit mai des la nceputul anilor 80. La acea vreme era
mai puin folosit dect UUCP (Unix to Unix CoPy), care era mai potrivit pentru
transmiterea emailurilor ntre maini ce nu erau conectate permanent. SMTP ns
funcioneaz mai bine cnd att expeditorul ct i destinatarul mesajului sunt legai n
reea tot timpul. Sendmail a fost unul din primele programe care au implementat acest
protocol. Din 2001 au aprut nc cel puin 50 de programe care implementeaz SMTP
(att servere ct i clieni). Printre cele mai cunoscute servere SMTP amintim Postfix,
qmail, Novell GroupWise,Exim, Novell NetMail i Microsoft Exchange Server.

4.5.1. Funcionare
Comunicarea ntre client i server se realizeaz prin texte ASCII. Iniial clientul
stabilete conexiunea ctre server i ateapt ca serverul s-i rspund cu mesajul 220
Service Ready . Dac serverul e suprancrcat, poate s ntrzie cu trimiterea acestui
rspuns. Dup primirea mesajului cu codul 220, clientul trimite comanda HELO prin
care i va indica identitatea. n unele sisteme mai vechi se trimite comanda EHLO,
comanda EHLO indicnd faptul c expeditorul mesajului poate s proceseze extensiile
45
Tehnologii Internet
serviciului i dorete s primeasc o list cu extensiile pe care le suport serverul. Dac
clientul trimite EHLO iar serverul i rspunde c aceasta comand nu e recunoscut,
clientul va avea posibilitatea s revin i s trimit HELO.
Odat ce comunicarea a fost stabilit, clientul poate trimite unul sau mai multe
mesaje, poate ncheia conexiunea sau poate folosi unele servicii precum verificarea
adreselor de email. Serverul trebuie s rspund dup fiecare comand indicnd astfel
dac aceasta a fost acceptat, dac se mai ateapt comenzi sau dac exist erori n
scrierea acestor comenzi.
Pentru a trimite un mesaj se folosete comanda MAIL prin care se specific
adresa clientului. Dac aceast comand este corecta serverul va rspunde cu mesajul
250 OK. Clientul trimite apoi o serie de comenzi RCPT prin care specific destinatarii
mesajului. Serverul va rspunde cu 550 No such user here, sau 250 OK, n funcie
de corectitudinea comenzii primite. Dup ce se specific destinatarii, i serverul accept
comenzile, se trimite comanda DATA, prin care serverul e anunat c expeditorul va
ncepe s scrie coninutul mesajului. Serverul poate rspunde cu mesajul "503
Command out of sequence" sau "554 No valid recipients" dac nu a primit comenzile
MAIL sau RCPT sau aceste comenzi nu au fost acceptate. Dac serverul va rspunde cu
mesajul 354 Start mail input, clientul va putea introduce textul mesajului. Sfritul
mesajului e marcat cu <CR><LF>.<CR><LF>.

Un server SMTP trebuie s cunoasc cel puin urmtoarele comenzi :


HELO - identificare computer expeditor;
EHLO - identificare computer expeditor cu cerere de mod extins;
MAIL FROM - specificare expeditorului;
RCPT TO - specificarea destinatarului ;
DATA - coninutul mesajului;
RSET Reset;
QUIT - termin sesiunea;
HELP - ajutor pentru comenzi;
VRFY - verific o adres;
EXPN - expandeaz o adres;
VERB - informaii detaliate.

4.5.2. Realizarea comunicaiei SMTP - exemplu


Funcionarea protocolului SMTP poate fi testat simplu prin iniierea unei
conexiuni TCP folosind un client de telnet.
telnet mailhost.domeniu.ro 25
Server: 220 mailhost.domeniu.ro ESMTP
Client: HELO host.domeniu.ro
Server: 250 Hello host.domeniu.ro
Client: MAIL FROM: user@domeniu.ro
Server: 250 Ok
Client: RCPT TO: user@altdomeniu.ro
Server: 250 Ok
Client: DATA
Server: 354 End data with <CR><LF>.<CR><LF>
Client: Subject: test

46
Cap 4: Protocoale i servicii
Client: un mesaj test
Client: .
Server: Mail queued for delivery.
Client: QUIT
Server: 221 Closing connection. Bye.

4.6. POP protocolul POP


POP3 sau Protocolul Post Office Versiunea 3 este, alturi de IMAP, unul din
protocoalele utilizate de un calculator gazd pentru recepionarea potei electronice (e-
mail).
Cu siguran, tipurile nodurilor mai mici n Internet deseori nu sunt practice s
ntrein un sistem de transport al mesajului (MTS). De exemplu, o staie de lucru este
posibil s nu dispun de suficiente resurse (spaiu pe disc) cu scopul de a permite un
server SMTP RFC 821 i asociaz un sistem local de trimitere mail pentru a fi inut
rezident i s ruleze continuu. Similar, poate deveni costisitor (sau imposibil) s menii
un computer interconectat la un IP-style reea pentru o perioad mai mare de timp
(nodul duce lips de resursa cunoscut ca conectivitate). n ciuda acestora, deseori
este foarte util s deserveti pota acestor noduri mai mici i deseori sprijin un
utilizator agent (UA) s ajute la manipularea potei electronice. Pentru a rezolva aceast
problem, un nod care ntreine o entitate MTS ofer un serviciu maildrop pentru aceste
noduri nzestrate mai puin. POP3 a intenionat s permit unei staii de lucru acces
dinamic la maildrop de pe un server gazd ntr-un mod util. De obicei, aceasta nseamn
c protocolul POP3 este utilizat pentru a permite unei staii de lucru s primeasc pota
pe care serverul o stocheaz. POP3 nu a intenionat s furnizeze operaii extinse de
manipulare a potei de pe server; normal pota este descrcat de pe server i apoi
tears. Un protocol mai avansat (i mai complex), IMAP4, a fost discutat n RFC 1730.
n continuare, termenul client gazd (client host) se refer la o gazd ce utilizeaz
serviciul POP3, ct timp termenul server gazd (server host) se refer la o gazd care
ofer serviciul POP3.

4.6.1. Operaia de baz


Iniial, serverul pornete serviciul POP3 ascultnd TCP portul 110. Cnd clientul
dorete s utilizeze serviciul, este stabilit o conexiune TCP cu serverul. Cnd
conexiunea s-a realizat, serverul POP3 trimite un salut. Clientul i serverul POP3
schimb comenzi i rspunsuri pn cnd conexiunea este nchis sau abandonat.
Comenzile n POP3 sunt formate din caractere (modul insenzitiv), posibil s fie urmate
de unul sau mai multe argumente. Toate comenzile sunt terminate prin perechea CRLF
(\r\n). irul de caractere ce formeaz comanda i argumentele sunt caractere ASCII.
Comenzile i argumentele sunt separate printr-un singur caracter SPACE. Comenzile au
lungimea de 3 sau 4 caractere. Fiecare argument poate avea lungimea pn la maxim 40
de caractere. Rspunsurile n POP3 constau dintr-un indicator de status i o comand,
posibil urmat de informaii adiionale. Toate rspunsurile sunt terminate prin perechea
CRLF. Rspunsurile pot fi de lungime de pn la 512 caractere, incluznd i CRLF. n
mod curent, sunt doi indicatori de status: pozitiv (+OK) i negativ (-ERR). Serverul
trebuie s trimit +OK i -ERR scrise cu litere mari (upper case). Rspunsurile la
comenzi sunt multi-linie. n aceste cazuri, care sunt clar indicate mai jos, dup
trimiterea primei linii a rspunsului i a perechii CRLF, orice linie adiional este

47
Tehnologii Internet
trimis i fiecare linie se termin cu perechea CRLF. Cnd toate liniile rspunsului au
fost trimise, este trimis o linie final, care formeaz un octet terminal (cod zecimal
046, .) i perechea CRLF. Dac orice linie a rspunsului multi-linie ncepe cu acest
octet terminal, linia este completat cu octei terminali. Deci, un rspuns multi-linie se
termin cu 5 octei CRLF.CRLF. Cnd examineaz un rspuns multi-linie, clientul
verific s vad dac linia ncepe cu octetul terminal. Dac da i ceilali octei sunt
CRLF, primul octet al liniei (octetul terminal) este scos. Dac da i dac CRLF urmeaz
imediat caracterul terminal, atunci rspunsul de la serverul POP3 este terminat i linia
ce conine .CRLF nu este considerat parte a rspunsului multi-linie. O sesiune POP3
evolueaz direct printr-un numr de stri n timpul vieii ei. O dat ce conexiunea TCP a
fost deschis i severul POP3 a trimis salutul, sesiunea ntr n stare de
AUTHORIZATION. n aceast stare, clientul trebuie s se identifice serverului POP3.
O dat ce clientul a fcut acest lucru cu succes, serverul i formeaz resursele asociate
n funcie de maildrop-ul clientului, i sesiunea ntr n starea de TRANSACTION. n
aceast stare, clientul cere aciuni serverului POP3. Cnd clientul a emis comanda
QUIT, sesiunea ntr n starea de UPDATE. n aceast stare, serverul POP3 elibereaz
orice resurs dobndit n timpul strii de TRANSACTION i spune goodbye. Apoi
conexiunea TCP este nchis. Serverul trebuie s rspund la o nerecunoatere,
neimplementare sau o comand invalid printr-un indicator de stare negativ. Serverul
trebuie s rspund unei comenzi cerute cnd sesiunea este ntr-o stare incorect, printr-
un indicator de stare negativ. Nu exist o metod general pentru un client care s
disting un server ce nu are implementat o comand opional, de un server care nu
dorete sau nu poate s proceseze o comand. Un server POP3 poate avea timp de
inactivitate (autologout). Ca timp trebuie s fie cel puin 10 minute. Primirea oricrei
comenzi de la client n timpul acelui interval, este de ajuns s reseteze autologout
timer. Cnd timpul expir, sesiunea nu poate intra n starea de UPDATE serverul ar
trebui s nchid conexiunea TCP fr a terge nici un mesaj sau fr a trimite vreun
rspuns clientului.

4.6.1.1. Starea AUTHORIZATION


O dat ce conexiunea TCP a fost deschis de un client POP3, serverul POP3
emite o linie de salut. Acesta poate fi orice rspuns pozitiv. Un exemplu poate fi:
S: +OK POP3 server ready

Sesiunea POP3 este acum n starea de AUTHORIZATION. Clientul trebuie


acum s se identifice i s se autentifice serverului POP3. Dou mecanisme posibile
pentru aceasta sunt descrise n continuare, combinaia comenzilor USER i PASS i
comanda APOP. Mecanisme suplimentare de autentificare sunt descrise n RFC 1734.
Ct timp exist mai multe mecanisme de autentificare acestea sunt cerute de toate
serverele POP3, un server POP3 trebuie s suporte, bineneles, cel puin unul din aceste
mecanisme. O dat ce serverul POP3 a fost determinat complet, utilizarea oricrei
comenzi de autentificare a clientului, ar trebui s-i dea acces la maildrop-ul potrivit;
serverul POP3 dobndete acces exclusiv pentru blocarea maildrop-ului, fiind necesar
prevenirea modificrii i tergerii mesajelor nainte ca sesiunea s intre n starea
UPDATE. Dac blocajul este dobndit cu succes, serverul POP3 rspunde cu un
indicator de stare pozitiv. Sesiunea POP3 intr acum n starea TRANSACTION, cu nici
un mesaj marcat pentru tergere. Dac maildrop-ul nu a putut fi deschis din diferite
motive (ex. blocajul nu a putut fi realizat, clientul nu are acces la maildrop, sau
48
Cap 4: Protocoale i servicii
maildrop-ul nu poate fi citit), serverul POP3 rspunde cu un indicator de stare negativ.
(Dac s-a realizat blocajul i serverul POP3 intenioneaz s rspund cu un indicator de
stare negativ, atunci el trebuie s se deblocheze nainte de respingerea comenzii). Dup
returnarea negativ a indicatorului de stare, serverul poate nchide conexiunea. Dac
serverul nu nchide conexiunea, clientul poate emite fie o nou comand de autentificare
i s porneasc din nou, fie poate emite comanda QUIT. Dup ce serverul POP3 a
deschis maildrop-ul, este asociat un numr fiecrui mesaj i se noteaz mrimea fiecrui
mesaj n octei. Primului mesaj din maildrop i este asociat numrul de mesaj 1, celui
de-al doilea 2 i aa mai departe, astfel nct celui de-al n-lea mesaj i este asociat
numrul de mesaj n. n POP3 comenzile i rspunsurile, toate numerele de mesaje i
mrimea mesajelor sunt exprimate n baza 10 (decimal). Iat un rezumat al comenzii
QUIT n starea AUTHORIZATION:
QUIT
Argumente: nici unul
Restricii: nici una
Rspunsuri posibile: +OK

4.6.1.2. Starea TRANSACTION


O dat ce clientul s-a identificat cu succes serverului POP3, i serverul POP3 a
fost blocat i a deschis maildrop-ul corespunztor, sesiunea POP3 este acum n starea de
TRANSACTION. Clientul poate emite n acest moment oricare dintre urmtoarele
comenzi POP3, n mod repetat. Eventual, clientul emite comanda QUIT i sesiunea
POP3 intr n starea de UPDATE.

STAT
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION

Comentariu: Serverul POP3 emite un rspuns pozitiv ntr-o linie care conine
informaii pentru maildrop. Aceast linie este numit drop listing pentru acea csu
potal. Cu scopul de a simplifica analiza, toate serverele POP3 au nevoie s utilizeze
un format sigur pentru drop listing. Rspunsul pozitiv const din +OK urmat de un
singur spaiu, numrul de mesaje din maildrop, un singur spaiu, mrimea maildrop-ului
n octei. Acest memo nu determin nici o condiie ce urmeaz dup mrimea maildrop-
ului. Implementrile minimale ar trebui doar s sfreasc linia de rspuns.
De observat c acele mesaje marcate pentru tergere nu sunt numrate n total.

Rspunsuri posibile:
+OK nn mm

LIST
LIST [msg]
Argumente: Un numr de mesaj (opional), care, dac este prezent, nu poate s
se refere la un mesaj marcat pentru tergere.
Restricii: Pot fi date doar n starea TRANSACTION

Comentariu: Dac a fost dat un argument, serverul POP3 emite un rspuns


pozitiv cu o linie ce conine informaii pentru acel mesaj. Aceast linie este numit
49
Tehnologii Internet
scan listing pentru mesajul respectiv. Dac nici un argument nu a fost dat, serverul
POP3 emite un rspuns pozitiv, atunci rspunsul dat este multi-linie. Dup +OK iniial,
pentru fiecare mesaj din maildrop, serverul POP3 rspunde cu o linie ce conine
informaii despre acel mesaj. Aceast linie mai este numit scan listing pentru acel
mesaj. Dac nu sunt mesaje n maildrop, atunci serverul POP3 rspunde fr scan
listings emite un rspuns pozitiv urmat de o linie coninnd octetul terminal i
perechea CRLF. n scopul simplificrii analizei, toate serverele POP3 sunt condiionate
s utilizeze un format sigur pentru scan listings. Un scan listing conine numrul de
mesaj al mesajului, urmat de un singur spaiu i mrimea exact a mesajului n octei.
Metode pentru calcularea exact a mrimii mesajului sunt descrise n seciunea
Formatul Mesajului. Acest memo nu determin nici o condiie referitoare la ce urmeaz
dup mrimea mesajului n scan listig. Implementrile minimale ar trebui s termine
acea linie de rspuns cu perechea CRLF. Implementrile mai avansate pot include i alte
informaii, n urma analizei mesajului. Not: Acest memo descurajeaz puternic
implementrile ce furnizeaz informaii suplimentare n scan listing. Alte facilitai
opionale ce permit clientului s analizeze mesajele din maildrop sunt discutate mai
trziu. De observat c mesajele marcate pentru tergere nu sunt listate.

Rspunsuri posibile:
+OK scan listing follows
-ERR no such message

RETR
RETR msg
Argumente: Un numr de mesaj (obligatoriu) ce nu se refer la un mesaj marcat
pentru tergere.
Restricii: Poate fi dat doar n faza de TRANSACTION
Comentariu: Dac serverul POP3 emite un rspuns pozitiv, atunci rspunsul dat
este multi-linie. Dup +OK inial, serverul POP3 trimite mesajul corespunzator
numrului de mesaj, fiind atent la completarea caracterului terminal.

Rspunsuri posibile:
+OK urmat de mesaj
-ERR no such mesaj

DELE
DELE msg
Argumente: Un numr de mesaj (obligatoriu) care nu poate s se refere la un
mesaj marcat pentru tergere.
Restricii: Poate fi dat doar n starea de TRANSACTION
Comentariu: Serverul POP3 marcheaz mesajele ca terse. Orice viitoare
referin la numrul asociat mesajului ntr-o comand POP3 genereaz eroare. Serverul
POP3 nu terge efectiv mesajul pn cnd sesiunea POP3 nu ntr n starea UPDATE.
Rspunsuri posibile:
+OK message deleted
-ERR no such message

50
Cap 4: Protocoale i servicii
NOOP
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Serverul POP3 nu face nimic, doar rspunde cu rspunsuri pozitive.
Rspunsuri posibile: +OK

RSET
Argumente: nici unul
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Orice mesaj marcat de serverul POP3 pentru tergere este demarcat.
Serverul POP3 rspunde apoi cu un rspuns pozitiv.
Rspunsuri posibile: +OK

4.6.1.3. Starea UPDATE


Cnd clientul emite comanda QUIT din starea TRANSACTION, sesiunea POP3
intr n starea UPDATE. (De observat c, dac clientul emite comanda QUIT din starea
AUTHORIZATION, sesiunea POP3 se termin, dar nu intr n starea UPDATE). Dac
o sesiune se termin din anumite motive, altele dect emiterea comenzii QUIT, sesiunea
POP3 nu intr n starea UPDATE i nu terge nici un mesaj din maildrop.

QUIT
Argumente: nici unul
Restricii: nici una
Comentariu: Serverul POP3 terge toate mesajele marcate pentru tergere din
maildrop i rspunde cu privire la starea acestei operaii. Dac exist o eroare, ex.
resurs lips, ntmpinat n timpul tergerii mesajelor, s-ar putea ca nite mesaje sau
nici unul din cele marcate pentru tergere s nu fie terse. Chiar dac operaia s-a
realizat cu succes sau nu, serverul elibereaz orice acces exclusiv i nchide conexiunea
TCP.
Rspunsuri posibile:
+OK
-ERR some deleted message not removed

Comenzi POP3 opionale


Comenzile POP3 discutate mai sus trebuie s fie suportate de toate
implementrile minimale de server POP3. Comenzile POP3 discutate mai jos permit
clientului POP3 o mai mare libertate n lucrul cu mesajele, pstrnd o implementare
simpl de server POP3. Not: Acest memo ncurajeaz puternic implementri care s
suporte aceste comenzi n locul celor ce dezvolt mrirea listelor drop i scan. n
cteva cuvinte, filozofia acestui memo este de a pune inteligena de partea clientului
POP3 i nu a serverului POP3.

TOP
TOP msg n
Argumente: Un numr de mesaj (obligatoriu) care nu poate s se refere la un
mesaj marcat pentru tergere i un numar pozitiv de linii (obligatoriu).
Restricii: Poate fi dat doar n faza TRANSACTION
Comentariu: Dac serverul POP3 emite un rspuns pozitiv, atunci rspunsul dat
51
Tehnologii Internet
este multi-linie. Dup iniialul +OK, serverul POP3 trimite headerele mesajului, o linie
goal separnd headerele de corp i apoi un numr de linii separate indicnd corpul
mesajului, fiind atent la completarea caracterul terminal. De observat c dac numrul
de linii cerute de clientul POP3 este mai mare dect numrul de linii ale corpului
mesajului, atunci serverul POP3 trimite ntregul mesaj.
Rspunsuri posibile:
+OK top of mesaage follows
-ERR no such message

UIDL
UIDL [msg]
Argumente: Un numr de mesaj (optional), care, dac e prezent, nu poate s se
refere la un mesaj marcat pentru tergere.
Restricii: Poate fi dat doar n starea TRANSACTION
Comentariu: Dac un argument a fost dat, serverul emite un rspuns pozitiv cu o
linie coninnd acel mesaj. Aceast linie este numita unique-id listing pentru acel
mesaj. Dac nu a fost dat nici un argument i serverul emite un rspuns pozitiv, atunci
rspunsul dat este multi-linie. Dup +OK iniial, pentru fiecare mesaj din maildrop,
serverul POP3 rspunde cu o linie ce conine informaii despre acel mesaj. n scopul
simplificrii analizei, toate serverele POP3 sunt obligate s utilizeze un format sigur
pentru unique-id listing. O lista cu id-ul unic const dintr-un numr de mesaj al
mesajului, urmat de un singur spaiu i de id-ul unic al mesajului. Nu urmeaz nici o
informaie id-ului mesajului din lista de Id-uri unice. Id-ul unic al mesajului este un
string determinat arbitrar de server, coninand 70 de caractere ntre 0x21 0x7E, care
identific unic un mesaj n cadrul unui maildrop i care persist n timpul sesiunii.
Aceast persisten este obligatorie chiar dac o sesiune se termin far a intra n stare
UPDATE. Serverul nu ar trebui s reutilizeze un Id unic ntr-un maildrop anume, att
timp ct entitatea ce utilizeaz Id-ul unic respectiv exist. De observat c mesajele
marcate pentru tergere nu sunt listate. Dei, n general, este preferabil ca
implementrile pentru server s pstreze Id-urile unice asignate arbitrar n maildrop,
aceast specificare intenioneaz s permit ca Id-urile unice s fie calculate ca a hash of
the message. Clienii ar trebui s poat trata situaia n care dou copii identice ale unui
mesaj din maildrop au acelasi Id unic.
Rspunsuri posibile:
+OK urmat de lista de id-uri unice
-ERR no such message

USER
USER nume
Argumente: Un ir de caractere identificnd o casu potal (obligatoriu), care
este semnificativ doar serverului.
Restricii: Poate fi dat doar n starea de AUTHORIZATION dup mesajul de
salut al serverului POP3 sau dup una din comenzile USER sau PASS terminate cu
eroare.
Comentariu: Pentru autentificare utiliznd comenzile USER i PASS, clientul
trebuie s emit mai nti comanda USER. Dac serverul POP3 rspunde cu un
indicator pozitiv (+OK), atunci clientul poate emite fie comanda PASS s completeze
autentificarea, fie comanda QUIT s termine sesiunea POP3. Dac serverul POP3

52
Cap 4: Protocoale i servicii
rspunde cu un indicator negativ de stare (-ERR) pentru comanda USER, atunci
clientul poate emite fie o comand nou de autentificare, fie comanda QUIT. Serverul
poate returna un rspuns pozitiv chiar dac nu exist nici o casu potal. Serverul
poate returna un rspuns negativ dac csua potal exist, dar nu permite autentificare
de parol tip plaintext.
Rspunsuri posibile:
+OK nume is a valid mailbox
-ERR never heard of mailbox nume

PASS
PASS ir caractere
Argumente: O parol de server/csu potal(obligatoriu).
Restricii: Poate fi dat doar n starea de AUTHORIZATION imediat dup o
comand USER ncheiat cu succes.
Comentariu: Cnd un client emite comanda PASS, serverul POP3 utilizeaz
perechea de argumente de la USER i comenzile PASS s determine dac clientului ar
trebui s i se permit accesul la maildrop-ul respectiv. Deoarece comanda PASS are
exact un argument, serverul POP3 poate trata spaiile n argument ca parte a parolei, n
loc de separatoare de argument.
Rspunsuri posibile:
+OK maildrop locked and ready
-ERR invalid password
-ERR unable to lock maildrop

APOP
APOP nume rezumat
Argumente: Un ir de caractere identificnd csua potal i un rezumat MD5
(amandou obligatorii).
Restricii: Poate fi dat doar n starea de AUTHORIZATION dup salutul
serverului POP3 sau dup una din comenzile USER sau PASS terminate cu insucces.
Comentariu: n mod normal, fiecare sesiune POP3 ncepe cu USER/PASS.
Aceasta sfrete serverul / id-ul user-ului specific, parola fiind trimis n reea. Multe
implementri de client POP3 se conecteaz la un server POP3 n mod obinuit pentru
a verifica mail-ul nou. n plus intervalul sesiunii iniiate poate fi de 5 minute. Deci,
riscul capturrii parolei este mare. Este necesar o metod alternativ de autentificare,
care s furnizeze cele dou metode originale de autentificare i protejare a rspunsului,
care s nu implice trimiterea parolei neprotejate n reea. Comanda APOP furnizeaz
aceast funcionalitate. Un server POP3 care implementeaz comanda APOP va include
o marc de timp n banner-ul mesajului de salut. Sintaxa acestei marcri a timpului
corespunde lui msg-id din RFC 822 i trebuie s fie diferit de fiecare dat cnd
serverul POP3 emite un banner de salut. De exemplu, ntr-o implementare UNIX n care
sunt utilizate procese UNIX separate pentru fiecare instan a serverului POP3, sintaxa
unei mrci de timp poate fi: process-ID.clock@hostname unde process-ID este o
valoare zecimal a PID-ului procesului, clock este o valoare zecimal a timpului
sistemului i hostname este numele complet al domeniului corespunztor gazdei unde
ruleaz serverul POP3. Clientul POP3 ia la cunotin de aceast marc de timp i apoi
emite comanda APOP. Parametrul nume are aceai semantic exact ca parametrul
nume din comanda USER. Parametrul rezumat este calculat prin aplicarea

53
Tehnologii Internet
algoritmului MD5 RFC 1321 unui ir de caractere compus din marca de timp (incluznd
parantezele unghiulare) urmat de informaia secret. Informaia secret (shared secret)
este un ir de caractere cunoscut numai de clientul i serverul POP3. Mare atenie ar
trebui acordat pentru a mpiedica o dezvluire neautorizat a secretului, cunoaterea
secretului va permite oricarei entitai s se ascund sub acel nume de user. Parametrul
rezumat este o valoare pe 16 octei care este trimis n format hexazecimal, utiliznd
caracterele ASCII lower-case. Cnd serverul POP3 primete comanda APOP, verific
rezumatul furnizat. Dac rezumatul este corect serverul POP3 emite un rspuns pozitiv
i sesiunea POP3 intr n starea TRANSACTION. Altfel, un rspuns negativ este emis
i sesiunea POP3 rmne n starea AUTHORIZATION. De observat c, lungimea
informaii secrete crete, deci i dificultatea. Ca atare, informaiile secrete ar trebui s
fie de lungime mare (mult mai mult de 8 caractere ca n ex. de mai jos).
Rspunsuri posibile:
+OK maildrop locked and ready
-ERR permission denied

4.6.2. Concluzii
De cnd caracteristicile principale descrise mai sus au fost adugate la protocolul
POP3, s-a acumulat experien n utilizarea lor pe scar larg n operaii de post office
unde cei mai muli utilizatori nu se cunosc unii cu ceilali. n aceste situaii i altele,
utilizatorii i vnztorii de clieni POP3 au descoperit c o combinaie ntre comanda
UIDL i neemiterea comenzii DELE, poate furniza o versiune slab de depozit
maildrop semi-permanent avnd o funcionalitate normal asociat cu IMAP. Desigur
alte caliti IMAP, aa cum verificnd o conexiune existent pentru mesajele noi sosite
i suportnd foldere multiple pe server, nu sunt prezente n POP3. Cnd aceste faciliti
sunt utilizate ocazional de ctre utilizatori, exist o tendin de recitire a mesajelor
acumulate pe server far limit. Acesta este clar un tip de comportament nedorit din
punctul de vedere al operatorului de server. Aceast situaie este agravat de faptul c
posibilitile limitate ale POP3-ului nu permit manipularea eficient a maildrop-urilor
care au mii de mesaje. n consecin, este recomandat ca operatorii de servere multi-
users la scar larg, n special cei care au acces la maildrop doar via POP3, s considere
urmtoarele alternative:
Impunnd alocarea de spaiu de depozitare a maildrop-ului. Un dezavantaj al
acestei opiuni este c acumularea de mesaje poate provoca neputina utilizatorului de a
primi noi mesaje n maildrop. n situaiile n care se alege aceast opiune ar trebui s se
asigure informarea utilizatorilor asupra acestui impediment sau epuizarea spaiului,
poate prin inserarea unui mesaj potrivit n maildrop-ul userului.
Impunnd o poli de asigurare privind pstrarea pe server. Utilizatorii sunt
liberi s stabileasc aceast poli de asigurare privind depozitarea i pstrarea
mesajelor pe server, cele citite i cele necitite. De exemplu, un utilizator poate terge
mesajele necitite de pe server dup 60 de zile i pe cele citite dup 7 zile. tergerile de
mesaj sunt n afara protocolului POP3 i nu sunt considerate o violare de protocol.
Operatorii de server impunnd poliele de asigurare cu privire la tergerea mesajelor ar
trebui s aib grij s fac toi utilizatorii contieni de puterea acestora. Clienii nu
trebuie s presupun c o poli va terge automat mesajele i ar trebui s continue s
tearg explicit mesajele utiliznd comanda DELE cnd este cazul. De notat c
impunerea acestor polie de asigurare de tergere poate fi confuz pentru utilizatorii
54
Cap 4: Protocoale i servicii
simpli, deoarece clientul lor POP3 poate conine opiuni de configurare de a terge mail-
ul de pe server, care nu va fi de fapt suportat de server. Un caz special al polielor este
c mesajele pot fi doar download-ate odat de pe server i sunt terse dup ce acesta a
terminat operaia. Aceasta ar putea fi implementat de un server POP3 prin urmtorul
mecanism: urmrind un login de client POP3 care a terminat prin QUIT, terge toate
mesajele download-ate n timpul sesiunii cu comanda RETR. Este important s nu se
tearg mesajele dac conexiunea s-a ncheiat printr-un eveniment anormal (ex. dac
QUIT nu a fost primit de la client) deoarece clientul poate nu a primit sau nu a salvat cu
succes mesajele). Serverele ce implementeaz poliele downloadeaz-i-terge pot de
asemenea s doreasc s dezactiveze sau s limiteze comanda TOP, dei ar putea fi
utilizat ca un mecanism alternativ pentru a downloada toate mesajele.

4.6.3. protocolul IMAP


Protocolul IMAP4 (Internet Message Access Protocol) permite accesul la mesaje
din foldere de mail de pe un server. Spre deosebire de POP3, care este proiectat pentru a
transfera i terge e-mail-urile de pe server, scopul IMAP este de a le stoca pe toate pe
server i s poat fi accesate din orice loc. Mesajele pot fi stocate pe server, transferate
sau mutate ntre foldere.

4.7. Protocoale criptografice SSL i TLS


Secure Sockets Layer (SSL) i Transport Layer Security (TLS), succesorul su,
sunt protocoale criptografice care permit comunicaii sigure pe Internet. Exist anumite
diferene ntre SSL 3.0 i TLS 1.0, dar protocolul rmne aproximativ acelai. Termenul
"SSL" folosit aici se poate referi la ambele protocoale, excepie fcnd cazurile
specificate prin detalierea contextului.

4.7.1. Descriere i funcionare


SSL asigur autentificarea endpoint-urilor i confidenialitatea comunicaiei prin
Internet folosind criptografia. n utilizrile uzuale, numai server-ul este autentificat
(identitatea sa este certificat) n timp ce clientul rmne neautentificat; autentificarea
mutual presupune existena unei mecanism de distribuie a cheie public (PKI) ctre
clieni. Protocolul permite aplicaiilor client/server s comunice securizat pentru a
mpiedica eavesdropping, tampering i message forgery.
SSL implic mai multe faze intermediare:
verificarea mutual de suportare a protocolului;
schimbarea cheilor prin intermediul criptrii prin metoda cu chei publice i
autentificare pe baza de certificate;
transmiterea de trafic criptat prin sistemul cheilor simetrice.

n timpul primei faze a protocolului serverul i clientul negociaz asupra


algoritmului de criptare ce va fi folosit. Implementrile curente permit urmtoarele
posibiliti:
criptografia bazat pe chei publice: RSA, Diffie-Hellman, DSA sau Fortezza;
pentru codri simetrice: RC2, RC4, IDEA, DES, Triple DES sau AES;
pentru funcii de hash unidirecional: MD5 sau SHA.

55
Tehnologii Internet
Protocolul SSL permite schimbul de nregistrri; fiecare nregistrare poate fi, n
mod opional, compresat, criptat i mpachetat cu un cod de autentificare al
mesajului (englez: message authentication code - MAC). Fiecare nregistrare are un
cmp numit content_type care specific care protocol superior este folosit.
Cnd conexiunea demareaz, nivelul nregistrare ncapsuleaz un alt protocol, de
tip handshake protocol, pentru care cmpul content_type are valoarea 22.
Clientul trimite i primete mai multe structuri de handshake:
Trimite un mesaj ClientHello n care specific lista de metode de criptare care
sunt suportate, metodele de compresie i cea mai actual versiune a protocolului
cunoscut. De asemenea transmite o secven aleatoare de bii care va fi folosit
ulterior.
Primete mai apoi un ServerHello, n care serverul alege parametrii conexiunii
din mulimea de opiuni oferit de client mai devreme.
Cnd parametrii conexiunii sunt cunoscui, clientul i serverul schimb
certificatele (n funcie de algoritmul de codare pentru chei publice ales). Aceste
certificate sunt n prezent de tip X.509, dar exista de asemenea un document care
specific utilizarea certificatelor bazate pe OpenPGP.
Serverul poate solicita un certificat clientului, astfel nct conexiunea s fie
mutual autentificat.
Clientul i serverul negociaz un secret comuni numit "master secret", existnd
aici opiunea folosirii rezultatului schimbului Diffie-Hellman, sau mai simplu prin
criptarea secretului cu cheia privat i decriptarea acesteia cu cheia privata a
partenerului. Toate datele legate de chei sunt derivate din acest "master secret" (i de
valori generate aleator de ctre client sau de ctre server), care sunt schimbate atent prin
funcia atent proiectat de "Funcii pseudoaleatore".

TLS/SSL au o varietate de msuri de securitate:


numerotarea tuturor nregistrrilor cu numere de secven n MAC-uri;
folosirea unui mecanism de sumarizare a mesajului extins prin folosirea unei
chei (numai dac se cunoate cheia se poate verifica MAC. Acest lucru este
specificat n RFC 2104);
protecie mpotriva unor tipuri cunoscute de atacuri (incluznd atacuri de tip
"man in the middle"), precum cele de tip forare la folosirea a unor versiuni mai
vechi (i mai puin sigure) ale protocolului, sau versiuni mai puin sigure ale
algoritmilor de codare.
mesajul care ncheie handshake ("Finished") care trimite un hash all tuturor
datelor schimbate ntre cele dou pri.

Funciile pseudoaleatore mpart datele n dou jumti i le proceseaz cu doi


algoritmi diferii de hash (MD5 i SHA), i apoi face un XOR ntre ele. n acest fel se
protejeaz i n cazul n care pentru unul dintre aceste dou algoritme se gsete o
vulnerabilitate.

4.7.2. Aplicaii ale SSL


SSL ruleaz la un nivel care este inferior protocoalelor aplicaie precum HTTP,
SMTP i NNTP, dar care este superior protocoalelor de transport precum TCP sau UDP,
care sunt componente ale suitei de protocoale internet TCP/IP. Dei SSL poate aduga
56
Cap 4: Protocoale i servicii
securitate pentru orice protocol care folosete conexiuni statefull (precum TCP-ul), el
este cel mai adesea folosit mpreun cu HTTP, formnd astfel HTTPS.
HTTPS este utilizat pentru a securiza paginile web pentru aplicaii gen comer
electronic. HTTPS folosete certificatele cu chei publice pentru a verifica identitatea
utilizatorilor finali.
Dei din ce n ce mai multe produse ofer suport nativ pentru SSL, sunt multe
care nc nu au acest protocol. n astfel de cazuri, utilizatorii pot folosi produse separate
precum Stunnel, care s asigure criptarea. Totui, Internet Engineering Task Force a
recomandat n 1997 ca aplicaiile s ofere posibilitatea includerii TLS-ului, dect s
foloseasc un port separat pentru comunicaii criptate - limitnd astfel folosirea
produselor adiionale precum Stunnel.
SSL poate fi folosit de asemenea pentru tunelare crend astfel o nou reea
privat (VPN, precum [OpenVPN].

Istoria i dezvoltarea
Dezvoltat de ctre Netscape, versiunea SSL 3.0 a fost lansat n 1996, care mai
apoi a devenit baza dezvoltrii versiunii 1.0 a TLS, un protocol standard IETF definit
pentru prima dat n RFC 2246. Visa, MasterCard, American Express i alte cteva
instituii financiare au susinut utilizarea SSL pentru comerul prin Internet.
SSL este conceput modular: autorii si l-au proiectat pentru a fi extins i pentru a
suporta compatibilitatea nainte i napoi, precum i cu negociere ntre enpoint-urile
aflate n conversaie.

Chei slabe mai vechi


Cteva implementri iniiale ale SSL putea folosi o cheie cu o lungime maxim a
cheii simetrice de 40 de bii datorat restriciei guvernului american de export a
tehnologiei criptografice. Guvernul american a impus n mod explicit o cheie maxim
de 40 de bii care putea fi spart prin brute-force de ctre ageniile de impunere a legilor
care doreau s intercepteze traficul criptat i care totui mpiedicau atacatorii cu motive
mai puin ntemeiate. O limitare asemntoare a fost impus i pentru Lotus Notes n
versiunile pentru export. Dup ani de controverse publice, o serie de procese i
eventuala recunoatere a guvernului pentru cererea pieei de produse criptografice mai
performante produse n afara Statelor Unite, autoritile americane au relaxat legislaia
pentru restriciile de export. Limitarea lungimii cheii la 40 de bii a disprut n acest fel.
Implementrile moderne folosesc o lungime a cheii de 128 de bii (sau chiar mai mare
de att) pentru algoritmii de criptare cu chei simetrice.

Utilizri incorecte
Anumite pagini web au fost criticate pentru folosirea incorect a SSL i prin
urmare a tuturor beneficiilor care decurg din comunicaiile securizate. Astfel de utilizri
incorecte includ:
securizarea numai a paginilor care presupun completarea de formulare, dar
nesecurizarea paginii de autentificare a utilizatorilor;
afiarea de pagini securizate mpreun cu coninut nesecurizat.

57
5. Limbaje de programare i tehnologii Web
5.1. Introducere
Tehnologiile utilizate n aplicaiile Web reprezint n general, acele limbaje de
programarea utilizate la crearea de site-uri web complexe, interactive, al cror concept
presupune stpnirea ct mai detaliat a unor limbaje de scripting sau de programare i
baze de date. n categoria tehnologiile Web se pot include o multitudine de limbaje de
programare, cum ar fi PHP, JavaScript, ASP etc., iar ca baze de date pot fi utilizate
MySQL, MsSQL, Access etc.
Cteva aplicaii Web ntalnite mai des sunt portalurile, forumurile, magazinele
virtuale, formularele de nscriere, licitaiile on-line etc.
Acum civa ani, tehnologiile Web erau folosite doar de marile companii
datorit, n principal, costurilor ridicate ale licenelor programelor de dezvoltare. n
prezent, datorit dezvoltrii tot mai accentuate a soluiilor Open Source, oricine i poate
permite realizarea aplicaii web.
Se pot enumera o serie de tehnologii folosite mai des n programarea aplicaiilor
web dinamice, i anume:
HTML - Aprut la nceputul anilor '90, datorit lipsei unui limbaj universal care
s permit publicarea informaiei la nivel global, HTML a determinat
dezvoltarea spectaculoas a Internetului.HTML ( Hypertext Markup Language ).
Marcajele de tip HTML din cadrul documentului spun browser-ului cum s
afieze coninutul util al fiierului;
XHTML - reprezint prescurtarea de la EXtensible HyperText Markup
Language (denumirea oficiala a standardului). Practic este un nlocuitor modern
al mai vechiului limbaj HTML;
CSS - Fiierul CSS (cascading style sheet - foi de stil n cascad). Un fier CSS
este un fiier text cu extensia ".css" definind stiluri pentru paginile HTML.
Fiierele CSS permit stilizarea n bloc a documentelor HTML cu un efort
semnificativ mai mic dect n cazul stilizrii elementelor de pagin n cadrul
fiecrui document HTML n parte, prin intermediul atributelor tagurilor.
JAVASCRIPT - este un limbaj de scripting dezvoltat la origine de Netscape,
permind scrierea de secvene de program care se execut la apariia unui
eveniment utilizator.
FLASH : este un mediu de lucru dezvoltat de compania Macromedia, cu
ajutorul FLASH-ului se poate realiza un design de calitate, coninut interactiv,
animaii profesionale.
MYSQL este un sistem de gestiune a bazelor de date relaionale, fiind o
component cheie a limbajului PHP
CGI - Common Gateway Interface - sunt scripturi scrise n orice limbaj de
programare indiferent dac este compilat sau interpretat, scripturi care sunt
executate pe server;
ISAPI - Internet Server API - reprezint alternativa celor de la Microsoft la CGI
(Common Gateway Interface), rulabil bineneles pe platforme Windows.
Acesta poate fi scris n orice limbaj cu suport pentru dll-uri. Rezultatul
compilrii va fi un fiier .dll. ISAPI are o serie de avantaje fata de CGI. O
alternativ la ISAPI este NSAPI. Acesta se utilizeaz n cadrul serverului
58
Cap 5: Limbaje de programare i Tehnologii Web
Netscape;
PHP i ASP aprute n 1994, respectiv 1996, sunt dou limbaje puternice care
au adus o schimbare n design-ul aplicaiilor web. Acestea, dei sunt diferite, au
totui o serie de similariti: ambele sunt interpretate, ambele genereaz scripturi
(.php respectiv .asp), care pot fi combinate cu HTML, date de tip text etc.
Limbajele ofer suport i pentru lucrul cu baze de date (MySQL, MsSQL,
PostgreSQL, Oracle) - de fapt sunt intens folosite n acest sens. Limbajul ASP
nu este un concept nou ci se bazeaz pe limbajele VBScript i JScript.
Principalul dezavantaj al acestor doua limbaje este viteza. Acestea sunt lente
deoarece fiecare accesare presupune procesarea i interpretarea lor i nu pot
construi controale reutilizabile.
JSP - Java Server Pages - reprezint o tehnologie de design al aplicaiilor web ce
permite crearea acestor aplicaii independente de platform. Tehnologia se
bazeaz pe limbajul de programare Java i marcatori XML. Avantajul JSP este
reprezentat de administrarea facil, independent de platform, separarea logicii
aplicaiei de partea de interfa utilizator, performana;
ASP.NET - este o nou tehnologie pentru aplicaii web elaborat de Microsoft,
dar despre care nu se poate spune dac este o urmare a ASP-ului, cu toate c
pstreaz compatibilitatea cu acesta

Exist o serie de alte medii pentru proiectarea aplicaiilor web, fiecare cu


avantajele i dezavantajele sale, dar cu un singur scop: crearea unor aplicaii web
interactive, securizate, cu timp de rspuns ct mai redus, dar care s ofere i o interfa
grafic plcut.

5.2. HTML

5.2.1. Introducere
HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru
crearea paginilor web ce pot fi afiate ntr-un browser (sau navigator). Scopul HTML
este mai degrab prezentarea informaiilor paragrafe, fonturi, tabele .a.m.d. dect
descrierea semanticii documentului.
Specificaiile HTML sunt dictate de World Wide Web Consortium (W3C).
HTML este un format text proiectat pentru a putea fi citit i editat de oameni
utiliznd un editor de text simplu. Totui scrierea i modificarea paginilor n acest fel
solicit cunotine solide de HTML i este consumatoare de timp. Editoarele grafice
cum ar fi Macromedia Dreamweaver, Adobe GoLive sau Microsoft FrontPage permit ca
paginile web sa fie tratate asemntor cu documentele Word, dar cu observaia c aceste
programe genereaz un cod HTML care este de multe ori de proast calitate.
HTML se poate genera direct utiliznd tehnologii de codare din partea serverului
cum ar fi PHP, JSP sau ASP. Multe aplicaii ca sistemele de gestionare a coninutului,
wiki-uri i forumuri web genereaz pagini HTML.
HTML este de asemenea utilizat n email. Majoritatea aplicaiilor de email
folosesc un editor HTML ncorporat pentru compunerea email-urilor i un motor de
prezentare a email-urilor de acest tip. Folosirea email-urilor HTML este un subiect
controversat i multe liste de mail le blocheaz intenionat.

59
Tehnologii Internet
5.2.2. Operatori, cuvinte cheie HTML
Caracteristicile i elementele componente ale unui document HTML:
<html> i </html> - orice document ncepe i se termin aceste tag-uri;
<head>...</head> - reprezint poriunea de antet a documentului, aici se poate
introduce titlul documentului ntre tag-urile <title> i </title>, precum i alte
elemente;
<body>...</body> - corpul documentului, cuprinde coninutul paginii HTML,
ceea ce va fi afiat pe ecran;
"<" i ">" - marcaje n document;
<br> - ntrerupere de linie, de la "line break", echivalentul lui Enter;
<p> - paragraf nou;
<hr> introduce o linie orizontala i trecerea la un rnd nou;
<pre>...</pre> - blocuri preformate browser-ul va interpreta corect caraterele
"spaiu", "tab" i "enter" pentru un text introdus ntre aceste tag-uri;
<! .> - introduce un ceomentariu.

Astfel, un document HTML are urmtoarea structur general:


<html>
<head> <title>Titlu</title> </head>
<body>
Coninut pagin
<!-- Acesta este un comentariu in HTML -->
</body>
</html>

Culoarea de fond
O culoare poate fi precizat n dou moduri:
printr-un nume de culoare. Sunt disponibile cel puin 16 nume de culori: aqua,
black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal,
white i yellow.
prin construcia " #rrggbb " unde r (red), g (green), sau b (blue) sunt cifre
hexazecimale i pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D,
e, E, f, F; se pot defini astfel 65536 de culori.

Culoarea unei pagini se precizeaz prin intermediul unui atribut al etichetei


<body>. Culoarea fondului paginii Web se stabilete cu atributul bgcolor al etichetei
<body>, de exemplu: <body bgcolor = culoare>.

Culoarea textului
Acest lucru se face prin intermediul atributului text al etichetei <body> dup sintaxa
<body text=culoare>.

Pe o singur linie de comand, se pot stabili mai multe atribute, de exemplu i


culoarea de fundal i cea a fontului:
<body bgcolor = culoare1 text=culoare2>

Textul afiat este caracterizat de urmtoarele atribute: Mrime (size), Culoare


(color), Font (style). Acestea sunt atribute ale etichetei <basefont>. Este o etichet
singular (fr delimitator de sfrit de bloc).
60
Cap 5: Limbaje de programare i Tehnologii Web
<basefont size = numar color = culoare style = font>
unde:
numar - poate fi 1, 2, 3, 4, 5, 6 sau 7; (1 pentru fontul cel mai mic si 7 pentru
fontul cel mai mare);
culoare - este o culoare precizat prin nume sau printr-o construcie RGB;
font - poate fi un font generic ca "serif", "san serif", "cursive", "monospace",
"fantasy" sau un font specific instalat pe calculatorului clientului, ca "Times
New Roman", "Helvetica" sau "Arial". Se accept ca valoare i o list de fonturi
separate prin virgul, de exemplu: "Times New Roman, serif, monospace ".

Domeniul de valabilitate al caracteristicelor precizate de aceast eticheta se


ntinde de la locul n care apare eticheta pn la sfritul paginii sau pn la urmtoarea
etichet <basefont>.

5.2.3. Fonturi
Un font este caracterizat de urmtoarele atribute:
culoare (stabilit prin atributul color);
tipul sau stilul (stabilit prin atributul face)
o familii generice: serif, sans serif, cursive, monospace i fantasy;
o instalate pe calculator;
mrimea (definita prin atributul size) ;
o 1, 2, 3, 4, 5, 6, 7 ( 1 pentru cel mai mic font i 7 pentru cel mai mare);
o +1, +2, etc. pentru a mari dimensiunea fontului cu 1, 2, etc. fa de
valoarea curent;
o -1, -2, etc. pentru a micora dimensiunea fontului cu 1, 2, etc. fa de
valoarea curent.
mrimea n puncte tipografice (stabilit prin atributul point-size);
grosime (definit prin atributul weight), valori posibile: 100, 200, 300, 400,
500, 600, 700, 800 i 900 (100 pentru fontul cel mai subire i 900 pentru cel
mai gros).

5.2.4. Blocuri de text


Aceste etichete nu se refer la particularitile caracterelor ce compun textul, ci
la funciile pe care le poate avea un bloc de text n cadrul paginii Web.
Toate aceste etichete produc automat trecerea la un rnd nou i adugarea unui spaiu
suplimentar.
<address>...</address> - aceast etichet introduce un bloc adres;
<blockquote>...</blockquote> - textul introdus ntre aceste etichete este identat
- marginea din stnga textului este deplasat la dreapta la o anumit distan fa de
marginea paginii;
<pre>...</pre> - bloc preformat - este indicat pentru a insera rnduri vide
(spaiu ntre rndurile succesive). Caracterul " spaiu " poate fi luat n considerare de
browser dac este inserat explicit prin &nbsp;.

ntr-un fiier HTML, caracterele "<" i ">" au o semnificaie special pentru


browser. Ele ncadreaz comenzile i atributele de afiare a elementelor ntr-o pagin.
Dac dorim ca un fragment de text s conin astfel de caractere, acest fragment trebuie
61
Tehnologii Internet
ncadrat de una dintre perechile de etichete:
<xmp>...</xmp> ( 80 de caractere pe rnd );
<listing>...</listing> ( 120 de caractere pe rnd ).

Blocuri paragraf
Cu ajutorul etichetei paragraf <p> este posibil trecerea la o linie nou i permite:
inserarea unui spaiu suplimentar nainte de blocul paragraf;
inserarea unui spaiu suplimentar dup blocul paragraf, dac se folosete
delimitatorul </p> (acesta fiind opional);
alinierea textului cu ajutorul atributului align, avnd valorile posibile "left",
"center" sau "right".

Blocuri de titlu
ntr-un text titlurile ( headers ) de capitole pot fi introduse cu ajutorul etichetelor
<h1>, <h2>, <h3>, <h4>, <h5>, <h6>.
Toate aceste etichete se refera la un bloc de text i trebuie nsoite de o etichet
de ncheiere similar </h1>, </h2>, </h3>, </h4>, </h5>, </h6>.
Aceste etichete accept atributul align pentru alinierea titlului blocului de text
la stnga (n mod prestabilit), n centru i la dreapta. Tag-ul <h1> permite scrierea unui
titlu cu caractere mai mari i aldine, pe cnd <h6> folosete caracterele cele mai mici.

Linii orizontale
ntr-o pagin Web pot fi inserate linii orizontale. Acest lucru se face cu ajutorul
etichetei <hr>. Pentru a configura o linie orizontal se utilizeaz urmtoarele atribute
ale etichetei <hr>:
align permite alinierea liniei orizontal. Valorile posibile sunt " left " ," center "
i " right ";
width permite alegerea lungimii liniei;
size permite alegerea grosimii liniei;
noshade cnd este prezent definete o linie fr umbr;
color permite definirea culorii liniei.

Blocuri <center>
Blocul introdus de etichetele <center>...</center> aliniaz centrat toate
elementele pe care le conine.

Blocuri <nobr>
Blocul de text cuprins ntre etichetele <nobr>...</nobr> va fi afiat pe o singur
linie.

Blocuri <div>
Modalitatea cea mai eficient de delimitare i de formatare a unui bloc de text
este folosirea delimitatorilor <div>...</div>. Un parametru foarte foarte util pentru
stabilirea caracteristicilor unui bloc <div> (diviziune) este align (aliniere).
Valorile posibile ale acestui parametru sunt:
" left " ( aliniere la stnga );
" center " ( aliniere central );

62
Cap 5: Limbaje de programare i Tehnologii Web
" right " ( aliniere la dreapta ).
Un bloc <div>...</div> poate include alte subblocuri. n acest caz, alinierea
precizat de atributul align al blocului are efect asupra tuturor subblocurilor incluse n
blocul <div>;
Un bloc <div>...</div> admite atributul "nowrap" care interzice ntreruperea
rndurilor de ctre browser.
Exemplu:
<html>
<head>
<title> Blocul <div></title>
</head>
<body>
Paragraf normal urmat de paragraf aliniat la dreapta.
<div align="right">
paragraf pe o singura linie aliniat la dreapta.<br>
</div>
<div align="center">
Paragraf aliniat pe centru.<br>
</div>
</body>
</html>

5.2.5. Imagini
Imaginile sunt stocate n fiiere cu diverse formate. Formatele acceptat de browsere
pentru fiierele imagine sunt:
GIF (Graphics Interchange Format) cu extensia .gif;
JPEG (Joint Photographic Experts Group) cu extensia .jpeg sau .jpg;
XPM (X PixMap) cu extensia .xmp;
XBM (X BitMap) cu extensia .xbm;
BMP (BitMap) cu extensia .bmp (numai cu Internet Explorer);
TIFF (Tagged Image File Format) cu extensia .tif sau .tiff;

Cele mai rspndite formate sunt GIF(8bii pentru o culoare, 256 culori posibile)
i JPEG (24bii pentru o culoare, 16777216 de culori posibile).

Tag-ul folosit pentru inserarea unei imagini n pagin este <img> i are
urmtoarele atribute:
src = sursa, locul unde se afla imaginea, adresa URL("Uniform Resourse
Locator" = identificator unic al resursei); Dac imaginea se afla n acelai
director cu fiierul HTML care face referire la imagine, atunci adresa URL a
imaginii este format numai din numele imaginii, inclusiv extensia.
width = limea imaginii;
height = nlimea imaginii;
alt = numele care nlocuiete imaginea pn aceasta se ncarc sau cnd nu a
fost gsit;
border = chenar (0 = lips bordur)
align = "center, right, left, top, middle, bottom" alinierea imaginii n pagin
hspace =" nr.ntreg", vspace =" nr.ntreg" - precizeaz distana n pixeli pe

63
Tehnologii Internet
orizontal, respectiv vertical, dintre imagine i restul elementelor din pagin.

Exemplu:
<html>
<head><title> Imagine cu chenar i mrit </title></head>
<body> O imagine cu chenar si de 200 pixeli X 15 %
<img src="imagie.jpg" align="center" border="5" width="350"
height="25%"> Text dup imagine.
</body>
</html>

Utilizri speciale ale imaginilor


Imaginile pot fi utilizate pentru a obine efecte deosebite ntr-o pagin web.
Printre aceste utilizri speciale putem enumera:
1. Linii orizontale formate cu ajutorul imaginilor .
2. Simboluri speciale pentru elementele unei liste neordonate.

5.2.6. Legturi (Link-uri)


Legturile (link-urile) reprezint partea cea mai important a unei pagini Web.
Ele transform un text obinuit n hipertext sau hiperlegatur, care permite trecerea
rapid de la o informaie aflat pe un anumit server la alt informaie memorat pe un
alt server aflat oriunde n lume.
Legturile sunt zone active ntr-o pagin Web, adic zone de pe ecran sensibile
la apasarea butonului stng al mouse-ului.
O legtur (link) este definit cu ajutorul etichetelor (tag-urilor) <a></a>, (de
la "anchor"=ancora) textul, imaginea sau paragraful plasat ntre aceste etichete formnd
link-ul, i are atributele:
href - adresa fiierului destinaie;
target - n ce fereastr se va deschide fiierul destinaie:
o _blank pagina va fi ncrcata ntr-o nou fereastra;
o _parent pagina va fi ncrcat n fereastra printe;
o _top pagina va fi ncrcat n fereastra top a cadrului;
o _self pagina va fi ncrcat n aceeai fereastr.
title - mic descriere asociat legturii afiat n momentul n care mouse-ul se
afl deasupra legturii

Legtura poate fi:


o pagin aflat n acelai director, realizat cu ajutorul atributului href, astfel:
<a href="nume_fisier_2.html">;
o pagin de pe acelai disc local se folosete adresa relativ la acel fiier :
<a href="exemple/list/listex_11.html"> ;
o legtur ctre un site particular: <a href="http://www.ub.ro">;
o imagine;
o adres de e-mail: <a href='mailto:test@test.ro?subject="subiect
prestabilit"'>Trimite e-mail</a>;
ctre un fiier oarecare: <a href="fisier.zip">

64
Cap 5: Limbaje de programare i Tehnologii Web
ANCORE
ntr-o pagin foarte lung pot exista puncte de reper ctre care se definesc
legturi. O ancor se definete de asemenea prin eticheta <a>. Pentru a defini ancor se
utilizeaz atributul name care primete ca valoare un nume atribuit ancorei (de exemplu
"leg1").
Pentru a insera o legtura ctre "leg1" definit n aceeai pagin se utilizeaz
eticheta <a> avnd atributul href de valoare "#leg1".
Pentru a introduce o legtur ctre o ancor definit n alt document (alt
pagin) aflat n acelai director, atributul href primete o valoare de forma
"nume_fisier.html#nume_ancora".
Exemplu:
Ancora (definirea ei) <a name="nume">Ancora</a>
Link ctre ancora aflata n aceeai pagin <a href="#nume">napoi la ancora</a>
<a href="pagina.html#nume">Inapoi la
Link ctre ancora aflata n alta pagin
ancora din pagina.html</a>

5.2.7. Liste
Unul din cele mai obinuite elemente din documentele cu mai multe pagini este
un set de definiii, referine sau indexuri. Glosarele sunt exemple clasice n acest sens;
cuvintele sunt listate n ordine alfabetic, urmate de definiii ale termenilor respectivi. n
HTML, ntreaga seciune a unui glosar va fi gestionat printr-o lista de definitii, care
este inclus ntr-o pereche de marcaje de lista de definiii: <dl>...</dl> (de la "definition
list" = lista de definiii).
Observaii:
un termen al listei este iniiat de eticheta <dt> (de la "definition term" = termen
definit);
definiia unui termen este iniiata de eticheta <dd> (de la "definition description"
= descrierea definitiei);
definiia unui termen ncepe pe o linie nou i este indentat;

Liste neordonate
O list neordonat este un bloc de text delimitat de etichetele corespondente
<ul>...</ul> ("ul" vine de la "unordered list" = list neordonat). Fiecare element al
listei este iniiat de eticheta <li> (list item).
Lista va fi indentat fa de restul paginii Web i fiecare element al listei ncepe
pe un rnd nou.
Tag-urile <ul> i <li> pot avea un atribut type care stabilete caracterul afiat n
faa fiecrui element al listei. Valorile posibile al acestui atribut sunt:
o "circle" (cerc)
"disc" (disc plin) (valoarea prestabilita);
"square" (patrat)

Listele neordonate pot fi imbricate pe mai multe niveluri :


Exemplu:
<html>
<head><title>liste_1</title></head>
<body><h1 align="center">O list neordonat: </h1><hr>

65
Tehnologii Internet
<ul>
<li type = "square">Rosu</li> <li type = "circle">Galben</li>
<li type = "disc">Albastru</li> </ul>
</body> </html>
Liste ordonate
O list ordonat de elemente este un bloc de text delimitat de etichetele
corespondente <ol>...</ol> ("ol" vine de la "ordered list" = list ordonat). Fiecare
element al listei este iniiat de eticheta <li> (list item).
Tag-urile <ol> i <li> pot avea un atribut type care stabilete tipul de caractere
utilizate pentru ordonarea listei. Valorile posibile sunt:
" A " pentru ordonare de tipul A , B , C , D etc. ( litere mari );
" a " pentru ordonare de tipul a , b , c , d etc. ( litere mici );
" I " pentru ordonare de tipul I , II , III , IV etc. ( cifre romane mari );
" i " pentru ordonare de tipul i , ii , iii , iv etc. ( cifre romane mici );
" 1 " pentru ordonare de tipul 1 , 2 , 3 , 4 etc. ( cifre arabe - optiune prestabilita );

Tag-ul <ol> poate avea un atribut start care stabilete valoarea iniial a
secvenei de ordonare.Valoarea acestui atribut trebuie s fie un numr ntreg pozitiv.
Tag-ul <li> poate avea un atribut value care stabilete valoare pentru elementul
respectiv al listei. Valoarea acestui atribut trebuie s fie un numr ntreg pozitiv.
Listele ordonate pot fi imbricate ntre ele sau cu liste neordonate, ca n exemplul
urmtor.
<html>
<head><title>listex_8</title></head>
<body><h1 align="center">O lista ordonata de liste ordonate si
neordonate</h1><hr>
<ol>Un sistem informatic include:
<li>Hardware:
<ol>
<li>placa de baza
<li>procesor
<li>memorie
<li>harddisk
</ol>
<li>Software:
<ul>
<li>Linux
<li>Windows
<li>OS/2
<li>Unix
</ul>
<li>Software de aplicatie:
<ul type="disc">
<li>VisualC++
<li>Java
<li>SQL
<li>CorelDraw
</ul>
</ol>
</body>
</html>
O list de meniuri este un bloc delimitat de etichete corespondente
<menu>...</menu>. Fiecare element al listei este iniiat de eticheta <li> (list item).

66
Cap 5: Limbaje de programare i Tehnologii Web
Cele mai multe browsere afieaz lista de meniuri ca pe o list neordonat.
O list de directoare este un bloc delimitat de etichete corespondente
<dir>...</dir> (de la " director "). Fiecare element al listei este initiat de eticheta <li>
(list item). Cele mai multe browsere afieaz lista de directoare ca pe o list neordonat.

5.2.8. Tabele
Tabelele ne permit s crem o reea complex de cmpuri (celule), iar tabelele
stau la baza construirii marii majoriti a paginilor Web. Fiecare celul a tabelului are
propriile opiuni pentru culoarea fondului, culoarea textului, alinierea textului etc.
Instruciuni:
<table></table> - insereaz un tabel;
<tr></tr> - insereaz un rnd (tabel row);
<td></td> - insereaz o celul cu date;

Atributele tabelului (tabel/rnd/celul):


border - un numr ntreg ce definete grosimea bordurii tabelului (poate fi 0 =
lips bordur valoare implicit) : <table border="4">;
align aliniaz tabelul n pagina Web, i poate lua valorile left, center i right:
<table align="left"> ;
hspace i vspace dau distana dintre tabel i celelalte elemente din pagina
Web;
bgcolor determin culoarea de fundal a tabelului sau a celulei, cu urmtoarea
prioritate: celul (<td>), linie (<tr>) i tabel (<table>):
<table border="3" bgcolor="green"> <tr bgcolor="blue"> <td
bgcolor="red">; Culoarea textului din fiecare celula se poate stabili cu
ajutorul expresiei: <font color="white">...</font>. ;
cellspacing atribut al tag-ului <table>, ce definete distana (n pixeli) dintre
celulele tabelului valoarea implicit este 2: <table cellspacing="4">;
cellpadding definete distana dintre marginea unei celule i coninutul ei,
valoarea implicit este 1: <table border="0" cellpadding="20">;
width i height stabilesc limea i nlimea unui tabel/celul pot fi nr
ntregi sau procente din dimensiunea paginii: <table width="200"
height="50%">;
<caption> - atribuie un titlu tabelului, i poate lua valorile: bottom, top, left i
right: <table border="0"><caption align="top">Titlu_tabel;
<th> - table header definete celule cap de tabel, coninutul lor este scris cu
caractere aldine i centrat: <th>Cap_tabel</th> ;
align aliniaz pe orizontal coninutul unei celule, i poate lua valorile: left,
center, right, char (aliniere fa de un caracter):
<td align="left">stanga</td>;
valign aliniaz coninutul celulei pe vertical: baseline, bottom, middle, top :
<td valign="bottom">jos</td>;
colspan mpreun cu <td> i <th> extinde o celul peste celulele din dreapta
sa - 3 celule unite: <td colspan="3">celule</td>;
rowspan mpreun cu <td> i <th> extinde o celul peste celulele de dedesubt
- 4 celule unite: <td rcwlspan="4">celule</td>;

67
Tehnologii Internet
nowrap aparine elementelor <td> i <th> i interzice ntreruperea unei linii de
text o coloan cu o lime orict de mare: <td nowrap>celula_mare</td>;
&nbsp introduce caracterul spaiu ntr-o celul, astfel nct aceasta sp aib
chenar (celulele vide nu au chenar) se folosete cu <td>;
<br> - are acelai efect ca i &nbsp;
frame specific prile din chenar care vor fi afiate, i ia valorile:
o void - elimin toate muchiile exterioare ale tabelului;
o above - afieaz o muchie n partea superioar a cadrului tabelului;
o below - afieaz o muchie n partea inferioar a cadrului tabelului;
o hsides - afieaz cate o muchie n partea superioar i inferioar cadrului
tabelului;
o lhs - afieaz o muchie n partea din stnga a cadrului tabelului;
o rhs - afieaz o muchie n partea din dreapta a cadrului tabelului;
o vsides - afieaz o muchie n partea din stnga i din dreapta a cadrului
tabelului;
o box - afieaz o muchie pe toate laturile cadrului tabelului;
o border - afieaz o muchie pe toate laturile cadrului tabelului;

Exemplu Tabel_1:
<html>
<head><title>tabelex_4</title></head>
<body><h1 align=center>Un tabel simplu colorat</h1><hr>
<table border="3" bgcolor="green">
<tr> <td>verde 11</td> <td bgcolor="red">rosu 11</td></tr>
<tr bgcolor="blue"> <td>albastru 21</td> <td bgcolor="yellow">galben
22</td></tr>
<tr bgcolor="cyan"> <td>cell 31</td> <td>cell 32</td></tr>
<tr> <td>cell 41</td> <td bgcolor="white">cell 42</td></tr>
</table>
</body>
</html>

Exemplu Tabel_2: cu titlu i cap de tabel


<html>
<head><title> Tabel_2</title></head>
<body><h1 align=left>Tabel cu titlu</h1>
<table border="3"><caption align="top"> Catalog
<tr><th>Student</th> <th>Matematica</th> <th>Romana</th>
<th>Fizica</th> <th>Chimie</th></tr>
<tr align="center" bgcolor="red"><th>Popescu Vasile</th> <td>10</td>
<td>10</td><td>10</td><td>6</td></tr>
<tr align="center"><th bgcolor="blue"> <font color="white">Ionsecu
Sorin</font></th> <td>9</td> <td>6</td><td>8</td><td>9</td></tr>
</table>
</body>
</html>

68
Cap 5: Limbaje de programare i Tehnologii Web

5.2.9. Ferestre sau cadre n HTML


Ferestrele sau (cadrele) permit definirea n fereastra principal a unor subferestre
n care s fie ncrcate documente HTML diferite.
Sub-ferestrele sunt definite ntr-un fiier HTML special, n care blocul
<body>...</body> este nlocuit de blocul <frameset>...</frameset>.
n interiorul acestui bloc, fiecare cadru este introdus prin eticheta <frame>.
Un atribut obligatoriu al etichetei <frame> este src, care primete ca valoare
adresa URL a documentului HTML care va fi ncrcat n acel frame. Definirea cadrelor
se face prin mprirea ferestrelor (i a sub-ferestrelor) n linii i coloane astfel:
mprirea n linii se face cu atributul rows al etichetei <frameset>;
mprirea n coloane se face cu atributul cols al etichetei <frameset>;
valoarea atributelor cols i rows este o list de elemente desprite prin virgul,
care descriu modul n care se face mprirea, i pot fi:
o un numr ntreg de pixeli;
o procente din dimensiunea ferestrei (1 99 %);
o n* care nseamn n pri din spaiul rmas;

Exemplu 1: Se creeaz o pagin Web cu trei cadre mixte. Se mparte fereastra n dou
subferestre orizontale, se umple prima subfereastr cu fiierul index.html, dup care se
mparte a doua subfereastr n dou coloane, una se umple cu winxp.gif i cealalt cu
index2.html.
<html>
<head><title>cadre</title></head>
<frameset rows="*,*">
<frame src="index.html">
<frameset cols="35%,*">
<frame src="winxp.gif">
<frame src="index2.html">
</frameset>
</frameset>
</body>
</html>

Atribute ale chenarelor:


culori pentru chenare: bordercolor are valori specifice pentru culori, i pot
nsoi etichetele <frameset> i <frame>;
dimensionarea chenarului unui cadru : border pentru <frameset> are
valoarea n pixeli, 0 = cadru fr chenar.;
frameborder = 0 nu se afieaz chenarul cadrului;
bare de defilare scrolling pentru <frame> - adaug unui cadru o bar de
69
Tehnologii Internet
derulare, valori posibile: "yes", "no" i "auto";
noresize mpiedic redimensionarea cadrului cu mouse-ul;
marginheight i marginwidth stabilesc distana n pixeli dintre coninutul
cadrului i marginile verticale/orizontale, i pot lua valorile: numr de pixeli sau
procent din lime/nlimea cadrului;

Cadre interne
Un cadru intern este specificat prin intermediul blocului <iframe>...</iframe>.
Un cadru intern se insereaz ntr-o pagina Web n mod asemntor cu o imagine
aa cum rezult din urmtorul exemplu:
<iframe src="pagina1.html" height=40% width=50%> </iframe>
n acest caz, s-a specificat o fereastr de cadru intern care are 40% din nlimea
i 50% din limea paginii curente.
Atributele acceptate de eticheta <iframe> sunt n parte preluate de la etichetele
<frame> i <frameset>, cum ar fi: rc, border, frameborder, bordercolor,
marginheight, marginwidth, scrolling, name, noresize; sau de la eticheta
<img> vspace, hspace, align, width, height;

<html>
<head><title>Cadre_interne</title> </head>
<body>
<a href="index1.html" target="icad">Pagina1</a><br>
<a href="index2.html" target="icad">Pagina2</a><br>
<a href="index3.html" target="icad">Pagina3</a><br>
<a href="index.html" target="icad">Acas</a><br>
<center><iframe width="60%" height="50%" border=2 bordercolor=red
name="icad" src="acasa.html">

Dac vedei acest text nseamn c browserul dumnevoastr nu suport cadre interne.
<a href="p0.html">Pagina fara cadre interne</a> </iframe></center>
</body>
</html>

5.2.10. Formulare
Un formular este un ansamblu de zone active alctuit din butoane, casete de
selecie, cmpuri de editare etc.
Formularele ajut la realizarea paginilor Web care permit utilizatorilor s
introduc informaii i s le transmit serverului. Formularele pot fi de la simple la
foarte complicate.
Un formular este definit ntr-un bloc delimitat de etichetele corespondente
<form> i </form>.

Elementul FORM
<form [action=url] [method=get/post] [enctype=MIMEType]
[onsubmit=script] [onreset=script] [acceptcharset=
set_caractere] [core] [international] [events]>
Elementele formularului
</form>

70
Cap 5: Limbaje de programare i Tehnologii Web
Elementul INPUT
<input
[type=text|password|checkbox|radio|submit|image|reset|button|hidden|
file] [name=nume]
[value=valoare] [checked] [disabled] [readonly] [size=latime]
[maxlength=cuvinte_maxime] [src=url]
[alt=altText] [usemap=url] [align=left|center|right|justify]
[tabindex=numar] [accesskey=keyCombo]
[onfocus=script] [onblur=script] [onselect=script] [onchange=script]
[accept=set_caractere] [core] [international]
[events]>
Acest element input este cel mai important in utilizarea formularelor.

Atributele eseniale ale elementului <form> sunt:


action precizeaz ce se va ntmpla cu datele formularului odat ce acestea
ajung la destinaie. <form action="http://www.yahoo.com/cgi-
bin/nume_fis.cgi">. Script-urile pot fi scrise in limbajele Perl,C,PHP,Unix
shell.
method precizeaz metod utilizat de browser pentru expedierea datelor
formularului. Sunt posibile urmtoarele valori:
o get (implicit) - caz n care datele din formular sunt adugate la adresa
URL precizat de atributul action; nu sunt permise cantiti mari de
date (maxim 1 Kb) - ntre adresa URL i date este inserat un "?".
o post - caz n care datele sunt expediate separat. Sunt permise cantiti
mari de date (ordinul MB)
Pentru ca un formular s fie funcional, trebuie precizat ce se va ntmpla cu el
dup completarea i expediere.
Cel mai simplu mod de utilizare a unui formular este expedierea acestuia prin
pota electronic (e-mail).
Pentru aceasta se folosete un atribut al etichetei <form> s anume action care
primete ca valoare "mailto:" concatenat cu o adresa valid de e-mail ctre care se va
expedia formularul completat.

Elementele unui formular sunt definite cu eticheta <input>, care are urmtoarele
atribute:
type - indic tipul datelor care vor fi introduse:
o text = text,
o submit = buton de trimitere / validare,
o reset = buton de reset / tergere,
o password = parola, acest cmp de editare nu afieaz caracterele n clar,
ci numai caractere *, care ascund de privirile altui utilizator aflat n
apropiere valoarea introdus ntr-un asemenea cmp.
o hidden = nu este vizibil,
o checkbox = caseta de validare, (checkbox) permite selectarea sau
deselectarea unei opiuni;
o radio = buton radio, permit alegerea, la un moment dat, a unei singure
variante din mai multe posibile;
o file = fiier pentru upload;
o select = list de selecie - permite utilizatorului s aleag unul sau mai
multe elemente dintr-o list finit.
71
Tehnologii Internet
Majoritatea tipurilor date de type pot primi urmtorii parametri:
- name permite ataarea unui nume fiecrui element al formularului;
- value permite atribuirea unei valori iniiale unui element al formularului
- size - numrul de caractere vizibile din cmp, dac se depete numrul de
caractere introduse, are loc o derulare a textului;
- maxlenght - numrul maxim de caractere introduse n cmpul de editare,
caracterele introduse n plus sunt neglijate;
- readonly - datele prezente n cmp nu pot fi modificate.

Exemplu 1: Formular cu cmp de editare i buton de


expediere:
<html>
<head><title>Formular_1 </title></head>
<body> Formular cu un camp de editare<hr>
<form action="mailto:xxxxx@xxx.com"
method="post">
Numele: <input type="text" name="numele" value="Popescu Vasile"><br>
<input type="submit" value="expedieaza">
</form>
</body>
</html>

Exemplu 2: Buton RESET


<input type="reset" value="RESET">

Exemplu 3: Editare parol:


Password:<input type="password" name="parola" >

Exemplul 4: Butoane radio:


Alegeti sexul<br>
Masculin:<input type="radio" name="sex" value="b"><br>
Femeiesc:<input type="radio" name="sex" value="f"><br>

Exemplul 5: Casete de validare:


Alegeti meniul:<br>
Pizza <input type="checkbox" name="pizza" value="o portie">
Nectar <input type="checkbox" name="nectar" value="un pahar">
Bere <input type="checkbox" name="bere" value="o sticla">
Cafea <input type="checkbox" name="cafea" value="o ceasca"><br>

Exemplul 6: Casete de fiiere


Alegeti fisierul:<input type="file" name="fisier"
enctype="multipart/form-data"><br>

Exemplul 7: Liste de selecie


Judetul Resedinta:<br>
<select name="Judetul" size="3">
<option value="AB"> Alba

72
Cap 5: Limbaje de programare i Tehnologii Web
<option value="AR" selected> Arad
<option selected value="BC" selected> Bacau
<option value="B"> Bucuresti
<option value="BV"> Brasov
</select><br><br>

Exemplul 8: Cmpuri de editare multilinie acestea pot fi introduse cu tag-ul


<textarea>, care suport urmtoarele atribute:
cols specific numrul de caractere afiate pe o linie;
rows specific numrul de linii afiate simultan;
name ataeaz un nume cmpului de editare multilinie;
wrap (world wrap) trecerea cuvintelor pe rndul urmtor : determin
comportamentul c,pului de editare fa de sfritul de linie, i poate fi:
o off = ntreruperea cuvintelor la marginea dreapt a editorului se produce
numai cnd dorete utilizatorul; caracterul de sfrit de linie este inclus
n textul transmis serverului o dat cu formularul
o hard = se produce ntreruperea cuvintelor la marginea dreapta a
editorului ; caracterul de sfrit de linie este inclus n textul transmis
serverului o dat cu formularul;
o soft = se produce ntreruperea cuvintelor la marginea dreapt a
editorului; nu se include caracterul de sfrit de linie n textul transmis
serverului o dat cu formularul.
<textarea name="text multilinie"
cols="30" rows="5" wrap="off">
Prima linie din textul initial.
A doua linie din textul initial.
</textarea>

Exemplu final:
n exemplul urmtor este prezentat un formular coninnd elemente prezentate
anterior. Cmpurile formularului sunt incluse n celule unui tabel pentru a obine o
aliniere dorit.
<html>
<head><title>formex_10</title></head>
<body><h1>Un formular complex</h1> <hr>
<center><table bgcolor="orange"> <form action="mailto:xxxxx@xxx.com"
method="post">
<caption align="top">MENIU</caption>
<tr align=left><th>Numele:
<td><input type="text" name="numele">
<tr align=left><th>Preumele:
<td><input type="text" name="prenumele"> <tr align=left><th>Telefonul:
<td><input type="text" name="telefonul"> <tr align=left><th>Alegeti
pizza:
<td><input type="checkbox" name="ciuperci">cu ciuperci
<input type="checkbox" name="mexicana">mexicana <input type="checkbox"
name="europeana">europeana
<tr align=left><th>Alegeti plata:<td>
<ul style="background-color:lightblue;"> <li><input type="radio"
name="plata">cash <li><input type="radio" name="plata">card </ul> <tr
align=left><th>Comentarii:
<td> <textarea name="comentarii" cols="30" rows="5" wrap="off">
73
Tehnologii Internet
Inserati aici aprecierile dumneavoastra legate de calitatea
serviciilor noastre </textarea>
<tr align=left valign=top><td>
<input type="reset" value="sterge"><td> <input type="submit"
value="expedieaza">
</form></table></body>
</html>

Observaii:
elementul <form> poate avea un atribut target, care primete ca valoare
numele unei ferestre a browserului n care va fi ncrcat rspunsul trimis
serverului WWW la expedierea unui formular.
toate elementele cuprinse ntr-un formular pot avea un atribut disabled care
permite dezactivarea respectivului element.
toate elementele de tip text cuprinse ntr-un formular pot avea un atribut
readonly care interzice modificarea coninutului acestor elemente.

http://www.worklance.com/htmltutorial/
http://www.drogoreanu.ro/tutorials/index.php

5.3. Limbajul XML


eXtensible Markup Language(XML) este un meta-limbaj de marcare
recomandat de Consoriul Web pentru crearea de alte limbaje de marcare, cum ar fi
XHTML, RDF, RSS, MathML, SVG, OWL etc. Aceste limbaje formeaz familia de
limbaje XML. Meta-limbajul XML este o simplificare a limbajului SGML (din care se
trage i HTML) i a fost proiectat n scopul transferului de date ntre aplicaii pe
internet. XML este acum i un model de stocare a datelor nestructurate i semi-
structurate n cadrul bazelor de date native XML.

5.4. XHTML
eXtensible HyperText Markup Language, sau XHTML, este un limbaj de
marcare ce are aceleai capabiliti expresive ca i HTML, dar cu o sintax mai strict.
XHTML poate fi considerat ca ncruciarea dintre HTML i XML n multe privine,
fiind o reformulare a HTML n XML. XHTML 1.0 a devenit o recomandare World
Wide Web Consortium (W3C) pe data de 26 ianuarie 2000

5.5. CSS

5.5.1. Introducere n css


Fiierul CSS (cascading style sheet = foi de stil n cascada) permite separarea
coninutului (X)HTML de stilul de afiare n pagina. Se utilizeaz codul (X)HTML
pentru aranjarea coninutului n pagina, ns toat prezentarea (fonturi, culori, fundaluri,
borduri, etc) se realizeaz din fiierul CSS. n acest moment, se pot folosi CSS-uri n
dou moduri, i anume interne sau externe.

74
Cap 5: Limbaje de programare i Tehnologii Web
Stilurile interne
n acest caz, codul CSS va fi plasat n interiorul fiecrei pagini html n care vom
folosi stilurile respective, i v codul CSS va fi scris ntre tagurile <head></head>.
Acest lucru se face dup cum se poate vedea n exemplul de mai jos:
<head>
<title>titlu pagina</title>
<style type="text/css">Aici se definesc stilurile CSS</style>
</head>

Folosind aceast metod (stilurile interne), fiecare fiier (X)HTML va conine


codul CSS folosit la stilizare. Asta nseamn c atunci cnd se dorete realizarea unei
schimbri de stil, (mrimea fontului, culoare, etc) va trebui s se opereze modificarea n
toate paginile ce conin acel stil. Metoda descris pn acum este bun atunci cnd
avem de stilizat dou, trei pagini, ns cnd avem de a face cu siteuri de zeci sau sute de
pagini este destul de neplcut s modificm toate paginile.

Stilurile externe
n acest caz, se creeaz un fiier CSS extern (cu orice editor de text simplu:
Notepad, Wordpad) sau cu editoare avansate. De reinut c fiierul CSS va conine doar
cod CSS i trebuie salvat cu extensia *.css.
Inserarea acestui fiier .css n pagina (X)HTML se face foarte simplu,
prinplasarea unui link n seciunea <head></head> a fiecrei pagini n care dorim s
folosim stilul respectiv. Iat un exemplu de inserare a unui fiier extern .css ntr-o
pagin (X)HTML:
<link rel="stylesheet" type="text/css" href="Calea catre fisierul.css"
/>
sau se poate folosi metoda de import dup cum urmeaz:
<style type="text/css">@import url( Calea catre fisierul.css )</style>

Oricare dintre metode este bun i se obine plasnd unul dintre codurile de mai
sus n seciunea <head> </head> a paginii, dup cum se exemplific mai jos:
<head>
<title> titlu pagina </title>
<link rel="stylesheet" type="text/css" href="stil.css" />
</head>
sau
<head>
<title> titlu pagina </title>
<style type="text/css"> @import url( Calea catre fisierul.css )
</style>
</head>
Folosind metoda fiierelor CSS externe, toate paginile (X)HTML vor folosi
acelai fiier de stil. Asta nseamn c dac dorii s facei o schimbare care s aib
efect n toate paginile, este de ajuns s modificai un singur fiier, i anume cel de stil
(.css), i efectul se va observa pe toate paginile (X)HTML ce folosesc acel fiier. Astfel
facei schimbri n tot siteul, indiferent de cte pagini are, fr efort i mai ales foarte
repede.
Iat cteva motive pentru care aceasta metod este mai bun:
ntreinere mai uoar;
dimensiuni reduse ale paginilor;
economie de band internet;
75
Tehnologii Internet
flexibilitate;
ordinea cascadelor

De reinut c se pot folosi att stilurile externe ct i cele interne simultan, dar
mai exist o posibilitate, i anume a stilurilor n linie (inline style).

Stilurile in linie
Acest tip de stil (nu tocmai recomandat) se definesc chiar n codul (X)HTML, n
elementul pe care dorim s l stilizm, aa cum se vede mai jos:
<p style="color: #ff0000;">Text rou</p>
Text rou

Stilurile n linie nu permit schimbri rapide i facile, pe mai multe fiiere n


acelai timp, fiecare element necesitnd atenia dvs, pe toate paginile, etc.

Metoda cea mai bun este , n mod firesc, aceea care ne avantajeaz cel mai
mult. Trebuie reinut ordinea folosirii lor pentru o interpretare corect de ctre
browsere. Toate metodele, se vor executa n cascada, ntr-o "pseudofoaie de stil", n
ordinea urmtoare:
stiluri n linie;
foaie de stil intern;
foaie de stil extern.

Dac ne referim la "care este mai bun", putem spune c depinde de ceea ce v-
ai propus s realizai/obinei. Dac avei o singur pagin pe care trebuie s o stilizai,
putei folosi metoda stilurilor interne fr nici o problem. Pe de alt parte, dac avei de
stilizat un numr mare de pagini, cel mai bine este s folosii foile de stil externe. Modul
n care se vor implementa foile externe n pagini rmne la latitudinea proiectantului, i
se poate alege ntre metoda cu link sau metoda cu @import, dup cum sa exemplificat
mai sus.
Trebuie specificat ns c metoda importului (@import) va fi un pic mai greoaie,
fiind posibil s dureze o secund, dou, pn se ncarc foaia de stil, timp n care
coninutul este afiat nestilizat.
Utilizatorii cu dizabiliti
Folosirea foilor de stil externe mai are un avantaj major, i anume permit
vizualizarea coninutului paginii html i de ctre utilizatorii cu disabiliti. De exemplu,
utilizatorul respectiv, poate renuna la folosirea foii de stil pe care ai definit-o dvs i
poate aplica o foaie de stil special, a lui, care l ajut s vizualizeze pagina ntr-un mod
facil. Poate mri fontul, poate schimba culorile, etc.
Probleme de browser : nu toate browserele interpreteaz la fel stilurile. CSS-ul
va fi interpretat diferit de browsere, ceea ce va cauza dureri de cap. Exist totui metode
de rezolvare a acestor probleme, care vor fi explicate la momentul potrivit.

5.5.2. Sintaxa css


Sintaxa CSS-ului este diferit de cea a (X)HTMLului, ns nu este foarte dificil
de neles
Sintaxa CSS-ului este compus doar din 3 pri:

76
Cap 5: Limbaje de programare i Tehnologii Web
Selectorul:
selector { proprietate: valoare }

Selectorul este elementul (X)HTML pe care doreti s l stilizezi. Proprietatea


este chiar titlul (numele) proprietii respective, iar valoarea reprezint stilul pe care l
aplici proprietii.
Fiecare selector poate avea multiple proprieti, si fiecare proprietate din acel
selector are valori independente.
Proprietatea este separat de valoare cu semnul ":". Toate proprietile mpreun
cu valorile lor, aparinnd aceluiai selector sunt cuprinse ntre acolade "{}".
Multiplele valori din aceeai proprietate sunt separate prin virgul "," i dac o valoare
conine mai mult de un cuvnt, acestea se cuprind ntre ghilimele '"'.
Exemplu:
body {
background: #eeeeee;
fontfamily: "Trebuchet MS", Verdana, Arial, serif;
}

Dup cum se observ, culoarea fundalului (background) este separat de font


(fontfamily) cu ajutorul semnului ";" i un tab (semicoloana), diferitele valori pentru
font sunt desprite prin virgule, iar valoarea "Trebuchet MS", deoarece conine dou
cuvinte, este cuprins ntre ghilimele.
Aplicnd acest stil vom obine un corp de pagina (body) de culoare gri deschis,
iar fontul folosit va fi unul despre care suntem siguri c majoritatea utilizatorilor l au
instalat pe sistemele lor.
Layoutul codului se poate modifica, ns este mai uor de citit dac fiecare
proprietate este pe o linie separat, una sub alta, fiecare cu un tab n fa.

Motenirea:
Atunci cnd se plaseaz un element n interiorul altuia, elementul plasat va
moteni proprietile elementului n care a fost plasat. Asta doar daca nu se atribuie
aceleai proprieti ns cu valori diferite fiecrui element. De exemplu, un font
specificat pentru corp (body) va fi folosit n toat pagina, indiferent de elementul unde
este folosit, doar dac nu se specific un font diferit pentru elementul respectiv.
body {fontfamily: Verdana, serif;}

n acest caz, tot textul din fiierul (X)HTML va folosi fontul Verdana. Dac se
dorete folosirea unui alt font pentru un element anume (de exemplu pentru paragraf
sau pentru H1), va trebui s se defineasc acest lucru, cum este i n exemplul de mai
jos:
h1 {fontfamily: Georgia, sansserif;}
p {fontfamily: Tahoma, serif;}

Acum toate tagurile vor folosi fontul Georgia i toate paragrafele (<p>) vor
folosi Tahoma, lsnd totui restul textului (din alte taguri) neschimbat, folosind n
continuare Verdana.
Exist ns i cazuri n care elementele plasate n interiorul altor elemente, nu
motenesc proprietile acestora din urm. De exemplu, dac marginea pentru corp este
77
Tehnologii Internet
setat la valoarea de 20 pixeli, celelalte elemente din pagina nu vor avea i ele marginea
setat la 20 de pixeli.
body {margin: 20px;}

Combinarea selectorilor
Se pot combina elementele unui selector astfel:
h1, h2, h3, h4, h5, h6 {
color: #009900;
fontfamily: Georgia, sansserif;
}
Dup cum se observ n exemplul de mai sus, am grupat toate elementele de tip
header ntr-un singur selector. Ele sunt separate de virgule. Rezultatul acestui stil este
acela c toate tagurile header vor fi de culoare verde cu font Georgia. Dac un utilizator
nu are instalat pe sistem primul font (Georgia), atunci se va folosi n mod automat
urmtorul font, i anume sansserif.
Tagurile de comentarii
Comentariile, ca i n cazul programrii n alte limbaje, sunt foarte folositoare, i
pot ajuta la identificarea rapid a unui anume element sau rolul pe care acel element l
are. Se pot folosi comentariile i n fiierele .css, dup cum se exemplific n continuare:
/* Acesta este un comentariu si nu va fi interpretat de browsere */

se poate observa c modul de inserare al comentariilor este identic ca n C++ i


php, testul este introdus ntre caracterele /* */.

5.5.3. Clasele css


Clasele ne permit s stilizm anumite taguri sau elemente din codul (X)HTML,
difereniat. Similar cu metoda "in linie" din introducere n css. Excepia n cazul claselor
const n faptul c stilurile pot fi schimbate prin schimbarea foii de stil. Astfel se poate
folosi acelai selector n fiierul (X)HTML i totui pagina va arta diferit, n funcie de
foaia de stil utilizat.

Exemplu:
Ca s o spunem cat mai simplu, propoziia pe care o citii, este definit n
foaia de stil CSS astfel:
p {
fontsize: small;
color: #333333;
}

Simplu, ns, dac doresc s schimb culoarea cuvntului "propozitia" n verde,


bold, lsnd ns restul propoziiei neschimbat? Se va folosi urmtorul cod n fiierul
(X)HTML:
Ca sa o spunem cat mai simplu , <span class = "verdeboldtext"> "propoziia"
</span> pe care o citii, este definit n foaia de stil CSS astfel:
.verdeboldtext {
fontsize: small;
color: #008080;
fontweight: bold;
}

78
Cap 5: Limbaje de programare i Tehnologii Web
Rezultatul final arta aa:
Ca s o spunem ct mai simplu, "propoziia" pe care o citii, este definit
n foaia de stil CSS astfel

De reinut c c definirea unei clase ncepe cu semnul punct (.). Numele de


"verdeboldtext" este dat doar de exemplu, se poate folosi orice denumire, ns
recomandarea este s se foloseasc denumiri intuitive, care s spun rapid cum arat
stilul respectiv. Se poate folosi clasa ".verdeboldtext" ori de cte ori este nevoie.

5.5.4. IDurile css


IDurile sunt similare cu clasele, cu excepia ca un ID nu poate fi folosit pe
aceeai pagin (X)HTML dect o singur dat. n general, ID-urile se folosesc pentru
stilizarea elementelor dintr-o pagin care apar doar o singur dat, altfel, folosirea
claselor este recomandat. Containerul principal al paginii din exemplul de mai jos, este
definit astfel:
<div id="container">
Tot coninutul paginii este plasat n acest container.
</div>

Sa folosit ID-ul n loc de clas, deoarece elementul respectiv apare o singur


dat pe pagin. Urmeaz codul din fiierul CSS, care arata astfel:
#container {
width: 80%;
margin: auto;
padding: 20px;
border: 1px solid #666;
background: #ffffff;
}
De observat c selectorul IDurilor ncepe cu semnul diez (#) i nu cu punct (.)
cum se ntmpl n cazul claselor.

5.5.5. Utilizarea css n paginile (X)HTML.

5.5.5.1. Divizii
Divizia poate fi definit ca: element de tip bloc folosit pentru definirea unor
zone din fiierul (X)HTML. O divizie poate conine toate prile care alctuiesc siteul
dvs., incluznd alte divizii, spanuri, imagini, text, etc. Se poate defini o divizie ntr-un
fiier (X)HTML, plasnd urmtorul cod ntre tagurile <body> </body> :
<div>
Coninutul sitului este plasat aici
</div>

Bineneles, acesta poate fi stilizat un pic. Se modific n acest caz, astfel:


<div id="container">
Coninutul sitului este plasat aici
</div>

79
Tehnologii Internet
Iar n fiierul css avem urmtorul cod:
#container{
width: 70%;
margin: auto;
padding: 20px;
border: 1px solid #666;
background: #ffffff;
}

Acum, tot coninutul din divizia noastr va fi stilizat dup regula "container", pe
care am definit-o n fiierul css. O divizie, realizeaz implicit o trecere la linie nou
(linebreak). Se pot folosi att ID-urile ct i clasele pentru stilizarea unei divizii n
cadrul siteului.

5.5.5.2. Spanul css


Spanurile sunt similare diviziilor cu excepia c sunt de tipul "in linie" i nu de
tip "bloc". Spanurile nu execut implicit linie nou dup inserarea lor. Se poate folosi
spanul pentru stilizarea unor zone de text, dup cum urmeaz:
<span class="italic">Acest text este italic</span>

n fiierul CSS avem:


.italic{
fontstyle: italic;
}

Rezultatul final este: Acest text este italic.

5.5.5.3. Marginile css


Motenite: NU
Dup cum probabil v dai seama, proprietatea "margine" se refer la marginea
(spaiul) dintre un element (X)HTML i celelalte elemente din jurul lui. Marginea poate
fi setat pentru extremitile "sus", "stnga", "dreapta" i "jos" ale unui element. Vezi
exemplul de mai jos:
margintop: lungime / procente sau auto;
marginleft: lungime / procente sau auto;
marginright: lungime / procente sau auto;
marginbottom: lungime / procente sau auto;

Dup cum se observ n exemplul de mai sus, avem la dispoziie 3 variante


pentru valori pentru margine: lungime, procent, auto. De asemenea, se pot declara toate
cele 4 margini ntr-o singura proprietate:
margin: 10px 10px 10px 10px;

Dac se folosete varianta din urm, ordinea marginilor este urmtoarea:


1. sus
2. dreapta
3. jos
4. stnga

80
Cap 5: Limbaje de programare i Tehnologii Web
Dac este declarat o singur valoare, aceasta este valabil pentru toate cele 4
margini:
margin: 10px;

n cazul n care se declar doar dou sau trei dintre margini, valorile nedeclarate
sunt "luate" din partea opus:
margin: 10px 10px; /* 2 valori */
margin: 10px 10px 10px; /* 3 valori */

Se poate seta marginea i cu valori negative. n cazul n care nu se declar


marginile unui element, acestea sunt n mod implicit egale cu zero.
margin: 10px;

Elementele precum paragrafele (<p>) au margini implicite n anumite browsere,


aa c va trebui s fie declarat marginea egal cu zero ca sa nu existe diferene de
randare n browsere diferite. Acest lucru se obine astfel:
p {margin: 0;}

NOT: dac valoarea care se atribuie marginii este egal cu zero, nu mai este necesar
specificarea unitii de msur, fie ea pixel, punct, sau oricare alta.
Se poate observa n exemplul de mai jos, cum elementele sunt setate la 20px
(pixeli) fa de corp (body).
body{
margin: 20px;
background: #eeeeee;
fontsize: small;
fontfamily: Tahoma, Arial, "Trebuchet MS", Helvetica, sansserif;
textalign: left;
}

5.5.5.4. Padding css


Mostenit: NU
Paddingul este distana dintre bordura unui element (X)HTML i coninutul lui.
Majoritatea regulilor de la marginile css se aplica i la padding, cu excepia c aici nu
exist valoarea "auto" i nu pot fi declarate valori negative.
paddingtop: lungime / procent;
paddingleft: lungime / procent;
paddingright: lungime / procent;
paddingbottom: lungime / procent;

Se poate observa n exemplul de mai sus, c avem la dispoziie dou posibiliti


pentru proprietatea "padding": lungime i procent. Este posibil s se declare paddingul
pentru un element ntr-o singur proprietate, astfel:
padding: 10px 10px 10px 10px;

Daca se declar toate cele patru valori, ca n exemplul de mai sus, ordinea lor
este urmtoarea: 1. sus; 2. dreapta; 3. jos; 4. stnga
n cazul n care se declar o singura valoare, aceasta este valabila pentru toate
cele patru laterale ale elementului respectiv.
padding: 10px;

81
Tehnologii Internet
Dac se declar doar dou sau trei valori, valorile nedeclarate sunt luate din
prile opuse:
padding: 10px 10px; /* 2 valori */
padding: 10px 10px 10px; /* 3 valori */

Dup cum tii ordinea celor 4 valori este: sus, dreapta, jos, stnga. Cnd
declarai doar primele dou nseamn ca ai declarat valoarea pentru sus i pentru
dreapta. Valorile pentru celelalte dou vor fi: jos=sus, stnga=dreapta.
Daca nu declarai paddingul unui element, acesta va fi implicit egal cu zero.

NOTA: dac valoarea pe care o atribuii marginii este egala cu zero, nu mai este
necesara specificarea unitii de msur, fie ea pixel, punct, sau oricare alta.

Se poate vedea mai jos, cum containerul principal are paddingul setat la 30px
(pixeli) ntre marginea lui i textul coninut.
#container{
width: 70%;
margin: auto;
padding: 30px;
border: 1px solid #666;
background: #ffffff;
}

5.5.5.5. Fonturi css


Motenit: DA
Fontul
Proprietile fontului pot stabili stilul, mrimea, nlimea liniei i tipul fontului
folosit:
font: italic bold normal small/1.4em Verdana, sansserif;

Exemplul de mai sus seteaz textul unui element, ca fiind italic, bold, de mrime
relativ, cu distana ntre linii de 1.4em i un font Verdana sau orice alt font de tipul
sansserif.
Familia de fonturi
Se poate stabili ce font va fi folosit la afiare cu ajutorul proprietii
"fontfamily".
Exist dou posibiliti pentru valori:
* familyname
* generic family

Dac se stabilete o anumit familie de fonturi, este bine s se specifice la sfrit


i o familie generic de fonturi. Ca si cum ar fi o list de prioriti. Astfel nct, dac
vizitatorul nu are instalate fonturile preferate de dvs, vor fi folosite fonturile din familia
generic.
fontfamily: Verdana, sansserif;

Mrimea fontului
Mrimea textului este dat de proprietatea "fontsize":
fontsize: valoare;

82
Cap 5: Limbaje de programare i Tehnologii Web
Exist o mulime de posibiliti pentru valoare: xxlarge, xlarge, larger, large,
medium, small, smaller, xsmall, xxsmall, length, % (procent).

Stilul fontului
Proprietatea "fontstyle" specific stilul fontului:
fontstyle: valoare;

Posibilele valori pot fi: normal. Itailc, oblique.

Varianta fontului
Putem stabili varianta fontului cu ajutorul proprietii fontvariant:
fontvariant: valoare;
Pentru "valoare" se pot folosi urmtoarele variante: normal, smallcaps

Grosimea fontului
Grosimea fontului folosit este controlata de proprietatea "fontweight":
fontweight: valoare;
Posibilele valori sunt: lighter, normal, 100, 200, 300, 400, 500, 600, 700, 800,
900, bold, bolder.

5.5.5.6. Ancore, linkuri i pseudo clase


n continuare se prezint cteva metode prin care se poate utiliza CSS-ul pentru
a stiliza link-urile:
a:link {color: #009900;} - seteaz culoare unui link implicit, cnd nu are
loc nici un eveniment;
a:visited {color: #999999;} - ne arata ce culoare are linkul, cnd
vizitatorul a vizitat deja pagina respectiv, mai exact a executat click anterior pe
acel link
a:hover {color: #333333;}- seteaz culoarea linkului atunci cnd mouseul
este deasupra lui. Este evenimentul cunoscut ca i "mouseover" (mouse
deasupra);
a:focus {color: #333333;} - este asemntoare cu cea anterioar, ns are
efect cnd utilizatorul folosete tastatura pentru navigare (tasta "Tab") i nu
mouseul;
a:active {color: #009900;} specific culoarea unui link atunci cnd acesta
este apsat. La click pe link, culoarea se va schimba cu cea specificat n aceast
linie.

NOT: Trebuie declarat "a:link" i "a:visited" nainte de "a:hover". Mai mult, trebuie
declarat "a:hover" naintea lui "a:active".
Folosind regula general de mai sus, toate linkurile din pagina dvs vor fi
afectate, i vor folosi aceast regul. Se pot seta stiluri de linkuri separate pentru
anumite poriuni din pagin, dac se dorete acest lucru.

83
Tehnologii Internet
5.5.5.7. Pseudo Clasele
Este posibil setarea de culori diferite pentru linkurile din pagin (de exemplu
meniul de o culoare, linkurile din text de o alt culoare, etc ) folosind pseudoclasele.
De exemplu, s spunem c se dorete ca linkurile din text s fie diferite de cele
din coloana din stnga sau dreapta. Se poate obine acest lucru astfel:
#content a:link {color: #009900;}
#content a:visited {color: #999999;}
#content a:hover {color: #333333;}
#content a:focus {color: #333333;}
#content a:active {color: #009900;}

Presupunnd ca avem coninutul principal ntr-un div numit "content", toate


linkurile din acest div vor fi stilizate de acest selector. Daca div-ul are alt nume este de
ajuns s se schimbe numele n foaia de stil din "#content" n unul potrivit.
Apoi, linkurile dintr-o coloan se stilizeaz aa:
#column a:link {color: #009900;}
#column a:visited {color: #999999;}
#column a:hover {color: #333333;}
#column a:focus {color: #333333;}
#column a:active {color: #009900;}

nc odat, presupunem ca divul coloanei se numete "column". Aceeai metod


se aplic i pentru a declara o clasa n loc de un Id.
a.column:link {color: #009900;}
a.column:visited {color: #999999;}
a.column:hover {color: #333333;}
a.column:focus {color: #333333;}
a.column:active {color: #009900;}

n acest caz ns, va trebui s atribuim fiecrui link clasa potrivit:


<a class="column" href="#" title="textul linkului"> textul linkului
</a>

Exist totui o cale mai uoar:


.column a:link {color: #009900;}
.column a:visited {color: #999999;}
.column a:hover {color: #333333;}
.column a:focus {color: #333333;}
.column a:active {color: #009900;}

... urmnd ca n fiierul (X)HTML s avem:


<div class="column">
<a href="#" title="textul linkului"> textul linkului </a>
< /div>

Sunt i alte proprieti care pot fi aplicate linkurilor, aproape orice proprietate
folosit la stilizarea textului poate fi aplicat i la linkuri.

84
Cap 5: Limbaje de programare i Tehnologii Web
5.5.5.8. Fundaluri css
Mostenit: NU
Fundalul
Fundalul unui element poate fi stilizat cu o declaraie de proprietate adecvat.
background: #ffffff url(calea_catre_imagine) top left norepeat fixed;
Valori: attachment color image position repeat

Sau, se poate seta fiecare proprietate separat, dup cum urmeaz:

Ataament fundal
Daca se folosete o imagine ca fundal, se poate specifica dac fundalul se mic
o dat cu pagina (la scroll vertical) sau este fix cu ajutorul proprietii
"backgroundattachment".
backgroundattachment: valoare;
Valori: fixed, scroll

Culoarea fundalului Proprietatea "backgroundcolor" specific culoarea


fundalului:
backgroundcolor: valoare;
Posibile valori: color name, hexadecimal number, RGB color code, transparent

Imaginea de fundal Se poate seta o imagine ca fundal al unui element, cu


proprietatea "backgroundimage".
backgroundimage: url(calea_catre_imagine);
Valori: url, none

Pozitia fundalului - Imaginea folosit cu rol de fundal se poate poziiona cu


ajutorul proprietii backgroundposition.
backgroundposition: valoare;
Valorile posibile sunt: top left, top center, top right, center left, center center,
center right, bottom left, bottom center, bottom right, x%, y%, xpos, ypos.

Repetarea fundalului - Se poate face ca imaginea folosit la fundal s se repete


pe axa x sau pe axa y a ecranului folosind proprietatea "backgroundrepeat".
backgroundrepeat: valoare;
Valori: norepeat, repeat, repeatx, repeaty.

5.5.6. Validarea fiierelor CSS


Subiectul validrii fiierelor (X)HTML sau CSS a fost, i este nc, dezbtut pe
multe forumuri de specialitate i probabil va mai fi mult timp de acum nainte.
ntotdeauna vor fi preri pro validare i preri contra. Haidei s vedem care sunt cteva
dintre avantajele i dezavantajele obinute n urma alegerii noastre de a valida sau nu o
pagin.
Definirea validrii codului: validarea unei pagini ne asigur c sintaxa codului
scris este corect, conform specificaiilor "W3 Consortium". (organizaie al crei scop
este acela de a emite specificaii ce asigur promovarea unui web "curat" i
standardizat)

85
Tehnologii Internet
Trebuie s spunem ns, c dac avem o pagin valid, asta nu nseamn
neaprat c ea va fi afiat corect pe toate browserele.

Motive pentru validarea codului:


1 Asigurarea compatibilitii pe ct mai multe browsere - Chiar dac realizai
siteul n aa manier nct se vede perfect n browserul dvs favorit, este posibil s nu fie
afiat corect n toate browserele. Asta pentru c nu toate au acelai sistem de randare al
paginii, unele sunt mai permisive cu erorile, altele mai stricte, etc. Avnd o pagin
valid, ne asigurm c am eliminat cel puin o problem, si obinem o compatibilitate
maxim cu un numr mai mare de browsere.
2 Vizibilitate n motoarele de cutare - Cnd exist erori (de cod, de sintaxa) pe
o pagin, unele browsere compenseaz aceste erori, i afieaz totui corect pagina. Nu
la fel st situaia ns, cnd vorbim de motoarele de cutare. La fel ca i browserele,
cnd interpreteaz o pagin, crawlerul unui motor de cutare trebuie s interpreteze
codul surs al paginii, i s ia anumite decizii, n funcie de coninutul gsit. Avnd o
pagin invalid, riscai s nu v fie indexat pagina, sau s fie indexat parial.
3 Profesionalism - Pn la urm, modul n care realizai paginile web, reflect
profesionalismul i aptitudinile dvs. Un portofoliu de siteuri valide va cntri mai greu
n faa viitorilor clieni dect un portofoliu plin de pagini invalide, chiar dac ele se
afieaz corect n browser.

Cum i unde se valideaz un fiier CSS?


Pentru validarea fiierelor CSS folosii unealta pus la dispoziie de W3C la
adresa http://jigsaw.w3.org/cssvalidator/.

O resurs bun, n limba romn, pentru nceptorii n CSS este site-ul CssPlaza.
Prezint sintaxa css, tutoriale css, articole. http://www.cssplaza.com/tutoriale-css/

5.6. AMP Apache, MySQL, PHP


Acronimul pentru AMP vine de la o soluie multi-platform alctuit din
programe software/freeweare, folosite mpreun pentru website-uri sau servere.
Apache Serverul web
MySQL baza de date
PHP limbajul de programare, unde poate fi i Perl sau Python

Combinarea acestor tehnologii este folosit pentru a defini infrastructura unui


server web, pentru a defini numele limbajului de programare i pentru a stabili
distribuia software de pachete.
Dac se ine cont i de sistemul de operare utilizat avem mai multe variante,
dintre care cele mai importante sunt LAMP pentru Linus i WAMP pentru Windows.
Cele trei aplicaii menionate mai sus pot fi instalate individual, lucru care este
ceva mai complicat i care necesit mai mult munc pentru configurare (care nu
reuete ntotdeauna) sau se poate utiliza o aplicaie care le nglobeaz pe toate trei, i
anume EasyPHP , care se instaleaz ca orice aplicaie sub Windows, i poate fi
descrcat gratuit de pe http://www.easyphp.org/telechargements.php3.
Cursul i laboratoarele sunt realizate pe baza cestui pachet de aplicaii, n
versiunea EasyPHP 2.0 beta1, i care conine urmtoarele:
86
Cap 5: Limbaje de programare i Tehnologii Web
Apache Version Apache/2.2.3 (Win32)
PHP/5.2.0
MySQL

Pachetul este instalat n C:\Program Files\EasyPHP 2.0b1\ iar directorul unde


sunt inute i de unde se acceseaz paginile i scripturile PHP este www.
ATENIE: Dac fiierele HTML pot fi deschise cu un navigator Web oriunde
s+ar afla ele, scripturile PHP trebuie apelate scriind adresa
http://localhost.numefiier.php deoarece scriptul PHP este interpretat de serverul Web
(Apache) i rezultatul interpretrii este trimis bowserului, acesta netiind s interpreteze
PHP aa cum o face cu HTML. De asemenea, scripturile php trebuie amplasate n
directorul C:\Program Files\EasyPHP 2.0b1\www, mai sus menionat.

Serverul web Apache HTTP este un server web pentru sistemele Unix,
Microsoft Windows, Novell NetWare, MacOS si alte sisteme. Apache este un server
web important, foarte raspandit la scara mondiala in domeniul serverelor web Apache
este un server viabil, sub licenta open source/freeweare a venit ca alternativa a altor
servere web cunoscute si dezvoltate de companii precum SunMicrosystems, Microsoft
Serverul Web Apache este dezvoltat si mentinut de o comunitate de
programatori sub numele de Apache Software Foundation, fiind promovat sub licenta
Apache, Apache HTTP Server.
Pentru a putea accesa fisierele *.html din reea, n fiierul de configurare al
serverului apache, aflat n C:\Program Files\EasyPHP 2.0b1\conf_files httpd.conf,
trebuie adugat linia de comand listen adresa serverului, aa cum se vede mai jos:
#Listen 12.34.56.78:80
Listen 127.0.0.1:80
#Listen adresa IP a serverului, de exemplu:
Listen 192.168.1.2:80

PHP este un limbaj de programare destinat n primul rnd Internetului, aducnd


dinamic unei pagini de web. Este unul din cele mai importante limbaje de programare
web open-source i server-side. Numele PHP provine din limba englez i este un
acronim recursiv : Php: Hypertext Preprocessor. Exemple faimoase de utilizare a acestui
limbaj sunt PhpBB (forum), PhpNuke(CMS), chiar i MediaWiki, software-ul din
spatele Wikipedia. Folosirea PHP poate fi vzut ca o alternativ gratuit la utilizarea
unor limbaje comerciale cum sunt ASP de la Microsoft, ColdFusion de la Macromedia,
sau chiar JSP de la Sun Microsystems.
PHP-ul este unul din cele mai folosite limbaje de programare server-side,
conform unui studiu efectuat de Netcraft n aprilie 2002, aprnd pe 9 din cele 37
milioane de domenii cercetate n studiu. De asemenea, exist un grafic al creterii
folosirii PHP-ului pe site-ul oficial. Popularitatea de care se bucur acest limbaj de
programare se datoreaz urmtoarelor caracteristici :
Familiaritatea: sintaxa limbajului este foarte uoar combinnd sintaxele unora
din cele mai populare limbaje Perl sau C;
Simplitatea: sintaxa limbajului este destul de liber. Nu este nevoie de includere
de biblioteci sau de directive de compilare, codul PHP inclus ntr-un document
executndu-se ntre marcajele speciale;

87
Tehnologii Internet
Eficiena: PHP-ul se folosete de mecanisme de alocare a resurselor, foarte
necesare unui mediu multiuser, aa cum este Web-ul;
Securitatea: PHP-ul pune la dispoziia programatorului un set flexibil i eficient
de msuri de siguran;
Flexibilitatea: fiind aprut din necesitatea dezvoltrii Web-ului, PHP a fost
modularizat pentru a ine pasul cu dezvoltarea diferitelor tehnologii. Nefiind
legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele
servere web existente: Apache, IIS, Zeus, server, etc.;
Gratuitatea: este probabil cea mai important caracteristic a PHP-ului.
Dezvoltarea PHP-ului sub licena open-source a determinat adaptarea rapid
PHP-ului la nevoile Web-ului, eficientizarea i securizarea codului.

MySQL este un sistem de gestiune a bazelor de date relaional, produs de


compania suedez MySQL AB i distribuit sub Licena Public General GNU. Este cel
mai popular SGBD open-source la ora actual, fiind o component cheie a stivei LAMP
(Linux, Apache, MySQL, PHP).
Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu
MySQL se pot construi aplicaii n orice limbaj major. Exist multe scheme API
disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de
programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland
Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip
specific API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de
programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL
cum ar fi ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele
companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin
intermediul crora respectivele limbaje s poat folosi acest SGBD mult mai uor dect
prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu
MyVBQL) sau comerciale.
Licena GNU GPL nu permite ncorporarea MySQL n softuri comerciale; cei
care doresc s fac acest lucru pot achiziiona, contra cost, o licen comercial de la
compania productoare, MySQL AB.
MySQL este component integrat a platformelor LAMP sau WAMP
(Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicaie web
este strns legat de cea a PHP-ului care este adesea combinat cu MySQL i denumit
Duo-ul Dinamic. n multe cri de specialitate este precizat faptul ca MySQL este mult
mai uor de nvat i folosit dect multe din aplicaiile de gestiune a bazelor de date, ca
exemplu comanda de ieire fiind una simpl i evident: exit sau quit.
Pentru a administra bazele de date MySQL se poate folosi modul linie de
comand sau, prin descrcare de pe internet, o interfa grafic: MySQL Administrator
i MySQL Query Browser. Un alt instrument de management al acestor baze de date
este aplicaia gratuit, scris n PHP, phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX,
FreeBSD, GNU/Linux, MacOS X, NetBSD, Solaris, SunOS, Windows
9x/NT/2000/XP/Vista.

88
Cap 5: Limbaje de programare i Tehnologii Web
5.7. Introducere n PHP

5.7.1. Elemente de baz


Orice script PHP ncepe cu: "<?php" sau "<?"i se termin cu "?>".
(echivalentul acoladelor {} din C++ i a lui begin i end din pascal)
Ca i n HTML, paragrafele, alte scripturi i coduri se introduc cu <tag> i se
termin cu </tag>.
Comentariile din text pot fi introduse astfel (ca n C++ i pascal) :
// - se ignor tot rndul;
/* */ se ignor toate liniile dintre aceste tag-uri.

Primul script:
<?php
echo 'Acesta este un test <br>';// Acesta este un comentariu n
stil c++
/* Acesta este un comentariu multilinie
cu o alt form de comentariu*/
echo "Acesta este un alt test <br>";
echo 'un test final <br>'; # Acesta este un comentariu pe o linie
?>

Se salveaz ntr-un fiier test1.php n directorul C:\Program Files\EasyPHP


2.0b1\www, se deschide navigatorul Internet i se tasteaz: http://localhost/test1.php
Pe ecran ar trebui s apar textele dintre ghilimele.

echo afieaz pe ecran textul dintre ghilimele, care pot fi simple sau duble, dar
de acelai tip i la nceputul i la sfritul textului.
<br> - break sfrit de linie, se trece pe rndul urmtor.

5.7.2. Tipuri de date, variabile, constante, operatori


PHP suport opt tipuri de primitive, i anume:
Patru tipuri scalar:
o Boolean, cu dou valori adevrat (true) sau fals (fals),
<?php
$foo = True; // se atribuie valoarea TRUE variabilei $foo
?>
o ntregi: ce pot lua valorile [-2,-1,0,1,2,] i pot fi decimale, octale (n
baza opt ncep cu 0 - zero) i hexazecimale - ncep cu 0x;
<?php
$a = 1234; // numr decimal
$a = -123; // numr negative
$a = 0123; // numr octal (echivalent lui 83 decimal)
$a = 0x1A; // numr hexadecimal (echivalent lui 26 decimal)
?>
o Virgul mobil (float, double sau real);
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

89
Tehnologii Internet
o ir de caractere (string) dac irul este introdus ntre ghilimele duble
("), PHP nelege majoritatea caracterelor speciale, dac e introdus ntre
ghilimele simple ('), caracterele speciale trebuie precedate de (\);
Dou tipuri compuse:
o Vector (array) n PHP vectorii sunt mulimi formate din chei, fiecrei
chei i se ataeaz o valoare;
array( cheie => valoare
, ...
)
// cheia poate fi un ntreg sau un ir
// valoare poate fi orice valoare
exemplu:
<?php
$arr = array("foo" => "bar", 12 => true);
echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>
o Obiect obiectele sunt iniializate de comanda class;
<?php
class Salut {
function show_Salut()
{ echo "Buna ziua tuturor studentilor muncitori."; }
}
$bar = new Salut;
$bar->show_Salut();
?>
Dou tipuri speciale:
o Resource aceste variabile sunt folosite pentru pstrarea unor referine
ctre anumite resurse externe (conexiuni la baze de date, fiiere), sunt
create i utilizate de anumite funcii;
o NULL este o valoare special atribuit oricrei variabile care nu a fost
iniializat. O variabil are tipul NULL dac: - i s-a atribuit constanta
NULL, nu a fost iniializat, a fost deziniializat (cu funcia unset()).

iruri i caractere speciale


\n salt la linie nou;
\r retur de car;
\t tab orizontal;
\\ - backslash;
\$ - simbolul dolarului;
\" - ghilimele

VARIABILE
n PHP variabilele sunt reprezentate de simbolul dolar $, urmat d numele
variabilei. Numele variabilei este case-senzitive. Numele unei variabile ncepe cu o
liter sau cu caracterul underscore _, urmat de restul numelui:
<?php
$var = 'Dan';
$Var = 'Ion';
echo "$var, $Var"; //se afieaz "Dan, Ion "
//pentru afiare, numele variabilei se introduce ntre ".." ghilimele
duble

90
Cap 5: Limbaje de programare i Tehnologii Web
$4site = 'not yet'; // invalid; ncepe cu un numr
$_4site = 'not yet'; // valid; ncepe cu underscore
$tyte = 'masina'; // valid; '' este (Extended) ASCII 228.
?>

Variabile predefinite:
$GLOBALS = pot fi accesate toate variabilele globale care sunt accesibile
script-ului PHP curent
$_SERVER = conine o serie de variabile ale cror valori sunt setate de server-ul
web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuie al
script-ului curent.
$_GET i $_POST conin variabile primite de script prin intermediul unor
transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin
intermediul acestor vectori, pot fi accesate valorile cmpurilor dintr-un formular care a
fost completat i transmis folosind una dintre cele dou metode.
$_COOKIE conine valorile variabilelor care cuprind informaii referitoare la
cookie-urile pstrate pe calculatorul utilizatorului ce acceseaz pagina web.
$_FILES conine variabile primite de script prin intermediul ncrcrilor de
fiiere prin metoda post.
$_ENV conine variabile disponibile prin intermediul mediului n care este
executat.
$_REQUEST conine variabile disponibile prin intermediul oricrui tip de
mecanism cu ajutorul cruia utilizatorul poate introduce date.
$_SESSION conine variabile care corespund sesiunii curente a script-ului.

CONSTANTE
O constant stocheaz o valoare, cum este i o variabil, dar aceast valoare,
dup ce a fost stabilit nu mai poate fi modificat n script.
Pentru a defini o constant, ne vom folosi de funcia define(); iar numele
constantelor este scris cu MAJUSCULE, aceasta opiune nu este obligatorie, nsa va
face codul dumneavoastra mai frumos i mai lizibil.
O diferenta importanta ntre constante i variabile, este faptul c o constant nu
are n faa ei semnul $.
<?php
define("SPEC", "Tehnologia Informatiei");
define("GRUPA", "231");
echo SPEC;
echo GRUPA; ?>
OPERATORI

Operatori aritmetici
Examplu Nume Rezultat
-$a Negaie Opusul lui $a.
$a + $b Adunare Suma lui $a i $b.
$a - $b Scdere Diferena dintre $a i $b.
$a * $b nmulire Produsul dintre $a i $b.
$a / $b mprire Raportul dintre $a i $b.
$a % $b modulo Restul mpririi lui $a la $b.

91
Tehnologii Internet
Operatori logici
Exemplu Nume Rezultat
$a and $b And TRUE dac $a i $b sunt TRUE.
$a or $b Or TRUE dac $a sau $b este TRUE.
$a xor $b Xor TRUE dac $a sau $b este TRUE, dar nu amndou.
! $a Not TRUE dac $a nu este TRUE.
$a && $b And TRUE dac att $a ct i $b sunt TRUE.
$a || $b Or TRUE dac $a sau $b este TRUE.

Exemplu Nume Rezultat


$a == $b Egalitate TRUE dac $a este egal cu $b.
$a === $b Identitate TRUE dac $a este egal cu $b, i sunt de acelai tip
$a != $b Diferit TRUE dac $a nu este egal cu $b.
$a <> $b Diferit TRUE dac $a nu este egal cu $b.
TRUE dac $a nu este egal cu $b, sau nu sunt de acelai tip.
$a !== $b Diferit
(introdus n PHP 4)
$a < $b Mai mic TRUE dac $a este mai mic dect $b.
$a > $b Mai mare TRUE este $a mai mare dect $b.
$a <= $b Mai mic sau egal TRUE dac $a este mai mic sau egal cu $b.
$a >= $b Mai mare sau egal TRUE dac $a este mai mare sau egal cu $b.

5.7.3. Structuri de control


Structurile de control disponibile n PHP sunt aproximativ aceleai ca i cele din
C++, i acestea sunt: if, else, elseif, while, do-while, for, foreach, break, continue,
switch, declare, return, require, include, require_once, include_once
n continuare se vor prezenta cte un exemplu de utilizare a acestora, fr prea
multe comentarii, deoarece ar trebui cunoscute de la programarea calculatoarelor.

5.7.3.1. Instruciunile If , If-Else i elseif


Exemplu 1: Sintaxa:
<?php
if ($a > $b) { if (expresie) {
echo "a este mai mare dect b"; declaraii }
$b = $a; // b devine egal cu a
}
?>

Exemplu 2:
<?php
if ($a >= $b) {
echo "a este mai mare dect b"; if (expresie)
} else { { declaraii }
echo "a nu este mai mare dect b"; else {
} declaraii }
?>

92
Cap 5: Limbaje de programare i Tehnologii Web
Exemplu 3:
<?php
if (expresie 1)
if ($a > $b) {
{ declaraii 1}
echo "a este mai mare dect b";
elseif(expresie 2)
} elseif ($a == $b) {
(declaraii 2)
echo "a este egal cu b";
else {
} else { declaraii 3 }
echo "a este mai mic dect b";
} ?>

5.7.3.2. Bucla WHILE


Cel mai simplu tip de bucl PHP este while. Asemenea instruciunii if, ea se
bazeaz pe o aciune. Diferena dintre if i while este aceea c instructiunea if, dac
gsete adevrat condiia, afieaz o singur dat bucata de cod din ea, ns n condiia
while, dac rezultatul este adevrat, bucata de cod din ea se va repeta atta timp ct
condiia este adevrat.
Script php Rezultat(afieaz numerele de la 1 la 5)
<?php 1
$numar = 1; 2
while($numar <= 5) 3
echo $numar.'<br>';
4
$numar++;
} 5
?>

5.7.3.3. Instruciunea SWITCH


Aceast instruciune funcioneaz asemntor cu cea if, ns permite condiiilor
s aib mai mult de 2 valori. ntr-o instruciune if, condiia poate fi adevrat sau fals,
ns ntr-o instruciune switch condiia poate lua orice numr de valori diferite.
Aceast instruciune trebuie s conin o instruciune case care s manevreze
fiecare valoare pe care o dorii.
Acelai lucru i cu if i cu switch, rezultatul: "i egal cu 2"
cu if cu switch
<?php <?php
$i = 2; switch ($i) {
if ($i == 0) { case 0:
echo "i egal cu 0"; echo "i egal cu 0"; break;
} elseif ($i == 1) { case 1:
echo "i egal cu 1"; echo "i egal cu 1"; break;
} elseif ($i == 2) { case 2:
echo "i egal cu 2"; echo "i egal cu 2"; break;
} }
?>; ?>;

5.7.3.4. Instruciunea for


Sintaxa este foarte asemanatoare cu cea din limbajele C/C++ si Java si anume:
for(expresie1; conditie; expresie2) {
//instruciune
}

for ($variabila = 1; $variabila <= 10; $variabila++) {


echo $variabila.'<br>';
}

93
Tehnologii Internet
Prima expresie este evaluat o singur dat, nainte de nceperea execuiei
ciclului. Expresia condiie este testatp naintea fiecrei repetri a buclei. Dac expresia
returneaz fals, repetarea se oprete.
Expresia 2 este executat la sfritul fiecrei repetri.
Instruciunea se execut la fiecare repetare a buclei.
Oricare dintre cele trei expresii poate lipsi; n cazul n care o expresie lipsete, se
consider c ea are valoarea true.
Bucla WHILE i FOR sunt identice din punct de vedere funcional ns bucla
FOR este puin mai complex.
<?php
for ($variabila = 1; $variabila <= 10; $variabila++) {
echo $variabila.'<br>';
}
?>

5.7.3.5. Structura FOREACH


Aceast structur poate fi folosit pentru a realiza o repetare printre toate
elementele unui vector. Aadar, ea nu poate fi folosit dect mpreun cu vectorii;
utilizarea sa asupra unei variabile de alt tip duce la apariia de erori.
Exist dou sintaxe acceptate pentru aceasta structur i anume:
foreach(expresie_vectoriala as $valoare) {
//instructiune
}
foreach(expresie_vectoriala as $cheie => $valoare) {
//instructiune
}
Dac se utilizeaz prima variant, atunci la fiecare iteraie valoarea elementului
curent este atribuit variabilei $valoare, i apoi se trece la elementul urmtor (a crui
valoare va fi atribuit variabilei la urmtoarea iteraie).
Execuia ciclului se ncheie n momentul n care nu mai exist alte elemente n
vector. Singura diferena care apare n cazul utilizrii celei de-a doua variante este faptul
c la fiecare iteraie valoarea cheii elementului curent este atribuita variabilei $cheie.
n continuare este un exemplu de folosire a celor dou sintaxe ale structurii
foreach.

Cod php rezultat


<?php Valoare: unu
$sir = array("unu", "doi", "trei", "patru", "cinci"); Valoare: doi
foreach($sir as $valoare) { Valoare: trei
echo "Valoare: ".$valoare." <br>\n";
Valoare: patru
}
?> Valoare: cinci

Cod php rezultat


<?php Cheie: 0 Valoare: unu
$sir = array("unu", "doi", "trei", "patru", Cheie: 1 Valoare: doi
"cinci"); Cheie: 2 Valoare: trei
foreach($sir as $cheie => $valoare) {
Cheie: 3 Valoare: patru
echo "Cheie: ".$cheie." Valoare: ".$valoare."
<br>\n"; Cheie: 4 Valoare: cinci
}
?>
94
Cap 5: Limbaje de programare i Tehnologii Web
5.7.3.6. Instruciunea BREAK
Aceast instruciune poate fi folosit pentru a ntrerupe forat execuia unui ciclu
sau a secvenei de instruciuni corespunztoare unei structuri switch.
Instruciunea poate fi urmat de un argument care indic numarul de structuri
imbricate a cror executie se ncheie. Valoarea implicit este 1, deci se ntrerupe
execuia unei singure structuri. Urmtoarea secvena de cod PHP realizeaz parcurgerea
elementelor unui vector de numere ntregi, pn n momentul n care se ntlnete un
numr negativ.
foreach ($a as $v)
if($v < 0)
break;
Mai departe, avem cazul n care este ntrerupt execuia mai multor cicluri; vom
considera c parcurgem elementele unei matrice ptratice cu n elemente i n coloane
pn n momentul n care ntalnim o valoare nul.
for($i = 0; $i < $n; $i++)
for($j = 0; $j < $n; $j++)
if(!$a[$i][$j])
break 2;
Instruciunea break poate fi utilizat pentru ntreruperea execuiei secvenelor de
instruciuni corespunztoare structurilor for, foreach, while, do - while i switch.

5.7.3.7. Instruciunea CONTINUE


Aceast instruciune este folosit pentru a ntrerupe execuia secvenei de
instruciuni din interiorul unui ciclu i trecerea la urmtoarea iteraie.
n cazul instruciunii for, nainte de urmtoarea iteraie se evalueaz (execut)
expresia de incrementare (expresia #3 din sintaxa general). La fel ca i n cazul
instruciunii break, poate aprea un argument care indic numrul structurilor imbricate
asupra crora are efect.
Exemplul urmtor realizeaz afiarea elementelor unui ir de numere ntregi care
sunt mai mari dect 1000.
foreach($a as $v) {
if($v <= 1000)
continue;
echo $v;
}
Urmtorul exemplu ilustreaz efectul folosirii argumentelor pentru instruciunea
continue.
<?php
$i = 0;
while($i++ < 5) {
echo "Ciclul #1 <br>\n";
while(1) {
echo "&nbsp;&nbsp;Ciclul #2 <br>\n";
while (1) {
echo "&nbsp;&nbsp;Ciclul #3<br>\n";
continue 3;
}
echo "Acest mesaj nu va fi afisat niciodata.<br>\n";
}
echo "Nici acest mesaj nu va fi afisat niciodata.<br>\n";
}
?>
95
Tehnologii Internet
5.7.3.8. Alte structuri PHP
Exist mai multe alte structuri PHP care pot fi utilizate n anumite scopuri.
Vom aminti acum cteva dintre ele: Structurile include, require, include_once
i require_once pot fi utilizate pentru a "insera" anumite instruciuni care sunt pstrate
ntr-un alt fiier (document). Interpretorul PHP consider c secvena din fiierul inserat
se afla n fiierul din care s-a "comandat" inserarea n poziia n care apare structura de
inserare.
O alt structura este declare care permite crearea unor directive n execuie.
Funciile PHP trebuie s utilizeze instruciunea return pentru a furniza un rezultat.

5.7.4. Lucrul cu formularele


PHP nu creeaz formulare, el doar prelucreaz datele introduse n formularele
create n limbaj HTML, i prezentate ntr-un subcapitol anterior.
Un formular este delimitat de elementul FORM care conine alte cteva
elemente numite controale, care au o varietate de metode de a aduna informaii.
Fiecare element din formular are un nume ct i o valoare, astfel nct datele transferate
pentru procesare s fie sub forma unor perechi nume/valoare.

Exemplu de formular:
<html>
<head><title>Formular_1 </title></head>
<body> Formular cu un camp de editare<hr>
<form action="formular.php" method="post">
Nume: <input type="text" name="nume" value="" size=50 maxLength=15>
<br><br>
Prenume: <input type="text" name="prenume" value=""> <br><br>
Sex: Masculin <input type="radio" name="sex" value="M"> | Feminin
<input type="radio" name="sex" value="F"> <br><br>
Parola dorita: <input type="password" name="parola" value=""> <br><br>
<input type="submit" name="Trimite" value="Trimite">
<input type="reset" name="Reseteaza" value="Reseteaza">
</form>
</body>
</html>
Se pune codul ntr-un fiier formular.html, se salveaz i apoi se vizualizeaz
n navigatorul web accesnd http://localhost/formular.html

5.7.4.1. Prelucrarea datelor din formular


La definirea unui formular, n interiorul etichetei <form> apare elementul
action i method (care poate fi PST sau GET). n elementul action se pune calea ctre
scriptul PHP care va prelucra datele introduse n formular (n cazul nostru
formular.php), iar n method se pune metoda prin care se vor prelucra date la apsarea
butonului "Trimite".
POST - Aceast metod face ca datele trimise prin formular s nu fie vizibile
utilizatorului, s fie trimise n spatele paginii web.
GET - Prin aceast metod, datele trimise prin formular sunt vizibile n URL
(URL este adresa ce este afiat n browser)

96
Cap 5: Limbaje de programare i Tehnologii Web
Metoda POST:
Fiierul formular.php, care prelucreaz datele introduse n formular.html arat
astfel:

<?php
echo $_POST['nume'];
?>

Se salveaz, se lanseaz bowserul i se ncarc http://localhost/formular.html, se


completeaz csuele din formular Nume, i apoi se apas butonul Trimite.
Se observ n n pagina formular.php ne este afiat numele introdus n csua
Nume din pagina anterioar, i anume n formular.html.
Adugm n continuare variabilele $_POST corespunztoare formularului
nostru, i apoi testm din nou.
<?php
echo 'Nume: '.$_POST['nume'].' <br>
Prenume: '.$_POST['prenume'].' <br>
Sex: '.$_POST['sex'].' <br>
Parola: '.$_POST['parola'].' <br>';
?>
Metoda GET:

n acelai formular din pagina formular.html, se nlocuiete method=post, cu


method=get.
Apoi n pagina formular.php, n loc de variabilele $_POST, vom pune variabile
$_GET.
Se observ c rezultatul este acelai n pagina web, numai c informaiile
formularului sunt postate i n adresa din browser (url) sub forma:
http://localhost/formular.php?nume=orice&prenume=on&varsta=peste16&parola=altap
arola&Trimite=Trimite
De recomandat este utilizarea metodei POST, pentru c este mult mai sigur.

5.7.4.2. Verificarea datelor trimise prin formular


Verificarea coninutului trimis prin formular se face relativ foarte uor.
<?php
if(($_POST['nume'] == "") || (is_numeric($_POST['nume'])) ||
(strlen($_POST['nume']) < 3)) {
echo 'Campul nume nu a fost completat corect. <br>
<a href="formular.html">Apasa aici</a> pentru a te intoarce la
formular.';
} else {
echo 'Nume: '.$_POST['nume'].' <br>
Prenume: '.$_POST['prenume'].' <br>
Sex: '.$_POST['sex'].' <br>
Parola: '.$_POST['parola'].' <br>';
}
?>

Dup cum se vede, se folosete construcia IF i ELSE, iar n interiorul


instruciunii if avem condiiile (n exemplu doar pentru csua nume) i operatorii PHP
nvai la nceputul capitolului.
97
Tehnologii Internet
Condiia noastr if spune cam aa: dacp variabila cu numele post este goal, ori
dac este numeric, ori dac numrul de caractere este mai mic de 3, rezult bucla de
cod din instruciunea if.
Dac toate acestea sunt ndeplinite, atunci execut bucla de cod din instruciunea
else.
Se revine la varianta iniial a lui formular.html i formular.php (cu POST n loc
de GET) i apoi n pagina formular.php se introduce scriptul de mai sus pentru a testa
regulile pentru cmpul Nume.
Dac din condiiile din if nu rezult true, atunci va rezulta acest mesaj.

n condiia if, se poate continua irul de condiii de exemplu:


if( ($_POST['nume'] == "") || (is_numeric($_POST['nume'])) ||
(strlen($_POST['nume']) < 5) ||
($_POST['prenume'] == "") || ($_POST['parola'] == "")) etc etc
(is_numeric($_POST['nume'])) aceast parte ne spune dac valoarea
cmpului nume este numeric.
Se poate folosi i varianta n care dorim s tim dac nu este numeric, i
anume: (!is_numeric($_POST['nume'])) se observ c am adaugt un "!"
pentru a nega (ca n C++).

n acest moment tim cum s postm valorile dintr-un formular de pe o pagin


pe alta fr s le stocm undeva. Stocarea datelor din formular se face cu ajutorul
bazelor de date, de tip MySQL.

5.8. Introducere n MySQL


n figura de mai jos se prezint modul de funcionare a unei baze de date
MySQL cu un Server Web PHP (n cazul nostru Apache + PHP). Utilizatorul, prin
intermediul browserului Web acceseaz un fiier.php (face o cerere de pagin),
fiierul.php apelat de utilizator este prelucrat de serverul WEB, care trimite apoi
rezultatele ctre interpretorul html al browserului web. Baza de date MySQL este
conectat direct cu serverul Web, care o poate apela n funcie de codul scris n fiierul
php.

Genereaz
Schimb Server Web pagina
de date Apache Browser Web

Server
MySQL PHP Cerere de
pagin

fisier.php

Fig. 5.1: Funcionarea unei baze de date MySQL

98
Cap 5: Limbaje de programare i Tehnologii Web

Pentru a administra baza de date MySQL vom folosi aplicaia phpMyAdmin,


care poate fi descrcat de aici: http://www.phpmyadmin.net/home_page/index.php.
Aceasta este o colecie de scripturi php care ajut la gestionarea bazei de date prin
intermediul unei interfee Web. Arhiva descrcat de mai sus va fi dezarhivat n
directorul C:\Program Files\EasyPHP 2.0b1\www\phpMyAdmin. Pentru a lansa n
execuie aplicaia de administrare a bazei de date se deschide navigatorul web iar n url
se tasteaz: http://localhost/phpmyadmin/ aprnd fereastra de autentificare :

n mod implicit, parola pentru root este nesetat (vid), iar la apsarea butonului
Execut se ncarc pagina urmtoare:

99
Tehnologii Internet
Deoarece existena contului root fr parol de acces este periculoas pentru
integritatea bazei de date, va trebui s-i setm o parol de access. Vom face aceasta
apsnd pe legtura "Drepturi de acces" sau "Privileges" dac interfaa este n englez.
Se va ncrca pagina cu drepturi de acces asupra MySQL, i n dreptul lui root apsm
pe butonul ce indic modificarea:

Apoi dup ce s-a ncrcat urmtoarea pagin, gasii unde apare Schimbare
parola i bifai Parola, apoi tastai parola dorit de dumneavoastr i n prima, i n
a-II-a csu, dup care apsai pe butonul Executa. Dup setarea parolei de root, mai
apare un cont de utilizator "Oarecare", fr parole i cu privilegii reduse.

5.8.1. Crearea bazelor de date


La ncrcarea lui phpMyAdmin, n partea central se observ cmpul: "Creaz
baz de date nou":

Se introduce numele noii baze de date, de exemplu "BazaDate1" i se apas


butonul "Creaz".
Suntem anunai c baza de date a fost creat (cu comanda sql aferent:
CREATE DATABASE `BazaDate1`), i ni se spune c nu a fost gsit nici un tabel n
baza de date. Pentru a crea un bale se introduce un numele tabelei n cmpul "Nume" iar
n csua "Cmpuri" se introduce numrul de cmpuri cte va conine tabela:

dup apsarea butonului "Execut", se va deschide noul tabel :

OBS: numrul de cmpuri reprezint numrul de coloane al tabelei, respectiv


capul de tabel.
Cmpurile care apar pentru definirea elementelor tabelei sunt:
Cmp n care se introduce numele cmpului: ID, Nume, Prenume, Vrsta etc.
Este recomandat ca primul cmp s fie un ID, de tip INT iar la alegerea valorii
auto_incremet va reprezenta un numr unic pentru fiecare nregistrare din
tabel;
Tip se alege dintr-o list prestabilit, i reprezint tipul datei introduse n
cmpul respectiv, adic: numr, text, dat calendaristic, or,boolean etc.;
Lungime/Setare numrul maxim de caractere care pot fi introduse;
Gestionare;
Proprieti;
Null implicit cmpul este "not null" i ne spune c acest cmp nu poate fi gol
fr a introduce o valoare n el;

100
Cap 5: Limbaje de programare i Tehnologii Web
Setare de baz valoarea implicit pe care o are cmpul la introducerea unei
noi nregistrri (n exemplul nostru, la Sex, implicit este M, de la masculin);
Extra dac cmpul se auto-incrementeaz (cu rol de numrtor);
- Cheie primar stabilit cmpului ID;
- Index;
- Unic indicat de aplicat la un cmp de tip CNP cod numeric personal;
- Tot textul;
Comentarii -
Pentru exemplul nostru se vor completa cmpurile dup cum se vede n figura de
mai jos, i apoi se apas butonul "Salveaz".

Ni se arat comanda SQL de creare a tabelului, i se listeaz tabela creat:


Comanda SQL:
CREATE TABLE `bazadate1`.`tbl_Formular1` (
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Nume` VARCHAR( 25 ) NOT NULL ,
`Prenume` VARCHAR( 25 ) NOT NULL ,
`Vrsta` INT( 3 ) NOT NULL ,
`Sex` VARCHAR( 1 ) NOT NULL DEFAULT 'M'
) ENGINE = MYISAM

Pentru a aduga date n tabela proaspt creat, se apas butonul "inserare" din
meniul din topul paginii. Se completeaz cmpul "Valoare" cu datele pe care vrem s le
introducem n tabel.
OBS: Nu se va completa csua ID, deoarece ea este folosit pentru a aduga un
numr unic pentru fiecare intrare din baza de date acest numr este adugat pe SQL.

101
Tehnologii Internet
Comanda SQL:
INSERT INTO `bazadate1`.`tbl_Formular1` (
`ID` ,
`Nume` ,
`Prenume` ,
`Vrsta` ,
`Sex`
)
VALUES (
NULL , 'Popescu', 'Ion', '25', 'M'
);

Pentru a vizualiza
datele din tabel se apas
butonul "Navigare" din partea
de sus a paginii.

phpMyAdmin este un utilitar foarte lesne de neles, putndu-se face uor


adugri/tergeri de tabele, modificarea nregistrrilor din tabele, adugarea/eliminarea
de cmpuri noi n tabele, .a.m.d.

5.8.2. Utilizarea PHP pentru conectarea la MySQL


Cu ajutorul scripturilor PHP ne putem conecta la o baz de date MySQL, s
citim informaii din ea, s tergem/modificm sau s adugm noi informaii.
Pentru aceasta, vom crea n directorul serverului nostru Apache (www) un
director (folder) cu numele LECTII, n care vom crea un fiier config.php n care vom
scrie urmtorul cod:

<?php
// Informatii baza de date
$AdresaBazaDate = "localhost";
$UtilizatorBazaDate = "root";
$ParolaBazaDate = "parola";
$NumeBazaDate = "bazadate1";

$conexiune = mysql_connect($AdresaBazaDate, $UtilizatorBazaDate,


$ParolaBazaDate)
or die("Nu ma pot conecta la MySQL!");
mysql_select_db($NumeBazaDate,$conexiune)
or die("Nu gasesc baza de date!");
?>

Acesta este fiierul de configurare cu care vom realiza conexiunea automat la


baza de date. Variabilele utilizate n script au urmtoarea semnificaie:
$AdresaBazaDate = "localhost" - este definit cu valoarea localhost
deoarece aceasta este adresa serverului Apache+PHP+MySQL;
$UtilizatorBazaDate = "root" - root este utilizatorul cu toate drepturile de
acces asupra bazei de date administratorul acesteia;
$ParolaBazaDate = "parola" parola utilizatorului root, dat de noi la
crearea bazei de date;
$NumeBazaDate = "bazadate1" - numele bazei de date pe care o accesm.

102
Cap 5: Limbaje de programare i Tehnologii Web
5.8.2.1. Comanda SELECT
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ...
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name']
[FROM table_references
[WHERE where_definition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_definition]
[ORDER BY {col_name | expr | position}
[ASC | DESC] , ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[FOR UPDATE | LOCK IN SHARE MODE]]

SELECT este folosit pentru a extrage liniile selectate din una sau mai multe
tabele:
Fiecare select_expr indic coloana care trebuie extras;
Table_references indic tabelul sau tabelele din care vor fi extrase liniile;
where_definition sunt cuvinte cheie care indic ce condiie sau condiii trebuie
s le satisfac liniile pentru a fi selectate.
SELECT mai poate fi utilizat i pentru a extrage linii fr a se face referina la
vreun tabel, de exemplu:
Mysql> SELECT 1 + 1;
-> 2

Exemplu pentru baza noastr de date:


Se creeaz un fiier select.php n care scriem urmtorul script:
script php explicaii:
<?php Funcia require_once include (o singur dat) n
require_once('config.php'); pagina noastr select.php pagina config.php, adic
/*Selectare date din baza de datele din config.php vor fi transmise n pagina
date*/
select.php
$cerereSQL = 'SELECT * FROM Variabila $cerereSQL cu valoarea cererii SQL
`tbl_Formular1`'; pentru a extrage datele din tabela tbl_Formula1.
SELECT * = se interpreteaz astfel: selecteaz tot
din tbl_Formular1
$rezultat = Variabila rezultat cu valoarea funciei mysql_query,
mysql_query($cerereSQL); funcie care realizeaz deschiderea conexiunii
while($rand = Bucla while : atta timp ct exist nregistrri n
mysql_fetch_array($rezultat)){ tabela tbl_Formular1 afieaz (echo) elementele
echo $rand['Nume'].' variabilei $rand (care este de tip array vector)
'.$rand['Prenume'].'
'.$rand['Vrsta'].'ani
'.$rand['Sex'].'<br>';
}
?> Sfritul scriptului php

103
Tehnologii Internet

Dup salvarea fiierului, acesta va fi accesat din browser web la adresa


http://lcalhost/lectii/select.php, rezultatul afiat pe ecran fiind urmtorul:

Funcii folosite:
Sintaxa: mysql_query ( string query [, resource link_identifier] )
Explicaie: mysql_query() trimite o interogare unic (nu sunt premise ntrebri
multiple) ctre baza de date active care este asociat cu link_identifier.

Sintaxa: mysql_fetch_array ( resource result [, int result_type] )


Explicaie: ntoarce un ir (array) care corespunde rndului apelat i mut datele interne
nainte.
OBSERVAII:
n cerea SQL de selectare, "*" selecteaz tot din tabel, dar se pot selecta doar
cmpurile dorite, de ex, doar nume i prenume: $cerereSQL = 'SELECT
Nume,Prenume FROM tbl_Formular1';
echo se observ c se ncepe cu numele primei variabile afiate
($rand['Nume']), urmat de (.') un spaiu i apoi ('.) a doua variabil, .a.m.d.,
<br> - de la break se trece pe un rnd nou.

Selectarea condiionat (cu where)


Se modific doar urmtorul rnd:
$cerereSQL = 'SELECT * FROM `tbl_Formular1`';
care devine:
$cerereSQL = 'SELECT * FROM `tbl_Formular1` WHERE nume="Popescu";

Dup salvare i rencrcarea paginii n Browser, rezultatul va fi doar o linie cu


nregistrarea corespunztoare Nume = Popescu.

5.8.2.2. Comanda INSERT


Aceast comand se folosete pentru a aduga/introduce date n baza de date.
Sintaxa:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
sau:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
sau:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

104
Cap 5: Limbaje de programare i Tehnologii Web

Comanda INSERT insereaz noi linii ntr-un tabel existent. Cele dou forme
INSERT ... VALUES i INSERT ... SET ale instruciunii insereaz linii pe baza unor
valori explicit specificate. Forma INSERT ... SELECT insereaz liniile selectate din alt
tabel sau alte tabele; iar forma INSERT ... VALUES cu multiple valori listate este
suportat n versiunile MySQL 3.22.5 sau mai trzii. Sintaxa lui INSERT ... SET este
suportat de MySQL 3.22.10 sau mai trzii.
Elementele componente:
tbl_name este tabelul n care liniile vor fi inserate. Coloanele pentru care declaraiile
ofer valori pot fi specificate astfel:
Lista cu numele coloanelor sau clauza SET indic n mod explicit coloanele;
Dac nu se specific lista coloanelor pentru INSERT ... VALUES sau INSERT
... SELECT , valorile pentru fiecare coloan din tabel trebuie furnizate n lista
VALUES sau de SELECT. Dac nu se tie ordinea coloanelor din tabel, se poate
folosi DESCRIBE tbl_name pentru a le afla.

Exemplu pentru baza de date "bazadate1" cu tabelul "tbl_Formular1":


<?php
require_once('config.php');
$cerereSQL = "INSERT INTO `tbl_Formular1` (`nume` , `Prenume`,
`Vrsta`,`Sex`) VALUES ('Basesecu', 'Traian', '42','M')";
mysql_query($cerereSQL);
echo 'Am adaugat valorile in baza de date';
?>

OBS: Dac sintaxa este corect, dar numele tabelei este incorect, pe ecran va fi
afiat mesajul de succes, dar n baza de date nu va fi introdus nimic.
Atenie: Dac la definirea tabelului ai folosit diacritice, (de ex. la Vrsta) vor
trebui folosite i n scriptul php.

5.8.2.3. Comanda UPDATE


Se folosete pentru a modifica datele existente ntr-o baz de date. Sintaxa este:
Sintaxa pentru un singur tabel:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

Sintaxa pentru tabele multiple:


UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]

Declaraia UPDATE modific coloanele n liniile de tabele existente cu valori noi.


Clauza SET indic care coloan va fi modificat i valoarea pe care o va lua. Clauza
WHERE, dac apare, specific care linii vor fi modificate. Altfel, toate liniile sunt
modificate n ordinea n care sunt specificate. Clauza LIMIT plaseaz o limit al
numrului de linii care pot fi modificate.

105
Tehnologii Internet
Declaraia UPDATE suport urmtorii modificatori:
dac se folosete LOW_PRIORITY, execuia modificrii este ntrziat pn cnd
nici un alt client nu mai citete din tabel;
dac se folosete cuvntul cheie IGNORE, execuia declaraiei UPDATE nu va fi
oprit nici dac apar erori n timpul execuiei modificrii. Liniile pentru care
exist un conflict de cheie duplicat nu sunt updatate. Liniile ale cror coloane
(celule) sunt modificate la valori care provoac erori de conversie tip de date vor
fi modificate la cea mai apropiat valoare valid.

Exemplu pentru baza de date "bazadate1" cu tabelul "tbl_Formular1":

<?php
require_once('config.php');
$cerereSQL = "UPDATE `tbl_Formular1` SET nume='nume',
prenume='prenume' WHERE nume='Basesecu' ";
mysql_query($cerereSQL);
echo 'Am modificat valorile campurilor nume si prenume unde numele
este Basesecu in baza de date';
?>
Se va crea i salva un fiier update.php, n care
va fi scris sciptul de mai sus. Dac n tabel sunt mai
multe nregistrri pentru care Nume = Basesecu, vor fi
modificate toate nregistrrile:

5.8.2.4. Comanda DELETE


Aceast comand se folosete pentru a terge nregistrri din tabelele bazelor de
date existente.
Pentru baza de date "bazadate1" cu tabelul "tbl_Formular1", putem scriue
urmtorul exemplu:
<?php
require_once('config.php');
$cerereSQL = "DELETE FROM `tbl_formular1` WHERE nume='nume'";
mysql_query($cerereSQL);
echo 'Am sters coloana cu campul nume = nume din baza de date';
?>
Ca urmare, ultimele dou linii din tabel vor fi terse.
Sintaxa general pentru DELETE este:
Sintaxa pentru un singur tabel:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

Sintaxa pentru tabele multiple:


DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*] ...]
FROM table_references
[WHERE where_definition]
sau:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*] ...]

106
Cap 5: Limbaje de programare i Tehnologii Web
USING table_references
[WHERE where_definition]
DELETE deletes

Comanda DELETE sterge linii din tabelul tbl_name care satisfac condiiile impuse
de where_definition, i returneaz un numr de nregistrri terse.

Dac se execut o declaraie DELETE fr a preciza o clauz WHERE, atunci, toate


liniile din tabel vor fi terse. O metod mai rapid de a face acest lucru este utilizarea
comenzii TRUNCATE TABLE , mai ales atunci cnd nu se cunoate numrul liniilor ce
trebuiesc terse.

5.9. Asp, AspX(.NET)


ASP.NET este o tehnologie Microsoft pentru crearea de aplicaii web i servicii
web. ASP.NET este succesorul lui ASP(Active Server Pages) i beneficiaz de puterea
platformei de dezvoltare .NET, i de setul de instrumente oferite de mediul de
dezvoltarea al aplicaiei Visual Studio .NET.

5.10. JavaScript

Javascript este un limbaj de programare simplu, de tip script, pentru definirea


comportamentului elementelor dintr-o pagina Web. Nu este acelai lucru cu mult mai
complexul limbaj de programare Java.
Javascript poate specifica, n mod obinuit doar cteva rnduri , rspunsurile la
aciuni sau evenimente cum ar fi: deschiderea unei pagini, deplasarea mouse-ului ntr-un
anumit punct sau tergerea unui anumit cmp dintr-un formular.
Cea mai simpl aplicaie Javscript este aceea care determin apariia i derularea
unui mesaj:

<html>
<head><script
language="Javascript">
<!
alert (" Apasati OK ! ")
-->
</script></head>
<body> O fereastra cu mesaj
!!! </body>
</html>

Scriptul este ncadrat de marcajele <script>...</script> i totul este nglobat


ntr-un comentariu astfel nct programele de navigare care nu interpreteaz Javascript
nu sunt derutate de scriptul n sine.

107
Tehnologii Internet
Cu Javascript pot fi gestionate o multitudine de evenimente cum ar fi cele
prezentate mai jos:
Tratearea
Eveniment Se desfasoara atunci cand
evenimentului
utilizatorul elimin controlul de intrare de pe un element al unui
blur onBlur
formular
utilizatorul execut un click pe un element al unui formular sau pe
click onClick
o legtur
utilizatorul modific valoarea unui text, zona de text sau element de
change onChange
selecie
focus utilizatorul atribuie unui element de formular control de intrare onFocus
load utilizatorul ncrca pagin n programul de navigare onLoad
utilizatorul deplaseaz indicatorul mouse-ului deasupra unei
mouseover onMouseover
legturi sau a unei ancore
utilizatorul selecteaz cmpul de intrare al unui element de
select onSelect
formular
submit utilizatorul transmite un formular onSubmit
unload utilizatorul abandoneaz pagina onUnload

n exemplul urmtor se folosete evenimentul click.


<form action="" method="get"> <input type="button" value="Apasa!"
onClick="alert('Hello!')"> </form>

Exemplu 1: se citete numele introdus i l salut:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Salutare(){
var name =
document.forms[0].elements[0].value;
alert("Salut "+name);}
-->
</SCRIPT>
</HEAD>
<BODY><br><br>
<p align=center>
<FORM NAME="form">
<b> Numele: <INPUT TYPE="text"
NAME="nume">
<INPUT TYPE="button"
VALUE="Scrie numele si apasa!"
onClick="Salutare()">
</FORM>
</BODY>
</HTML>

108
Cap 5: Limbaje de programare i Tehnologii Web
Exemplul 2: Se modific culoare de fond a paginii:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function galben(){
document.bgColor="#FFFF00";
}
function albastru(){
document.bgColor="#0000FF";
}
function initial(){
document.bgColor="#FFFFFF";
}
-->
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<P>
<FORM>
<INPUT TYPE="button" VALUE="Fond galben"
onClick="galben()">
<br><br> <INPUT TYPE="button" VALUE="Fond albastru"
onClick="albastru()">
<br><br> <INPUT TYPE="button" VALUE="Fond initial"
onClick="initial()">
</FORM>
</P>
</CENTER>
</BODY>
</HTML>

Exemplul 3: Calendar de baz


Descriere: Calendar simpatic pentru afiare pe pagina web. Scoate n eviden data i
ziua din sptmn. Cod bine documentat pentru a va ajuta s personalizai fontul,
culoarea sau mrimea pe care o dorii.
<!-- TWO STEPS TO INSTALL THIS SCRIPT -->
<!-- STEP ONE: Place the following script into a separate JavaScript
file called: calendar.js -->
<!-- Begin
// SET ARRAYS
var day_of_week = new
Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
var month_of_year = new
Array('January','February','March','April','May','June','July','August
','September','October','November','December');

// DECLARE AND INITIALIZE VARIABLES


var Calendar = new Date();
var year = Calendar.getYear(); // Returns year
var month = Calendar.getMonth(); // Returns month (0-11)
var today = Calendar.getDate(); // Returns day (1-31)
var weekday = Calendar.getDay(); // Returns day (1-31)
var DAYS_OF_WEEK = 7; // "constant" for number of days in a week
var DAYS_OF_MONTH = 31; // "constant" for number of days in a month

109
Tehnologii Internet
var cal; // Used for printing

Calendar.setDate(1); // Start the calendar day at '1'


Calendar.setMonth(month); // Start the calendar month at now

/* VARIABLES FOR FORMATTING


NOTE: You can format the 'BORDER', 'BGCOLOR', 'CELLPADDING',
'BORDERCOLOR' tags to customize your caledanr's look. */

var TR_start = '<TR>';


var TR_end = '</TR>';
var highlight_start = '<TD WIDTH="30"><TABLE CELLSPACING=0
BORDER=1 BGCOLOR=DEDEFF BORDERCOLOR=CCCCCC><TR><TD
WIDTH=20><B><CENTER>';
var highlight_end = '</CENTER></TD></TR></TABLE></B>';
var TD_start = '<TD WIDTH="30"><CENTER>';
var TD_end = '</CENTER></TD>';

/* BEGIN CODE FOR CALENDAR


NOTE: You can format the 'BORDER', 'BGCOLOR', 'CELLPADDING',
'BORDERCOLOR' tags to customize your calendar's look.*/

cal = '<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0


BORDERCOLOR=BBBBBB><TR><TD>';
cal += '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2>' +
TR_start;
cal += '<TD COLSPAN="' + DAYS_OF_WEEK + '"
BGCOLOR="#EFEFEF"><CENTER><B>';
cal += month_of_year[month] + ' ' + year + '</B>' + TD_end +
TR_end;
cal += TR_start;

// DO NOT EDIT BELOW THIS POINT //


// LOOPS FOR EACH DAY OF WEEK
for(index=0; index < DAYS_OF_WEEK; index++)
{
// BOLD TODAY'S DAY OF WEEK
if(weekday == index)
cal += TD_start + '<B>' + day_of_week[index] + '</B>' +
TD_end;
// PRINTS DAY
else
cal += TD_start + day_of_week[index] + TD_end;
}

cal += TD_end + TR_end;


cal += TR_start;

// FILL IN BLANK GAPS UNTIL TODAY'S DAY


for(index=0; index < Calendar.getDay(); index++)
cal += TD_start + ' ' + TD_end;

// LOOPS FOR EACH DAY IN CALENDAR


for(index=0; index < DAYS_OF_MONTH; index++)
{
if( Calendar.getDate() > index )
{
// RETURNS THE NEXT DAY TO PRINT
week_day =Calendar.getDay();
110
Cap 5: Limbaje de programare i Tehnologii Web

// START NEW ROW FOR FIRST DAY OF WEEK


if(week_day == 0)
cal += TR_start;

if(week_day != DAYS_OF_WEEK)
{
// SET VARIABLE INSIDE LOOP FOR INCREMENTING PURPOSES
var day = Calendar.getDate();
// HIGHLIGHT TODAY'S DATE
if( today==Calendar.getDate() )
cal += highlight_start + day + highlight_end + TD_end;

// PRINTS DAY
else
cal += TD_start + day + TD_end;
}

// END ROW FOR LAST DAY OF WEEK


if(week_day == DAYS_OF_WEEK)
cal += TR_end;
}

// INCREMENTS UNTIL END OF THE MONTH


Calendar.setDate(Calendar.getDate()+1);

}// end for loop

cal += '</TD></TR></TABLE></TABLE>';

// PRINT CALENDAR
document.write(cal);

// End -->

<!-- STEP TWO: Place this into the BODY of the HTML document where
you want the calendar -->
<!-- Make sure the '.js' and '.html' files are in the same directory.
-->

<BODY>

<SCRIPT SRC="calendar.js"></SCRIPT>

Exemplul 4: Ceas de baz


Descriere: Acest ceas se updateaz permanent fr folosirea unei csue de text.
Se poziioneaz uor oriunde n site.
<!-- TWO STEPS TO INSTALL BASIC CLOCK:

1. Add the onLoad event handler into the BODY tag


2. Copy the coding into the BODY of your HTML document -->

<!-- STEP ONE: Insert the onLoad event handler into your BODY tag -->

<BODY onLoad="clock()">

<!-- STEP TWO: Paste this code into the BODY of your HTML
document -->

111
Tehnologii Internet

<!-- Adjust the placement of the clock in the line below -->
<span id="pendule"
style="position:absolute;left:300;top:20;"></span>

<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function clock() {
if (!document.layers && !document.all) return;
var digital = new Date();
var hours = digital.getHours();
var minutes = digital.getMinutes();
var seconds = digital.getSeconds();
var amOrPm = "AM";
if (hours > 11) amOrPm = "PM";
if (hours > 12) hours = hours - 12;
if (hours == 0) hours = 12;
if (minutes <= 9) minutes = "0" + minutes;
if (seconds <= 9) seconds = "0" + seconds;
dispTime = hours + ":" + minutes + ":" + seconds + " " + amOrPm;
if (document.layers) {
document.layers.pendule.document.write(dispTime);
document.layers.pendule.document.close();
}
else
if (document.all)
pendule.innerHTML = dispTime;
setTimeout("clock()", 1000);
}
// End -->
</script>
<!-- Script Size: 1.42 KB -->

5.11. Ajax tehnologia Ajax,


Ajax (sau AJAX), prescurtare pentru Asynchronous JavaScript and XML, este o
tehnic de programare pentru crearea de aplicaii web interactive. Intenia este s fac
paginile web s par mai receptive, prin schimbul unor cantiti mici de date cu serverul
n fundal, astfel nct s nu fie nevoie ca pagina s fie rencrcat la fiecare aciune a
utilizatorului. Aceasta are ca scop creterea interactivitii, vitezei i uurinei n
utilizare a aplicaiilor web.

Ajax nu este o tehnologie n sine. Termenul este folosit pentru definirea


aplicaiilor web ce folosesc un ansamblu de tehnologii:
HTML sau XHTML pentru structura semantic a informaiilor;
CSS pentru prezentarea informaiilor;
Javascript pentru interactivitate, pentru procesarea informaiilor prezentate;
Obiectul XMLHttpRequest pentru schimbul i manipularea informaiilor ntr-o
manier asincron cu server-ul web;
XML este folosit de obicei pentru transferarea datelor ntre server i client, dei
orice format funcioneaz, inclusiv HTML preformatat, text simplu etc.

112
6. Crearea paginilor web cu Dreamweaver
6.1. Generaliti
O aplicaie specializat pentru realizarea de pagini web ofer posibilitatea
realizrii rapide a unor pagini complexe. Dintre editoarele existente se detaeaz prin
profesionalismul cu care a fost realizat Dreamweaver produs de Adobe.
Dreamweaver permite crearea de pagini sau aplicaii pentru web coninnd toate
elementele prezentate. n Dreamweaver se pot crea uor stiluri sau fiiere .css
(Cascading Style Sheets), se poate vizualiza i testa pagina creat.
n Dreamweaver se poate crea un sit sau se poate edita un document singular.
La pornirea aplicaiei, aceasta afieaz coninutul unui fiier HTML minimal. n
partea dreapt a ferestrei sunt afiate un ansamblu de panouri care pot fi ascunse
folosind tasta F4.

Fig. 6.1: Interfaa aplicaiei Dreamweaver

Fiierul afiat poate fi imediat editat i salvat.


Crearea unei noi pagini se realizeaz selectnd opiunea File / New, dup care se
va selecta n fereastra afiat Basic page.
Mai eficient este realizarea unei pagini pornind de la un ablon predefinit
(template). Pentru aceasta, n fereastra New Document se va alege Page Designs i din
lista afiat se va selecta aspectul dorit. Utilizarea acestei opiuni presupune ns
definirea n prealabil a unui sit, urmnd paii prezentai n continuare.

113
Tehnologii Internet

Fig. 6.2: Fereastra pentru alegerea tipului documentului

6.2. Crearea unui sit web


Realizarea unui sit web presupune plasarea unui numr de pagini ntr-o structur
de directoare creat pe discul unui calculator conectat la Internet i pe care ruleaz o
aplicaie de tip server pentru web (cel mai frecvent Apache sau IIS). n faza de
dezvoltare i testare dar i ulterior, pentru ntreinere, este bine s existe pe calculatorul
autorului o replic a sitului. Pentru crearea unui nou sit se va selecta opiunea Site / New
Site, dup care se stabilesc caracteristicile de baz ale acestuia specificnd opiunile ca
n figur.

Fig. 6.3: Fereastra pentru alegerea denumirii sitului

114
Cap 6: Crearea paginilor web cu Dreamweaver

Fig. 6.4: Fereastra pentru alegerea modului de lucru

Fig. 6.5: Fereastra pentru alegerea directorului local n care va fi salvat situl

115
Tehnologii Internet

Fig. 6.6: Fereastra pentru alegerea tipului conexiunii

Se observ c situl poart numele Site 1. Directorul n care se vor pstra fiierele
sitului poart de regul acelai nume.

6.3. Crearea paginilor web


Crearea paginilor web n Dreamweaver poate fi realizat codificnd coninutul
acesteia n HTML ca n cazul editoarelor obinuite sau redactnd documentul ntr-o
fereastr grafic, n acest caz codificarea realiznd-o aplicaia.
n timpul editrii, aplicaia poate afia documentul n trei moduri:
Code View, corespunznd ansamblului de marcaje HTML folosite la
codificare,
Design View, aspectul fiind cel afiat de un browser i
Code and Design View, situaie n care aplicaia afieaz pagina n dou
panouri, unul coninnd codificarea nHTML i cellalt reprezentnd-o n
format grafic.
Trecerea de la o reprezentare la alta se realizeaz folosind butoanele de pe bara
cu instrumente Document.

Code View / Code and Design Views / Design View

Fig. 6.7: Bara cu instrumente Document

116
Cap 6: Crearea paginilor web cu Dreamweaver
Codificarea paginii se realizeaz folosind instrumentele de pe bara cu
instrumente Insert. Ea permite accesarea diferitelor categorii de marcaje HTML i a
marcajelor din fiecare categorie. Pentru fiecare marcaj inserat, dup selectarea acestuia,
aplicaia afieaz o fereastr n care sunt cerute n mod explicit valorile atributelor
specifice.

Fig. 6.8: Bara cu instrumente Insert

Pentru a primi ajutor n legtur cu un anumit marcaj, se poate apela Shift+F1


Reference n panoul Results.

Fig. 6.9: Panoul Results pentru documentaie

Pentru accelerarea scrierii coninutului paginilor, aplicaia pune la dispoziia


utilizatorului un ansamblu de secvene de cod. Categoriile i secvenele de cod din
fiecare categorie sunt accesibile selectnd Snippets n panoul Files.

Fig. 6.10: Fereastra pentru alegerea secvenelor de cod predefinite

117
Tehnologii Internet
Verificarea modului n care va arta pagina ntr-o aplicaie de navigare se face
alegnd opiunea File -> Preview in Browser (sau apsnd tasta F12). Implicit este
selectat Internet Explorer, dar exist posibilitatea alegerii unui alt browser, selectnd
succesivFile -> Preview in Browser -> Edit Browser List.

Fig. 6.11: Alegerea browserului

6.4. Crearea i utilizarea stilurilor


Stilurile i foile de stiluri (fiierele avnd extensia .css, Cascading Style Sheets
CSS ) permit redefinirea unor caracteristici implicite ale marcajelor.

6.4.1. Realizarea unei foi de stiluri


O foaie de stiluri conine un ansamblu de definiii de stiluri aplicabile diferitelor
marcaje din paginile web. Definirea unei foi de stiluri ncepe cu selectarea opiunii CSS
Styles din panoul CSS, dup care se acioneaz butonul (New CSS Rule).

Fig. 6.14: Fereastra pentru adugarea unui stil


118
Cap 6: Crearea paginilor web cu Dreamweaver
n continuare se definesc caracteristicile marcajelor care vor fi afectate de noul
stil.

Fig. 6.15: Redefinirea marcajelor afectate de noul stil

Dup apsarea butonului OK se va afia o fereastr n care se pot impune toate


proprietile care pot face obiectul unei definiii de stil, pentru marcajul selectat.

Fig. 6.16: Fereastra pentru impunerea proprietilor

Astfel definit, stilul va fi aplicat numai documentului curent.


Pentru a putea aplica un stil mai multor documente, este necesar crearea unui
fiier .css care va conine definiiile create. Pentru aceasta se poate selecta n fereastra
New CSS Style opiunea Define In,

119
Tehnologii Internet
dup care se va introduce ntr-o nou fereastr numele fiierului care va pstra
definiiile, sau se va selecta opiunea File -> Export -> CSS Styles , dup care se
precizeaz n fereastra care se afieaz
numele fiierului .css. De regul fiierele .css sunt pstrate tot n directorul care conine
paginile sitului.
Ataarea unui fiier .css la pagina curent se realizeaz prin apsarea butonului
.

Fig. 6.17: Fereastra pentru realizarea legturii ntre fiierul html i fiierul .css creat

Fiierul de stiluri selectat va fi legat astfel de documentul nou, atributele stilului


fiind automat aplicate acestuia.

120
Laborator Tehnologii Internet Lucrarea nr.1

1 Instalarea i configurarea serverului Apache, PHP i MySQL


pe FreeBSD

1.1 Obiective
Instalarea i configurarea serverului Apache;
Instalarea i configurarea PHP;
Instalarea i configurarea serverului MySQL i a aplicaiei PhpMyAdmin

Pentru a instala pachetele corespunztoare pe sistemul FreeBSD sunt necesare


ndeplinirea ctorva condiii:
logarea ca root;
verificarea conexiunii la Internet, pentru a putea descrca pachetele n timpul
instalrii.

1.2 Instalarea si configurarea MySQL

MySQL este un sistem de gestiune a bazelor de date relaional, produs de


compania suedez MySQL AB i distribuit sub Licena Public General GNU. Este cel
mai popular SGBD open-source la ora actual, fiind o component cheie a stivei LAMP
(Linux, Apache, MySQL, PHP).
Dei este folosit foarte des mpreun cu limbajul de programare PHP, cu
MySQL se pot construi aplicaii n orice limbaj major. Exist multe scheme API
disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de
programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland
Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip
spefic API. O interfa de tip ODBC denumit MyODBC permite altor limbaje de
programare ce folosesc aceast interfa, s interacioneze cu bazele de date MySQL
cum ar fi ASP sau Visual Basic. n sprijinul acestor limbaje de programare, unele
companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin
intermediul crora respetivele limbaje s poat folosi acest SGBD mult mai uor dect
prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu
MyVBQL) sau comerciale.
Licena GNU GPL nu permite ncorporarea MySQL n softuri comerciale; cei
care doresc s fac acest lucru pot achiziiona, contra cost, o licen comercial de la
compania productoare, MySQL AB.
MySQL este component integrat a platformelor LAMP sau WAMP
(Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicaie web
este strns legat de cea a PHP-ului care este adesea combinat cu MySQL i denumit
Duo-ul Dinamic. n multe cri de specialitate este precizat faptul ca MySQL este mult
mai uor de nvat i folosit dect multe din aplicaiile de gestiune a bazelor de date, ca
exemplu comanda de ieire fiind una simpl i evident: exit sau quit.
Pentru a administra bazele de date MySQL se poate folosi modul linie de
comand sau, prin descrcare de pe internet, o interfa grafic: MySQL Administrator

121
Laborator Tehnologii Internet Lucrarea nr.1
i MySQL Query Browser. Un alt instrument de management al acestor baze de date
este aplicaia gratuit, scris n PHP, phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX,
FreeBSD, GNU/Linux, MacOS X, NetBSD, Solaris, SunOS, Windows
9x/NT/2000/XP/Vista.

1.2.1 Instalarea MySQL Server 5 din colecia de porturi FreeBSD

1. Login n sistemul FreeBSD ca root, sau su - root pentru a intra n mediul super-
user
2. Introduce-i urmtoarele comenzi n modul CLI (command line interface) al
FreeBSD (Ateptai pn cnd fiecare comand i termin execuia nainte de a
tasta comanda urmtoare):
cd /usr/ports/databases/mysql50-server
make install clean
mysql_install_db
chown -R mysql /var/db/mysql/
chgrp -R mysql /var/db/mysql/
/usr/local/bin/mysqld_safe -user=mysql &

Not: Dac primii rspunsul "Command not found error", folosii


comanda rehash pentru a mprospta variabilele sistemului de operare.

3. Instalarea porturilor va pune un fiier script mysql-server.sh n locaia


/usr/local/etc/rc.d care are capabilitatea de a porni serverul MySQL. Pentru a
determina serverul MySQL s porneasc automat la fiecare bootare a FreeBSD
trebuie adugat, n fiierul /etc/ rc.conf urmtoarea linie de script:
mysql_enable=YES

4. n mod implicit, superutilizatorul MySQL este root, care nu are setat nici o
parol (parol blank). Aadar este important atribuirea unei parole contului de
administrator, lucru care se face cu urmtoarele comenzi:
mysqladmin -u root password newpassword
nlocuii newpassword cu parola dorit (parola) este
obligatorie

5. Opional, se poate copia fie my-huge.cnf, my-large.cnf, my-medim.cnf, my-


small.cnf sau my-innodb-heavy-4G.cnf (n funcie de modul de utilizare al
serverului MySQL) ca my.cnf n directorul /var/db/mysql, care va permite
modificarea configurrilor serverului prin editarea acestui fiier.

6. Instalarea lui MySQL 5.0 a luat sfrit.

7. Chiar dac nu este neaprat nevoie, pentru o mai mare siguran, dai restart
(reboot).

122
Laborator Tehnologii Internet Lucrarea nr.1
1.2.2 Instalarea phpMyAdmin (nu merge fr PHP)
n modul linie de comand, logat ca root, se dau urmtoarele comenzi. Se
ateapt terminarea execuiei comenzii curente, pentru a o da pe urmtoarea.
cd /usr/ports/databases/phpmyadmin
make
make install
ln -s /usr/local/www/phpMyAdmin
/usr/local/www/apache22/data/phpMyAdmin (creaz un link n directorul
data al localhost-ului)
cd /usr/local/www/data/phpMyAdmin
cp config.sample.inc.php config.inc.php

Se editeaz fiierul config.inc.php, urmtoarele linii astfel:


$cfg['blowfish_secret'] = 'parola'
...
$cfg['Servers'][$i]['auth_type'] = 'cookie'; //Authentication method
(config, http or cookie based)?

$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'parola';
...
$cfg['ShowChgPassword'] = FALSE; // simple users or not

1.3 Instalarea i configurarea Apache22


Un server HTTP este un daemon care accept conexiuni conforme protocolului
HTTP, rspunznd cererilor recepionate de la clieni. Protocolul HTTP (HyperText
Transfer Protocol) este un protocol de tip cerere-rspuns, bazat pe TCP/IP, destinat
transferurilor informaiilor multimedia. Serverul cel mai utilizat pe sistemele de operare
UNIX este Apache.
Versiunea 2.2 are implementat un nou modul API de autentificare care permite o
flexibilitate mai mare. De asemenea i module pentru cache si proxy.

1. Instalarea Apache HTTP Server 2.20 folosind colecia de porturi FreeBSD:


cd /usr/ports/www/apache22
make install clean

2. scriptul pentru serverul Apache http, script apache22.sh este localizat n


/usr/local/etc/rc.d pentru a oferi serviciu de pornire i oprire a serverului Apache
HTTP. Pentru a activa serverul web Apache a porneasc automat la bootarea
sistemului, se adaug urmtoarea linie de comand n /etc/ rc.conf :
apache22_enable =YES

3. Pentru a porni serverul web Apache HTTP imediat, se folosete una din
comenzile:
/usr/local/sbin/apachectl start
sau
/usr/local/etc/rc.d/apache22.sh start

4. Instalarea a luat sfrit, se recomandat restartarea sistemului.

123
Laborator Tehnologii Internet Lucrarea nr.1

1.4 Instalarea i configurarea PHP


PHP este un limbaj de programare destinat n primul rnd Internetului, aducnd
dinamic unei pagini de web. Este unul din cele mai importante limbaje de programare
web open-source i server-side. Numele PHP provine din limba englez i este un
acronim recursiv : Php: Hypertext Preprocessor. Folosirea PHP poate fi vzut ca o
alternativ gratuit la utilizarea unor limbaje comerciale cum sunt ASP de la Microsoft,
ColdFusion de la Macromedia, sau chiar JSP de la Sun Microsystems.
Popularitatea de care se bucur acest limbaj de programare se datoreaz urmtoarelor
caracteristici :
Familiaritatea : sintaxa limbajului este foarte uoar combinnd sintaxele unora
din cele mai populare limbaje Perl sau C;
Simplitatea : sintaxa limbajului este destul de liber. Nu este nevoie de
includere de biblioteci sau de directive de compilare, codul PHP inclus ntr-un
document executndu-se ntre marcajele speciale;
Eficiena : PHP-ul se folosete de mecanisme de alocare a resurselor, foarte
necesare unui mediu multiuser, aa cum este Web-ul;
Securitatea : PHP-ul pune la dispoziia programatorului un set flexibil i
eficient de msuri de siguran;
Flexibilitatea : fiind aprut din necesitatea dezvoltrii Web-ului, PHP a fost
modularizat pentru a ine pasul cu dezvoltarea diferitelor tehnologii. Nefiind
legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele
servere web existente: Apache, IIS, Zeus, server, etc.;
Gratuitatea : este probabil cea mai important caracteristic a PHP-ului.
Dezvoltarea PHP-ului sub licena open-source a determinat adaptarea rapid
PHP-ului la nevoile Web-ului, eficientizarea i securizarea codului.

Sub sistemul de operare FreeBSD s-a optat pentru instalarea pachetului PHP5
din colecia de porturi (/usr/ports/lang/php5).

1. instalarea se face cu ajutorul urmtoarelor comenzi n modul CLI al FreeBSD, se


ateapt pn la terminarea execuiei unei comenzi pentru a o scrie pe
urmtoarea:
cd /usr/ports/lang/php5
make install clean

2. Dac suntei ntrebai, selectai use Apache 2.x instead.

La execuia comenzii make install, este prezentat fereastra de configurare a


opiunilor de compilare pentru PHP.

124
Laborator Tehnologii Internet Lucrarea nr.1

Fig.1. Configurare PHP5 - faza de compilare


3. Instalarea PHP5 extensions i a modulelor ce permit suportul pentru Apache se
face cu comenzile:
cd /usr/ports/lang/php5-extensions
make config

4. La opiunile pentur php5-extension, selectai toate extensiile PHP i modulele


care le-ai putea folosi cu serverul Apache i cu bazele de date MySQL.

5. Se continu instalarea lui php5-extensions cu urmtoarele comenzi:


make install clean

6. Dac apare vre-un mesaj prin care vi se cere s selectai unele opiuni de
configurare, le putei accepta pe cele implicite prin apsarea tastei Enter. Unele
module v pot ntreba pentru aciuni care includ php5-gd, php5-mbstring i
php5-sqlite.

7. Editai fiierul de configurare Apache pentru a permite serverului Apache s


ncarce module PHP cnd sunt iniializate:
1. cutai fiierul de configurare Apache n /usr/local/etc/apache2/
2. Deschidei fiierul de configurare httpd.conf
3. Cutai dup liniile LoadModule lines, iar dup ultima linie
LoadModule, dar n aceeai seciune adugai urmtoarele dou linii:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

8. Opional, copiai fiierul /usr/local/etc/php.ini-recommended sau


/usr/local/etc/php.ini-dist n /usr/local/etc/php.ini (n acelai director), ceea ce
v va permite s schimbai setrile implicite ale PHP.

9. Pornii serverul Apache HTTP folosind comanda apachectl start (sau restatai
Apache HTTP web server prin utilizarea comenzii apachectl restart). apachectl
125
Laborator Tehnologii Internet Lucrarea nr.1
este plasat n /usr/local/sbin, dac v apare mesajul Command not found
problem, ncercai s schimbai directorul ctre acea locaie, sau restartai
sistemul.

10. Instalarea PHP5 a luat sfrit.

Astfel, un server web a fost setat pe sistemul FreeBSD cu Apache, MySQL i


PHP. Directorul n care serverul web i va ine documentele (acolo unde trebuie plasate
fiierele HTML i PHP este /usr/local/www/apache22/data/ i avei nevoie de client
SecureFTP (SFTP) cum ar fi WinSCP pentru a upload-a fiierele n siguran pe
serverul web.

1.5 Verificarea instalrii Apache, PHP i MySQL , verificarea/modificarea


fiierelor de configurare

1.5.1 Verificarea serverului Web Apache


Pentru a testa funcionarea serverului web, se deschide navigatorul web i la
adres se tasteaz: localhost. Ar trebui s apar o pagin cu urmtorul mesaj: It Works!

Dac nu merge, verificai fiierul de configurare al serverului Apache, httpd.conf


aflat n /usr/local/etc/apache2/

Liniile de script cele mai importante sunt:


#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 127.0.0.1:80
Listen 192.168.1.4:80 #adresa IP a serverului local poate fi alta

LoadModule php5_module libexec/apache22/libphp5.so

User www
Group www
</IfModule>

ServerAdmin admin@localhost.com

ServerName www.localhost.com:80

DocumentRoot "/usr/local/www/apache22/data"
...
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
...
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

126
Laborator Tehnologii Internet Lucrarea nr.1
<Directory "/usr/local/www/phpMyAdmin/">
Options none
AllowOverride Limit

Order Deny,Allow
# Deny from all
Allow from all
</Directory>

1.5.2 Verificarea funcionrii PHP


n directorul rdcin al serverului Apache, care este
/usr/local/www/apache22/data/, se creeaz un fiier cu extensia .php, numit
phpinfo.php, i care conine urmtorul script:
<?php
phpinfo( );
?>
Se deschide un browser web, i la adres se tasteaz: localhost/phpinfo.php, iar
n fereastr ne vor aprea informaii despre PHP, i anume:

1.5.3 Verificarea funcionrii phpMyAdmin


Se deschide browserul de web i se tasteaz: localhost/phpmyadmin/, i ar
trebui s apar fereastra principal, care arat aa:

127
Laborator Tehnologii Internet Lucrarea nr.1

Dac nu funcioneaz, verificai fiierele de configurare, prezentate la procedura


de instalare phpmyadmin, mysql i apache.
Atenie: dac pentru baza de date MySQL nu se seteaz o parol de root,
aplicaia phpMyAdmin va da un mesaj de eroare. De asemenea, trebuie setate parole
pentru
$cfg['blowfish_secret'] = 'parola'
i pentru
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'parola';

1.6 Instalarea i configurarea unui server FTP


Drept server ftp, am optat pentru pachetul pure-ftpd (http://www.pureftpd.org/) ,
fiind o implementare stabil, conform cu standardele, bine securizat. Aceast
distribuie a fost aleas deoarece ofer un foarte bun suport pentru utilizatori virtuali,
avnd posibilitatea folosirii chiar i a bazelor de date (MySQL, PostgreSQL).
Pachetul se poate instala fie din colecia de porturi (/usr/ports/ftp/pure-ftpd) sau
cu ajutorul utilitarului pkg_add .

128
Laborator Tehnologii Internet Lucrarea nr.1

Instalare pure-ftpd cu pkg_add


n ambele cazuri, dup instalare, trebuie editat manual fiierul de configurare al
serviciului, activat s porneasc automat odat cu pornirea sistemului de operare i
lansat n execuie.
Fiierul de configurare, pure-ftpd.conf, trebuie amplasat n directorul
/usr/local/etc .
Important de menionat este faptul c serverul a fost configurat s nu permit
accesul anonim, utilizatorul fiind blocat n directorul su (chroot), evidena utilizatorilor
fiind pstrat n sistemul nativ de baze de date, puredb.
Pentru a se putea crea utilizatori virtuali, n sistemul de operare trebuie creat un
cont de utilizator, care s nu aib posibilitate de login i director home. Acest utilizator
real este necesar deoarece, dup autentificarea prin protocolul ftp, utilizatorul virtual va
fi impersonalizat (va primi identitatea) acestui utilizator real.
n liniile de mai jos este prezentat secvena de comenzi pentru crearea
utilizatorului de sistem i a unui utilizator virtual.
ns1# adduser
Username: ftp
Full name: FTP Virtual user
Uid (Leave empty for default):
Login group [ftp]:
Login group is ftp. Invite ftp into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/ftp]: /dev/null
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : ftp
Password : <disabled>
Full Name : FTP Virtual user
Uid : 1005
Class :
Groups : ftp
Home : /dev/null

129
Laborator Tehnologii Internet Lucrarea nr.1
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (ftp) to the user database.
Add another user? (yes/no): no
Goodbye!

ns1# pure-pw useradd admin -u ftp -g ftp -d /usr/local/ftp


Password:
Enter it again:
ns1# pure-pw mkdb
ns1# cd /usr/local/etc/rc.d/
ns1# ./pure-ftpd forcestart
Starting pureftpd.
Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -E -fftp -H
-I15 -lpuredb:/usr/local/etc/pureftpd.pdb -L2000:8 -m4 -s -U133:022 -
u100 -k99 Z
ns1# mkdir /usr/local/ftp
ns1# chown -R ftp:ftp /usr/local/ftp/

n liniile de mai sus se remarc necesitatea crerii unui director pentru


utilizatorul virtual, n cazul de fa /usr/local/ftp.

130
Laborator Tehnologii Internet Lucrarea nr.2

2 Instalarea i configurarea serverului Apache, PHP i MySQL


pe sistemul de operare Windows
2.1 Obiective
Instalarea i configurarea serverului Apache;
Instalarea i configurarea PHP;
Instalarea i configurarea serverului MySQL i a aplicaiei PhpMyAdmin;
Instalarea editorului PHPDesign 2005;
Testarea funcionrii aplicaiilor instalate.

Pe sistemul de operare Windows exist mai multe aplicaii folosite ca servere


Web, unul dintre ele fiind ncorporat chiar n sistemul de operare Windows (2000, 2003
i chiar XP), i anume Internet Information Service (ISS) care se poate aduga dup
instalarea sistemului de operare din Add or Remove Windows Components.
Pentru aceast lucrare de laborator s-a ales ns combinaia WAMP (Windows,
Apache, MySQL, PHP), care poate fi implementat fie instalnd fiecare component n
parte i modificndu-le ulterior fiierele de configurare, fie, soluia adoptat, utilizarea
unei aplicaii software care le nglobeaz pe toate trei. Aici putem alege ntre EasyPHP
i/sau XAMPP. Pentru lucrare am ales EasyPHP , care este un program Open Source, i
poate fi descrcat liber de pe internet de la adresa:
http://www.easyphp.org/telechargements.php3.

2.2 Instalarea i configurarea EasyPHP-2.0b1


Paii de instalare sunt:
1. Se d dublu click pe fiierul , i astfel se pornete
instalarea aplicaiilor;
2. se alege limba de instalare implicit Enlish - OK

3. Se d Next, se accept condiiile de licen, Next, Next , se alege locul de


instalare al aplicaiilor implicit este n C:\Program Files\EasyPHP 2.0b1, i
lsm aa, Next, pn la Finish.
Pachetul este instalat n C:\Program Files\EasyPHP 2.0b1\ iar directorul unde
sunt inute i de unde se acceseaz paginile i scripturile PHP este www.
Versiunile programelor aflate n EasyPHP sunt:
Apache Version Apache/2.2.3 (Win32)
PHP/5.2.0
MySQL

131
Laborator Tehnologii Internet Lucrarea nr.2
ATENIE: Dac fiierele HTML pot fi deschise cu un navigator Web oriunde
s-ar afla ele, scripturile PHP trebuie apelate scriind adresa
http://localhost.numefiier.php deoarece scriptul PHP este interpretat de serverul Web
(Apache) i rezultatul interpretrii este trimis bowserului, acesta netiind s interpreteze
PHP aa cum o face cu HTML. De asemenea, scripturile php trebuie amplasate n
directorul C:\Program Files\EasyPHP 2.0b1\www, mai sus menionat.

Pentru a putea accesa fiierele *.html din reea, n fiierul de configurare al


serverului Apache, aflat n C:\Program Files\EasyPHP 2.0b1\conf_files httpd.conf,
trebuie adugat liniei de comand listen adresa serverului, aa cum se vede mai jos:
#Listen 12.34.56.78:80
Listen 127.0.0.1:80
#Listen adresa IP a serverului, de exemplu:
Listen 192.168.1.2:80

Alte configurri ce ar mai trebui fcute sunt urmtoarele:


# ServerAdmin: Adresa de e-mail a administratorului serverului. Dac
#apar probleme n administrare, acestea vor fi trimise la aceast
# adres de e-mail. Aceast adres apare n unele pagini generate de
# server, cum ar fi documentele de eroare, ex: admin@nume_domeniu.com
#
ServerAdmin admin@localhost
#De exemplu, pentru domeniu universitii, ar fi: admin@ub.ro
#
# ServerName ofer un nume i un port cu care serverul se identific
# aceasta poate fi de obicei determinat automat, dar se recomand
specificarea lui pentru a preveni problemele de startup.
#
# Dac nu avei nregistrat un domeniu (nume DNS), introduce-i adresa
# IP a serverului
#
ServerName localhost
# exempleu : www.ub.ro domeniul Universitii din Bacu.
# localhost se identific cu adresa IP: 127.0.0.1

Verificarea instalrii corecte a serverului Apache: Se deschide browserul de


Internet i se tasteaz localhost. Dac instalarea este corect trebuie s fie afiate una
din urmtoarele:
1. dac avem un fiier index.html sau index.php sau index.htm va fi afiat acesta;
2. dac nu, de va afia coninutul folderului: C:\Program Files\EasyPHP
2.0b1\www, aa cum se vede n figura de mai jos.

132
Laborator Tehnologii Internet Lucrarea nr.2
2.3 Instalarea aplicaiei PhpMyAdmin
Pentru a administra baza de date MySQL vom folosi aplicaia phpMyAdmin,
care poate fi descrcat de aici: http://www.phpmyadmin.net/home_page/index.php.
Aceasta este o colecie de scripturi php care ajut la gestionarea bazei de date prin
intermediul unei interfee Web. Arhiva descrcat de mai sus va fi dezarhivat n
directorul C:\Program Files\EasyPHP 2.0b1\www\phpMyAdmin. Pentru a lansa n
execuie aplicaia de administrare a bazei de date se deschide navigatorul web iar n url
se tasteaz: http://localhost/phpmyadmin/ aprnd fereastra de autentificare :

n mod implicit, parola pentru root este nesetat (vid), iar la apsarea butonului
Execut se ncarc pagina urmtoare:

Deoarece existena contului root fr parol de acces este periculoas pentru


integritatea bazei de date, va trebui s-i setm o parol de acces. Vom face aceasta
apsnd pe legtura "Drepturi de acces" sau "Privileges" dac interfaa este n englez.
Se va ncrca pagina cu drepturi de acces asupra MySQL, i n dreptul lui root apsm
pe butonul ce indic modificarea:
133
Laborator Tehnologii Internet Lucrarea nr.2

Apoi dup ce s-a ncrcat urmtoarea pagin, gsii unde apare Schimbare
parola i bifai Parola, apoi tastai parola dorit de dumneavoastr i n prima, i n
a-II-a csu, dup care apsai pe butonul Executa. Dup setarea parolei de root, mai
apare un cont de utilizator "Oricare", fr parole i cu privilegii reduse.
OBS: n cadrul laboratorului, pentru aplicaiile instalate de studeni, parola de
root va fi parola.

2.4 PHP Designer 2005


Paginile web, fie ele html sau php se pot scrie n orice editor de text, de exemplu
notepad. Dar pentru scrierea uoar, rapid i fr erori a unor pagini mari exist diverse
aplicaii (editoare php, html). Dintre acestea amintesc doar PHPEdit i PHP Designer
2005. Dintre acestea l vom folosi pe ultimul, care este Free, cu toate c este mai puin
complex. Noua versiune PHPDesigner2007 nu mai este Free.
Instalarea se face simplu, ca orice aplicaie sun Windows, i nu ar trebui s fie o
problem pentru un student din anul III la Tehnologia informaiei.
Cu ajutorul acestui editor PHP vom crea prima pagin html i prima pagin php.

2.4.1 Prima pagin HTML


Se deschide aplicaia PHPDesign 2005, se alege un document nou te tip html i
se introduce scriptul de mai jos:

134
Laborator Tehnologii Internet Lucrarea nr.2
script html: Explicaii:
<html > - nceput document html
<head> - nceput antet,
<title>Document Nou</title> - titlul documentului
</head>
- sfrit antet document
<body>
Prima pagina web in HTML!! - nceputul corpului documentului (paginii web)
</body> - coninutul paginii
</html> - sfritul corpului documentului (paginii web)
- sfritul documentului html.

Se salveaz documentul creat cu numele index.html n directorul: C:\Program


Files\EasyPHP 2.0b1\www
Rezultat: n navigatoul web, la adres scriem urmtoarele: localhost i ar trebui
s vedem urmtoarea pagin:
Titlul documentului Adresa local

Corpul documentului

2.4.2 Prima pagin PHP

Se deschide un nou fiier n PHPDesign 2005, i de data aceasta se alege


opiunea php. n noua fereastr se introduce scriptul de mai jos:

Script php: Explicaii


<?php - nceput document php
phpinfo(); - funcia phpinfo, care ntoarce informaii despre serverul PHP
?> - sfrit document php

Rezultat:
Salvm fiierul sub numele info.php n directorul mai sus menionat, iar la
adresa browserului web introducem: localhost/info.php . n pagina web ar trebui s
apar informaii despre serverul PHP, Apache i MySQL instalate pe sistem.
Dac nu apare nimic, nseamn c serverul php nu este instalat corect sau fiierul
nu este salvat n directorul: C:\Program Files\EasyPHP 2.0b1\www

135
Laborator Tehnologii Internet Lucrarea nr.2

136
Laborator Tehnologii Internet Lucrarea nr.3

3 Primii pai n HTML


3.1 Obiective
Introducere n elementele de baz ale limbajului HTML;
Realizarea unor scripturi HTML, i modificarea acestora pentru a vedea
diferenele;

3.2 Introducere
Orice document HTML ncepe cu notaia <html> i se termin cu notaia
</html>. Aceste "chestii" se numesc n literatura de specialitate "TAG-uri".Prin
convenie, toate informaiile HTML ncep cu o parantez unghiular deschisa "<" i se
termin cu o parantez unghiular nchis ">".
Tag-urile dintre aceste paranteze transmit comenzi ctre browser pentru a afia
pagina ntr-un anumit mod. Unele blocuri prezint delimitator de sfrit de bloc, n timp
ce pentru alte blocuri acest delimitator este opional sau chiar interzis.
ntre cele dou marcaje <html> i </html> vom introduce dou seciuni:
seciunea de antet <head>...</head> i
corpul documentului <body>...</body>. Blocul <body>...</body> cuprinde
coninutul propriu-zis al paginii HTML, adic ceea ce va fi afiat n fereastra
browser-ului.

O etichet poate fi scris att cu litere mici, ct i cu litere mari.


Adic <HTML> = <HtmL> = <html>. Caracterele "spaiu" i "CR/LF" (Enter) ce apar
ntre etichete sunt ignorate de ctre browser.
Deci un prim document HTML ar fi ceva de genul asta:
<html>
<head> </head>
<body>
</body>
</html>
Aa arat primul document HTML. Copiai-l folosind Copy/Paste ntr-un fiier
nou i salvai-l ca test3.htm sau test3.html. Apoi pornii Mozilla Firefox sau Internet
Explorer, dai CTRL-O i introducei calea spre fiier. Dai OK i ... nimic. Normal,
ntre tagurile <body> nu este scris nimic.
S adugm primele elemente la pagina noastr. n primul rnd, titlul unei pagini
se obine insernd n seciunea <head>...</head> a urmtoarei linii:
<title>Aceasta este prima mea pagina de Web</title>

n plus, n seciunea <body>...</body> putem scrie texte ct dorim. Dac nu


ntlnim nici un marcaj < sau > atunci interpretorul HTML le va lua ca texte simple i le
va afia pe ecran. S vedem noua versiune a paginii noastre:
<html>
<head>
<title>Aceasta este prima mea pagina de Web</title>
</head>
<body>

137
Laborator Tehnologii Internet Lucrarea nr.3
Bine ati venit in pagina mea de Web!
</body>
</html>

Coninutul blocului <title>...</title> va aprea n bara de titlu a ferestrei


browser-ului. Dac acest bloc lipsete ntr-o pagin HTML, atunci n bara de titlu a
ferestrei browser-ului va aprea numele fiierului.
Dac introducem mai multe linii ntr-o pagin browser-ul va afia ntr-un singur
rnd, ntruct caracterele "Enter - CR/LF " sunt ignorate de browser. Trecerea pe o linie
nou se face la o comand explicit, care trebuie s apar n pagina html.
Aceast comanda este marcajul <br> ( de la " line break " - ntrerupere de linie ).
Folosind aceleai operaii ca mai sus, vizualizai noua pagina! Vei vedea textul
ce apare n fereastra navigatorului. n plus, pagina dvs. va avea un titlu nou, cel introdus
de dvs.
<html>
<head>
<title> titlul paginii</title>
</head>
<body>
Bine ati venit in <br> pagina mea de Web!
</body>
</html>

3.3 Elemente constructive

3.3.1 Blocuri preformatate


Pentru ca browser-ul s interpreteze corect caracterele "spaiu", "tab" i "CR/LF"
ce apar n cadrul unui text, acest text trebuie inclus ntr-un bloc <pre>...</pre>.
<html>
<head>
<title>bloc preformatat </title>
</head>
<body><pre>
Prima linie
A doua linie
A treia linie
</pre></body>
</html>

3.3.2 Culoarea de fond


O culoare poate fi precizat n dou moduri:
Printr-un nume de culoare. Sunt disponibile cel puin 16 nume de culori: aqua,
black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal,
white si yellow.
Prin construcia "#rrggbb" unde r (red), g (green), sau b (blue) sunt cifre
hexazecimale i pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D,
e, E, f, F; se pot defini astfel 65536 de culori.

Culoarea unei pagini se precizeaz prin intermediul unui atribut al etichetei


<body>.

138
Laborator Tehnologii Internet Lucrarea nr.3

Culoarea fondului paginii Web se stabilete cu atributul bgcolor al etichetei


<body>, de exemplu: <body bgcolor = culoare>.
Urmtorul exemplu realizeaz o pagin cu fondul de culoare gri.
<html>
<head>
<title>culoare de fond </title>
</head>
<body bgcolor=gray>
O pagina Web cu fondul GRI!
</body>
</html>

3.3.3 Culoarea textului


Acest lucru se face prin intermediul atributului text al etichetei <body> dup
sintaxa <body text=culoare>. n urmtorul exemplu textul are culoarea roie.
<html>
<head>
<title>culoare textului </title>
</head>
<body text=red>
Un text de culoare rosie.
</body>
</html>

O etichet poate avea mai multe atribute. De exemplu, o etichet cu trei atribute
arata astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 atribut3 =
valoare3>. Urmtorul exemplu prezint o pagin cu fondul de culoare albastr i textul
de culoare galben.
<html>
<head>
<title>atribute multiple </title>
</head>
<body bgcolor=blue text=yellow>
Fond de culoare albastra si text de culoare galbena.
</body>
</html>

Textul afiat este caracterizat de urmtoarele atribute: Mrime (size), Culoare


(color), Font (style). Acestea sunt atribute ale etichetei <basefont>. Este o etichet
singular (fr delimitator de sfrit de bloc).
<basefont size = numar color = culoare face = font>
unde:
numr - poate fi 1, 2, 3, 4, 5, 6 sau 7; (1 pentru fontul cel mai mic i 7 pentru
fontul cel mai mare);
culoare - este o culoare precizat prin nume sau printr-o construcie RGB;
font face: poate fi un font generic ca "serif", "san serif", "cursive",
"monospace", "fantasy" sau un font specific instalat pe calculatorului clientului,
ca "Times New Roman", "Helvetica" sau "Arial". Se accept ca valoare i o list
de fonturi separate prin virgul, de exemplu: "Times New Roman, serif,
monospace ".

139
Laborator Tehnologii Internet Lucrarea nr.3

Domeniul de valabilitate al caracteristicelor precizate de aceast etichet se


ntinde de la locul n care apare eticheta pn la sfritul paginii sau pn la urmtoarea
etichet <basefont>.
Dac acest atribut lipsete atunci textul din pagina Web are atribute prestabilite
sau atribute precizate de browserul utilizat.
Atributele prestabilite sunt: size = 3, color = black, i style = " Times New
Roman " .
Poziionarea coninutului paginii Web fa de marginile ferestrei browserului se
poate face cu ajutorul a dou atribute ale etichetei <body>:
leftmargin (stabilete distana dintre marginea stng a ferestrei browserului i
marginea stng a coninutului paginii);
topmargin (stabilete distana dintre marginea de sus a ferestrei browserului i
marginea de sus a coninutului paginii);
<html>
<head>
<title>Configurarea textului si stabilirea marginii </title>
</head>
<body leftmargin="100" topmargin="50">
Textul are atribute implicite. <br>
<basefont face="Arial" color="blue" size="6">
Textul este scris cu fontul "Arial", culoare albastru si marime 6.
</body>
</html>

3.3.4 Stiluri pentru blocurile de text


Pentru ca un bloc de text s apar n pagin evideniat (cu caractere aldine),
trebuie inclus ntre delimitatorii <b>...</b> (b vine de la "bold" = ndrzne).
Pentru ca un text s fie scris cu caractere mai mari cu o unitate dect cele curente
acesta trebuie inclus ntr-un bloc delimitat de etichetele <big>...</big>.
Pentru ca un text s fie scris cu caractere mai mici cu o unitate dect cele curente
acesta trebuie inclus ntr-un bloc delimitat de etichetele <small>...</small>.
Pentru ca un text s fie scris cu caractere cursive, acesta trebuie inclus ntr-un
bloc delimitat de etichetele <i>...</i> (i vine de la "italic").
Pentru a insera secvene de text aliniate ca indice (sub-script) sau ca exponent
(super-script), aceste fragmente trebuie delimitate de etichetele <sub>...</sub>,
respectiv <sup>...</sup>.
Pentru a insera un bloc de caractere subliniate se utilizeaz etichetele <u>...</u>
(u vine de la " underline ").
Pentru a insera un bloc de caractere tiate se utilizeaz etichetele
<strike>...</strike> sau <s>...</s>.
n exemplul urmtor vom utiliza toate etichetele menionate anterior.
<html>
<head>
<title>Stiluri pentru blocuri de text </title>
</head>
<body>
<b>Text scris cu caractere ingrosate.</b>
<br> <big>Text cu caractere marite cu o unitate <big>mai mare<big> si
mai mare<big> si mai mare.</big></big></big></big><br>
<small>Textul este scris cu caractere micsorate cu o unitate
<small>mai mic.</small></small><br>
140
Laborator Tehnologii Internet Lucrarea nr.3
<i>Text scris cu caractere italice.</i>
<br> In aceasta linie <sup>sus</sup> este superscript iar
<sub>jos</sub> este subscirpt.<br>
<strike>Aceasta linie este in intregime sectionata de o linie
orizontala.</strike> <br>
In aceasta linie urmatorul cuvant este <u>subliniat</u>, iar cuvantul
<s>strike</s> sectoinat.
</body>
</html>

3.3.5 Stiluri fizice i logice


Am prezentat deja 8 stiluri de scriere a caracterelor unui bloc de text, numite i
stiluri fizice ntruct nu s-a acordat nici o atenie semnificaiei informaiei coninute de
aceste blocuri.
n continuare sunt prezentate stilurile utilizate la formatarea unui bloc.
Aceste stiluri in cont de semnificaia pe care o are blocul n cadrul paginii Web.
Pentru a pune n eviden (prin silul cursiv) fragmente de text se utilizeaz
etichetele:
<cite>...</cite> ("cite" nseamn citat);
<em>...</em> (em vine de la "emphasize" = a evidenia).
n locul lor se poate utiliza eticheta echivalenta <i>...</i>.

Urmtoarele etichete au efecte similare. Ele permit scrierea fragmentului de text


cu caractere monospaiate (de tipul celor folosite de o main de scris):
<code>...</code> ("code" nseamn cod sau surs);
<kbd>...</kbd> (kbd vine de la " keyboard " = tastatur);
<tt>...</tt> (tt vine de la " teletype " = teleprinter).

Eticheta de tip bloc <blink>...</blink> delimiteaz fragmente de text clipitoare.


<html>
<head>
<title>Blocuri de caractere monospatiate si clipitoare </title>
</head>
<body>
Aceasta linie este formata din text normal.<br>
Codul functiei f(x,y) este: <code>Function f(x,y) {return
x+y;}</code><br>
Tastati urmatoarea comanda comanda DOS:
<kbd> copy c:\windows\* c:\temp<kbd><br>
<tt>Asa scrie un teleprinter</tt><br>
Acest cuvant clipeste <blink>Blink</blink>
</body>
</html>

Exemplul urmtor ilustreaz c etichetele pot fi imbricate.


un fragment de text poate fi scris cu aldine i cursive n acelai timp;
pentru un fragment de text se pot folosi simultan stilurile subliniat, exponent,
mrit i cursiv.
Blocul <q>...</q> permite inserarea in-line a citatelor. Aceste citate sunt afiate
de ctre browser cu caractere cursive. "q" vine de la "in-line quotation" (citate
inserate in-line); i blocurile " q " pot fi imbricate.

141
Laborator Tehnologii Internet Lucrarea nr.3

<html>
<head>
<title>Imbricarea etichetelor </title>
</head>
<body> Aceasta linie este formata din text normal.<br>
Normal <b>ingrosat <i> ingrosat si italic </i> ingrosat </b>.
<br> Normal <u>subliniat <b> subliniat si ingrosat <big>subliniat,
ingrosat si marit.<br>
<i>Subliniat, ingrosat ,marit si italic.</i> </big></b></u>
</body>
</html>

142
Laborator Tehnologii Internet Lucrarea nr.4

4 Principalele structuri n HTML


4.1 Obiective
dobndirea cunotinelor despre legturi, liste, tabele n html;

4.2 Recapitulare
Orice document HTML ncepe cu notaia <html> i se termin cu notaia
</html>. Aceste "chestii" se numesc n literatura de specialitate "TAG-uri".Prin
convenie, toate informaiile HTML ncep cu o parantez unghiular deschisa "<" i se
termin cu o parantez unghiular nchis ">".
Tag-urile dintre aceste paranteze transmit comenzi ctre browser pentru a afia
pagina ntr-un anumit mod. Unele blocuri prezint delimitator de sfrit de bloc, n timp
ce pentru alte blocuri acest delimitator este opional sau chiar interzis.
ntre cele dou marcaje <html> i </html> vom introduce dou seciuni:
seciunea de antet <head>...</head> i
corpul documentului <body>...</body>. Blocul <body>...</body> cuprinde
coninutul propriu-zis al paginii HTML, adic ceea ce va fi afiat n fereastra
browser-ului.

O etichet poate fi scris att cu litere mici, ct i cu litere mari.


Adic <HTML> = <HtmL> = <html>. Caracterele "spaiu" i "CR/LF" (Enter) ce apar
ntre etichete sunt ignorate de ctre browser.
Fiier de lucru:
Studenii vor crea un director Lucrare4, n care vor crea fiierul de lucru
lucrare4.html, n care vor scrie, pentru nceput urmtorul scrip:
<html >
<head>
<title>Document Nou</title>
</head>
<body>
<h1>Lucrarea de laborator nr 4 <br> lectii de html</h1>
<h2>Crearea legaturilor in html</h2>

Aici studenii vor introduce


urmtoarele linii de script
</body>
</html
pe parcursul lucrrii, vor aduga n acest fiier liniile de script ce le vor fi
indicate:

4.3 Legturi link-uri


Pentru aceast seciune, studenii vor mai crea n acelai director, dou fiiere
html, numite pagina1.html i pagina2.html, n care vor introduce urmtoarele
scripturi:
<html >
<head>
<title>Pagina 1</title>
</head>
<body>

143
Laborator Tehnologii Internet Lucrarea nr.4
<font color=red><h3>Lucrarea de laborator nr 4 <br> pagina
1</h3></font>
</body>
</html>

<html >
<head>
<title>Pagina 2</title>
</head>
<body>
<font color=blue><h3>Lucrarea de laborator nr 4 <br> pagina
2</h3></font>
</body>
</html>

O legtur ctre o pagin aflat n acelai director se formeaz cu ajutorul


etichetei <a> (de la "anchor"=ancora). Pentru a preciza pagina indicat de legtur se
utilizeaz un atribut al etichetei <a> numit href, care ia valoare numele fiierului
HTML aflat n acelai director. Zona activ care devine sensibil la apsarea butonului
stng al mouse-ului este format din textul cuprins ntre etichetele <a>...</a>.
Prezena etichetei de sfrit </a> este obligatorie.
n pagina principal, de lucru, lucrare4.html se scriu n continuare legturile
ctre pagina 1 i ctre pagina2:

Legatura catre pagina1: <a href="pagina1.html"> apasa aici </a><br>


Legatura catre pagina2: <a href="pagina2.html"> apasa aici </a><br>

Dac vrem s crem o legtur ctre o pagin de pe disc, n loc de


"pagina1.html" vom scrie calea ctre fiierul respectiv.
Pentru a crea o legtur ctre un iste extern, vom scrie adresa site-ului, de ex:
<a href="http://www.yahoo.com"><b> Catre site-ul YAHOO</b> </a><br>

4.3.1 Ancore
ntr-o pagin foarte lung pot exista puncte de reper ctre care se definesc
legturi.
O ancor se definete de asemenea prin eticheta <a>. Pentru a defini ancora se
utilizeaz atributul name care primete ca valoare un nume atribuit ancorei (de exemplu
"leg1").
Pentru a insera o legtura ctre "leg1" definit n aceeai pagin se utilizeaz
eticheta <a> avnd atributul href de valoare "#leg1".
Pentru a introduce o legtur ctre o ancor definita n alt document (alta
pagin) aflat n acelai director, atributul href primete o valoare de forma
"nume_fisier.html#nume_ancora".
Vom defini o ancor n top-ul paginii i una la sfritul paginii astfel:
n topul paginii, dup tag-ul <body> se scrie: <a name="top">top
n josul paginii: nainte de </body> se scrie: <a name="jos">jos
Pentru apelarea ancorelor, scriem n continure, de unde am rmas data trecut:

144
Laborator Tehnologii Internet Lucrarea nr.4
<h3>Ancore definite in acelasi document </h3>
<a href="#jos">
Link catre sfarsit pagina</a>

<br> 1<br>2<br>3<br>4<br> 5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>


13<br>14<br>15<br>16<br> 17<br>18<br>19<br>20<br> 21<br>22<br>23<br>
24<br>
Catre top pagina
<a href="#top"> Link catre top </h3>

4.4 Liste

4.4.1 Liste neordonate


O list neordonat este un bloc de text delimitat de etichetele corespondente
<ul>...</ul> (" ul " vine de la " unordered list " = lista neordonata). Fiecare element al
listei este iniiat de eticheta <li> (list item).
Lista va fi indentat fa de restul paginii Web i fiecare element al listei ncepe
pe un rnd nou.
n fiierul pafina1.html se introduc urmtoarele scripturi, nainte de tagul
</body>:
<h1 align="center">O lista neordonata</h1><hr>
Glosar de termeni de World Wide Web
<ul>Culori uzuale disponibile prin nume
<li>Black <li>White <li>Red <li>Green <li>Blue <li>Yellow <li>Purple
<li>Aqua
</ul>
Tag-urile <ul> i <li> pot avea un atribut type care stabilete caracterul afiat n
faa fiecrui element al listei. Valorile posibile al acestui atribut sunt:
o "circle" (cerc)
"disc" (disc plin) (valoarea prestabilita);
"square" (patrat)
Listele neordonate pot fi imbricate pe mai multe niveluri: exemplu: n continuare
se introduc rndurile:
<h1 align="center">O lista neordonata de liste neordonate</h1><hr>
Glosar de termeni de World Wide Web
<ul>Elemente si atribute a unei pagini HTML
<li>Frameset <ul>Atribute: <li>cols <li>rows <li>border </ul>
<li>Frame <ul>Atribute: <li>src <li>name <li>scrolling </ul>
</ul>

4.4.2 Liste ordonate


O list ordonat de elemente este un bloc de text delimitat de etichetele
corespondente <ol>...</ol> ("ol" vine de la "ordered list" = list ordonat). Fiecare
element al listei este iniiat de eticheta <li> (list item).
Lista va fi indentat fa de restul paginii Web i fiecare element al listei ncepe
pe un rnd nou.

<h1 align="center">O lista ordonata</h1><hr>


<ol>Culori uzuale disponibile prin nume
<li>Black <li>White <li>Red <li>Green <li>Blue <li>Yellow <li>Purple
145
Laborator Tehnologii Internet Lucrarea nr.4
<li>Aqua
</ol>
Tag-urile <ol> i <li> pot avea un atribut type care stabilete tipul de caractere
utilizate pentru ordonarea listei. Valorile posibile sunt:
" A " pentru ordonare de tipul A , B , C , D etc. ( litere mari );
" a " pentru ordonare de tipul a , b , c , d etc. ( litere mici );
" I " pentru ordonare de tipul I , II , III , IV etc. ( cifre romane mari );
" i " pentru ordonare de tipul i , ii , iii , iv etc. ( cifre romane mici );
" 1 " pentru ordonare de tipul 1 , 2 , 3 , 4 etc. ( cifre arabe - opiune prestabilit);

Listele ordonate pot fi imbricate ntre ele sau cu liste neordonate, ca n exemplul
urmtor.
<html>
<head><title>listex_8</title></head>
<body><h1 align="center">O lista ordonata de liste ordonate si
neordonate</h1><hr>
<ol>Un sistem informatic include:
<li>Hardware:
<ol>
<li>placa de baza
<li>procesor
<li>memorie
<li>harddisk
</ol>
<li>Software:
<ul>
<li>Linux
<li>Windows
<li>OS/2
<li>Unix
</ul>
<li>Software de aplicatie:
<ul type="disc">
<li>VisualC++
<li>Java
<li>SQL
<li>CorelDraw
</ul>
</ol>
</body>
</html>

4.5 Tabele
Tabelele ne permit s crem o reea dreptunghiular de domenii, fiecare domeniu
avnd propriile opiuni pentru culoarea fondului, culoarea textului, alinierea textului etc.
Pentru a insera un tabel se folosesc etichetele corespondente <table>...</table>. Un
tabel este format din rnduri. Pentru a insera un rnd ntr-un tabel se folosesc etichetele
<tr>...</tr> (de la " table row "= rnd de tabel). Folosirea etichetei de sfrit </tr> este
opional.
Un rnd este format din mai multe celule ce conin date. O celul de date se
introduce cu eticheta <td>..</td>.

146
Laborator Tehnologii Internet Lucrarea nr.4
Toate exemplele de tabele vor fi scrise n fiierul pagina2.html.

n mod implicit, un tabel nu are chenar. Pentru a aduga un chenar unui tabel, se
utilizeaz un atribut al etichetei <tabel> numit border.
Acest atribut poate primi ca valoare orice numr ntreg ( inclusiv 0 ) i reprezint
grosimea n pixeli a chenarului tabelului.
Dac atributul border nu este urmat de o valoare atunci tabelul va avea o
grosime prestabilita egal cu 1 pixel, o valoare egal cu 0 a grosimii semnific absena
chenarului.
Cnd atributul border are o valoare nenul chenarul unui tabel are un aspect
tridimensional.
Exemplu: tabel cu trei rnduri i patru coloane:

<table border="3">
<tr> <td>celula 11</td> <td>celula 12</td><td>celula 13</td></tr>
<tr> <td>celula 21</td> <td>celula 22</td><td>celula 23</td></tr>
<tr> <td>celula 31</td> <td>celula 32</td><td>celula 33</td></tr>
</table>

4.5.1 Alinierea tabelului


Pentru a alinia un tabel ntr-o pagina Web se utilizeaz atributul align al
etichetei <table>, cu urmtoarele valori posibile: "left" (valoarea prestabilit), "center"
i "right".
Alinierea este important pentru textul ce nconjoar tabelul. Astfel :
dac tabelul este aliniat stnga (<table align="left">), atunci textul care
urmeaz dup punctul de inserare al tabelului va fi dispus n partea dreapta a
tabelului.
dac tabelul este aliniat dreapta (<table align="right">), atunci textul care
urmeaz dup punctul de inserare al tabelului va fi dispus n partea stng a
tabelului.
dac tabelul este aliniat pe centru (<table align="center">), atunci textul care
urmeaz dup punctul de inserare al tabelului va fi afiat pe toat limea
paginii, imediat sub tabel.

Pentru a modifica alinierea tabelului nostru, se adaug align="center" dup


tagul <table i nainte de border"3", aa ca mai jos:
<table align="center" border="3">

4.5.2 Definirea culorilor de fond pentru un tabel


Culoarea de fond se stabilete cu ajutorul atributului bgcolor, care poate fi ataat
ntregului tabel prin eticheta <table>, unei linii prin eticheta <tr> sau unei celule de
date prin eticheta <td>.
Valorile pe care le poate primi bgcolor sunt cele cunoscute pentru o culoare.
Dac n tabel sunt definite mai multe atribute bgcolor, atunci prioritatea este
urmtoarea: <td>, <tr>, <table> ( cu prioritate cea mai mic ).

147
Laborator Tehnologii Internet Lucrarea nr.4
Exemplificare cod:
fond galben pentru tot tabelul:
<table align="center" border="3" bgcolor="yellow">

fond verde pentru un rndul 1:


<tr bgcolor="green"> <td>celula 11</td> <td>celula 12</td><td>celula
13</td></tr>

fond rou pentru celula 11 i celula 23:


<td bgcolor="red">celula 11</td>
<td bgcolor="red">celula 22</td>

4.5.3 Dimensionarea celulei unui tabel


Distana dintre dou celule vecine se definete cu ajutorul atributului cellspacing
al etichetei <table>. Valorile acestui atribut pot fi numere ntregi pozitive, inclusiv 0, i
reprezint distana n pixeli dintre dou celule vecine. Valoarea prestabilit a atributului
cellspacing este 2.
Distana dintre marginea unei celule i coninutul ei poate fi definit cu ajutorul
atributului cellpadding al etichetei <table>.Valorile acestui atribut pot fi numere ntregi
pozitive, i reprezint distana n pixeli dintre celule i coninutul ei. Valoarea
prestabilita a atributului cellpadding este 1.
Exemplificare:
pentru a seta distana dintre dou celule vecine, se adaug la <table > :
cellspacing="0", i setm distana dintre celule la zero;
pentru a seta distana dintre marginea celulei i textul din ea la 20 pixeli, vom
aduga: cellpadding="20".
<table cellspacing="0" cellpadding="20"

4.5.4 Dimensionarea unui tabel


Dimensiunile unui tabel - limea i nlimea - pot fi stabilite exact prin
intermediul a doua atribute, width i height, ale etichetei <table>. Valorile acestor
atribute pot fi:
numere ntregi pozitive, reprezentnd limea respectiv nlimea n pixeli a
tabelului;
numere ntregi ntre 1 i 100, urmate de semnul %, reprezentnd fraciunea din
limea i nlimea total a paginii.

Exemplu: <table width="200" height="50%" >, tabel cu limea 200 pixeli


i nlimea 50% din nlimea paginii web.

4.5.5 Titlul unui tabel


Unui tabel i se poate ataa un titlu cu ajutorul etichetei <caption> ( de la "table
caption" = titlu tabel). Aceast etichet trebuie plasat n interiorul etichetelor
<table>...</table>, dar nu n interiorul etichetelor <tr> sau <td>. Titlul unui tabel poate
fi aliniat cu ajutorul atributului align al etichetei <caption> care poate lua una dintre
valorile:
148
Laborator Tehnologii Internet Lucrarea nr.4
" bottom " ( sub tabel );
" top " ( deasupra tabelului );
" left " ( la stanga tabelului );
" right " ( la dreapta tabelului ).

Exemplu: <table ><caption align="top">Titlu tabel lucrare4

4.5.6 Cap de tabel


Un tabel poate avea celule cu semnificaia de cap de tabel. Aceste celule sunt
introduse de eticheta <th> (de la "tabel header" = cap de tabel) n loc de <td>.
Toate atribute care pot fi ataate etichetei <td> pot fi de asemenea ataate
etichetei <th>. Coninutul celulelor definite cu <th> este scris cu caractere aldine i
centrat.
<tr><th>capcol1</th><th>capcol2</th><th>capcol3</th>

4.5.7 Celule vide ale unui tabel


Dac un tabel are celule vide, atunci aceste celule vor aprea n tabel fr un
chenar de delimitare. n scopul de a afia un chenar pentru celule vide se utilizeaz
urmtoarele trucuri:
dup <td> se pune &nbsp;;
dup <td> se pune <br>.

Caracterul &nbsp; (no break space) este de fapt caracterul spaiu. Un spaiu
introdus prin intermediul acestui caracter nu va fi ignorat de browser.

4.5.8 Atributul " nowrap "


Atributul nowrap aparine elementelor <td> i <th>; el interzice ntreruperea
unei linii de text. Astfel, n tabel pot aprea coloane cu o lime orict de mare.

4.5.9 Subblocurile unui tabel


n specificaiile HTML 4.0, coninutul unui tabel poate fi mprit n subblocuri
prin elementele:
<thead><tr><td>...</thead> ( un singur rnd );
<tfoot><tr><td>...</tfoot> ( un singur rnd );
<tbody><tr><td>...</tbody> ( oricte rnduri );

ntr-un tabel exist un singur subbloc de tipul <thead> i un singur subbloc de


tipul <tfoot>, dar pot exista mai multe subblocuri de tip <tbody>.

149
Laborator Tehnologii Internet Lucrarea nr.5

5 Primii pai n PHP


5.1 Obiective
Introducere n elementele de baz ale limbajului PHP;
Realizarea unor scripturi PHP, i modificarea acestora pentru a vedea
diferenele;

5.2 Introducere
PHP este un limbaj dinamic, ceea ce nseamn c PHP comunic cu utilizatorul,
el efectueaz dinamic operaii, iar coninutul paginii se schimb n real-time, n funcie
de preferine. De exemplu n HTML nu putem modifica coninutul unei pagini dect
dac o nlocuim cu una nou (cu coninut nou). n PHP lucrurile stau mai simplu, printr-
un script putem introduce tiri pe pagina noastr sau putem modifica titlul paginii, sau
putem construi formulare dinamice pe care utilizatorii s le foloseasc. Totui acest
lucru nu nseamn c ne debarasam de limbajul HTML, nicidecum. Cei care au
cunotine HTML vor nelege i nva mai uor PHP.

5.2.1 Sintaxa
La fel ca i n limbajul HTML, atunci cnd deschidem un tag, el trebuie automat
nchis, pentru a nu genera erori (ex. <table> i </table>), i n PHP, cu ajutorul
tagurilor <?php i respectiv ?> vom putea delimita codul PHP de codul HTML. Este
foarte important de tiut, pentru lejeritate se pot folosi mai simplu tagurile <? i
respectiv ?>, cu toate acestea metodele prin care putem delimita tagurile PHP sunt mai
multe, spre exemplu:
<script language="php">
echo "Acesta este un text";
</script>
sau
<% echo "Acesta este un text"; %>
atunci cnd este activat opiunea asp_tags din php.ini.

Este recomandat utilizarea primelor taguri descrise anterior, adic:


<?php

cod php aici

?>
Ca n orice limbaj de programare/scripting, n PHP exist posibilitatea adugrii
de comentarii sau note n codul surs. Acestea nu sunt luate n considerare de ctre
compilator. Iat cteva exemple de comentarii acceptate n PHP:
/* Comentariu in stil C */
// Comentariu in stil C++
# Comentariu in stil Bourne shell

Not: Pentru nceptori nu este recomandat folosirea comentariilor de tip shell.

O declaraie n PHP se ncheie tot timpul cu punct i virgul (;).


150
Laborator Tehnologii Internet Lucrarea nr.5
Neterminarea unei declaraii cu punct i virgul va duce la eroare de tip parse
error. Exemplu de cod care folosete un comentariu i o declaraie:
<?php
//mai jos va voi saluta
echo("Salut!");
?>

Prima linie este comentariu i este ignorat de PHP, a doua linie reprezint o
declaraie care se ncheie bineneles cu ;.

5.2.2 Aplicaii de nceput


Exemplul 1:
Vom testa configuraia PHP cu ajutorul funciei phpinfo(), scriind urmtorul
script ntr-un fiier nou php, cu ajutorul lui PHPDesign2005:
<?php
phpinfo();
?>

Se salveaz codul ca info.php i se ruleaza-l n browser. Se vor obine o


mulime de informaii despre configuraia PHP, tipul serverului, etc.
funcia phpinfo() are variabilele deja declarate n motorul PHP i de aceea nu
este necesar dect s o declarm o singur dat.
Exemplul 2:
Scriem un exemplu PHP n stil clasic, prin care salutm utilizatorii. Iat codul:
<?php
echo(Salutare la toti cititorii);
?>

Se salveaz sub numele salut.php i ruleaz n browser (ex.


http://localhost/salut.php). Pe ecran apare afiat textul Salutare la toti cititorii. Acest
lucru a fost posibil datorita functiei echo() cu ajutorul creia de acum nainte vom afia
text pe ecran.
Not: pe lng funcia echo() mai exist i print() care poate fi folosit n
acelai mod.
Observaie: echo() nu este totui o funcie, ea reprezint un constructor de
limbaj dar pentru uurina exprimrii o vom numi funcie. O dovad bun n sensul c
nu este funcie este aceea c nu suntem nevoii sa folosim paranteze. Sintaxa echo
Salutare la toti cititorii; este de asemenea acceptat.
S scriem mai multe exemple cu funcia echo(), pentru c va fi folosit foarte
des, i s vedem ce se poate face cu ea:
<?php
echo(Salut);
echo(Numele meu este);
echo(Popescu Ion);
?>

Salveaz codul de mai sus ca numelemeu.php i ruleaz-l n browser. Vei


observa c n ciuda faptului c am scris textul pe mai multe linii, el va fi afiat n
browser pe o singura linie. Fapt care evident nu ne convine, aa ca vom apela la tagul
<br> din HTML:

151
Laborator Tehnologii Internet Lucrarea nr.5
<?php
echo(Salut<br>);
echo(Numele meu este<br>);
echo(Popescu Ion);
?>

Acum textul va apare pe 3 linii separate.


Pentru coderii avansai care doresc s aib totul clar i afiat corect n
conformitate cu toate standardele vor opta pentru urmtorul cod:
<?php
echo(Salut<br>\n);
echo(Numele meu este<br>\n);
echo(Popescu Ion);
?>

Caracterul \n este un caracter de tip escape. Diferena se poate observa cnd ne


uitm n codul surs HTML generat. \n nseamn newline, adic indic faptul c
urmeaz linie nou. Totui acesta nu este singurul caracter de tip escape, iat lista
complet:
Tabel caractere escape
Caracter escape Descriere
\a alarma
\cx control-x (x poate fi orice caracter)
\e escape
\f formfeed
\n newline (linie noua)
\r carriage return
\t tab
\xhh caracter cu codul hexa hh
\ddd caracter cu codul octal ddd

5.3 Variabile si tipuri de date n PHP


n PHP toate variabilele ncep cu semnul de dolar ($). Dup semnul $ se poate
introduce un ir de caractere care poate aprea n diferite combinaii:
$variabila
$variabila123
$prima_variabila
$_VARIABILA

Acestor variabile le pot fi asignate orice valori, fie c este vorba de un ir de


caractere, numere, propoziii, fraze, etc.
n funcie de rolul pe care l au ntr-un script, variabilele pot fi de dou feluri:
variabile globale i variabile locale (ex. cele declarate n cmpul unei funcii).

5.3.1 Lucrul cu variabile si tipuri de date


n codul de mai jos vei regsi perfect conceptul de variabil:

152
Laborator Tehnologii Internet Lucrarea nr.5

<?php
$salut=Salutare natiune;
echo($salut);
?>

Coninutul variabilei $salut este pasat funcie echo care va afia coninutul
acesteia, deci va rezulta textul Salutare natiune.
Urmtorul cod demonstreaz conceptul de variabil ncapsulat. n cazul de mai
jos este vorba despre o variabil ncapsulat ntr-un text:
<?php
$nume = Popescu Ion;
echo(Numele meu este $nume);
//folosim functia echo() pentru a afisa
textul
?>

Rulai n browser scriptul de mai sus i vei vedea c el afieaz textul Numele
meu este Popescu Ion.
Probabil v-ai dat seama pn acum de ce se lucreaz cu variabile. Pentru c ne
fac viaa de programator mai uoar, unei variabile i putem asigna orice valoare, orice
text orict ar fi el de mare, i pe care l putem manipula doar prin apelarea unei simple
variabile asignate.
<?php
$numarul1 = 25;
$numarul2 = 20;
$numarul1 + $numarul2 = $rezultat;
echo($rezultat);
?>
n codul de mai sus am declarat dou variabile $numarul1 i $numarul2,
crora le-am dat valorile 25, respectiv 20. Mai jos am efectuat operaia simpl de
adunare, al crei rezultat este coninut de variabila $rezultat. Pentru a afia aceast
valoare ne folosim de funcia echo(). Rezultatul este clar, pe ecran va fi afiat, numrul
45 (20+25=45).
Pe lng operaia de adunare (+) se mai pot efectua opera urmtoarele operaii
matematice: (-) scdere, (*) nmulire, (/) mprire, (%) modul.
Tipurile de date n PHP sunt urmtoarele:
array-uri;
numere de tip float sau double;
integer;
object;
string

Aceste noiuni ar trebui s v fie cunoscute de la programarea n C++.


n continuare vom discuta despre tipurile string i integer.
Un string este format dintr-o plaj de caractere. Acesta poate s fie un cuvnt, o
linie, sau poate un ntreg articol. Un integer este un numr ntreg care ia valori ntre
(-32768 i 32767).
Pentru a determina ce tip de dat este o anumit variabila, putem folosi funcia
gettype(). Iat un exemplu:

153
Laborator Tehnologii Internet Lucrarea nr.5
<?php
$variabila_mea=Salut, sunt o variabila;
$tip=gettype($variabila_mea);
echo(Aceasta este o variabila de tip $tip);
?>

Mai sus am creat o variabil numit $variabila_mea creia i-am dat valoarea
Salut, sunt o variabila. Apoi prin funcia gettype() am chemat aceast variabil pentru
a afla ce fel de tip este ea. Mai jos am utilizat echo() pentru a afia tipul variabilei. Pe
ecran se va afia, Aceasta variabila este de tip string.
Facei un test si pentru $variabila_mea=6

5.3.2 Variabile dinamice


De multe ori este util s folosii variabile dinamice. O variabil normal se
declar aa:
$variabila = salutare ;
Acum s zicem c vrem o variabil care s aib numele valorii lui $variabila,
deci scriem:
$$variabila = lume;

Cu alte cuvinte, mai sus am creat o variabila cu numele $salutare i i-am dat
valoarea lume. Ne putem juca cu variabile dinamice la infinit, dar atunci cnd s-a
ajuns la un nivel mare deja se creaz confuzii iar dac cineva ar dori s citeasc, pentru
a mbunti, codul scris de tine, atunci nu ar mai nelege nimic.
Exist o sintax special care se folosete pentru variabilele complexe, i anume,
ncadrarea ntre acolade {}:
echo "Salutare ${$variabila}"; // rezulta: Salutare lume

Atunci cnd folosim array-uri, o sintax ca $$variabila[1] este incorect pentru


c PHP nu ar tii crui nivel s aplice indexul, de aceea se folosete expresia:
{$variabila[1]} sau ${$variabila}[1].

5.4 Cod PHP n cod HTML


<html>
<head>
<title> <?php echo $titlu; ?> </title>
</head>... </html>

Codul de mai sus ilustreaz foarte bine colaborarea dintre PHP i HTML. Codul
PHP poate fi asimilat cu uurin de tagurile HTML att timp ct el se afl ntre
delimitrile <?php respectiv ?>.
De asemenea se pot introduce mai multe declaraii ntre tagurile html, n diferite
moduri:
<html> ......... <body>
<?php
echo (Salut);
echo (Ce mai faci?);
?>
</body> ......... </html>
sau
154
Laborator Tehnologii Internet Lucrarea nr.5

<?php for($i=0, $i<50, $i++) { ?>


<br />
<?php } ?>

Fiierele de tip PHP pot include cod html, fie c face parte din ele, fie c este
scris separat. Privii urmtorul cod:
<?php
$titlu = Pagina mea de web;
include(index.inc);
?>
Iar codul lui index.inc este urmtorul:
<html><head><title><?php echo $titlu; ?></titlu></head></html>

Exemplele de mai sus sunt concludente, ns trebuie specificat c folosirea


fiierelor de tip .inc nu este recunoscuta de Apache i nu este parsata ca php, aa c
informaii senzitive se pot vedea prin intermediul browserului, de aceea trebuie s
apelam la setrile httpd.conf i s adugm urmtoarele linii:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

n acest fel am blocat accesul din exteriorul serverului la fiierele cu extensia


.inc. Aceasta este o practic foarte bun (care poate fi executat i prin intermediul unui
.htaccess1 n caz ca nu avem acces la httpd.conf, cum se ntmpl de obicei pe serverele
virtuale).
Totui nu este o practic bun i nu se recomand folosirea fiierelor cu extensii
.inc ci mai degrab cu extensia .php. Chiar i aa problemele nu se termin, deoarece
acestea trebuie protejate mpotriva accesului direct.

Iat ce metode de protecie se pot folosi:


plasarea tuturor fiierelor cu informaie sensibil ntr-un director sau mai multe
directoare care urmeaz s fie protejate prin .htaccess . Aici ne referim la
fiierele care nu sunt accesate direct de user n pagin, ci la cele care se introduc
de obicei cu funciile include(), include_once(), require(), require_once().
plasarea tuturor fiierelor cu informaii sensibile ntr-un director sau directoare
diferite de cel din rdcina web (httpdocs, www, etc), n acest fel ele nu pot fi
accesate prin browser n nici un fel. Aceast metod nu este aplicabil pentru
servere virtuale sau ntr-un enviroment tip server de hosting din cauza
restriciilor sau din cauz c PHP poate fi setat n safe_mode.

1
Un fiier .htaccess este un simplu fiier text ce conine comenzi, denumite directive Apache. Aceste
directive se aplic i afecteaz fiierele din directorul n care se afl fiierul .htaccess precum i
subdirectoarelor acelui director.

155
Laborator Tehnologii Internet Lucrarea nr.6

6 Construirea unui site n PHP


6.1 Obiective
Structura i elemente de baz pentru construirea unui site dinamic n PHP, cu
sau fr conectare la o baz de date.

6.2 Introducere
n continuare se prezint o modalitate de cum se poate construi un site cu
ajutorul limbajului PHP. Exemplul prezentat nu este un standard, este doar o modalitate
de a vedea cum se poate construi un site i cum se preiau sau trimite variabilele prin
intermediul site-ului. Putei, pe baza acestui exemplu, s v construii propriul site, n
forma preferat de dvs. i adaptnd modelul acesta la necesitile voastre.
n exemplul prezentat, s-a preferat existena unei singure pagini, anume index.php, n
care s fie incluse coninutul i meniul, n funcie de ce link acceseaz vizitatorul.
Putei vedea acest model ntr-un fel modular, fiecare script fiind de fapt un
modul care execut anumite operaii specifice. Astfel, n pagina index.php se includ
mai multe module (scripturi) care luate separat, fiecare fac anumite lucruri, dar puse
mpreun, formeaz pagina de web generat dinamic.

Partea de sus a paginii (head)


Partea cu meniul orizontal generat dinamic (partea de body)

aici se pot pune


partea n care se afieaz coninutul paginilor, i alte
meniul lateral alte informaii
informaii
generate dinamic

partea de ncheiere a paginii (footer)

Dup cum se poate vedea mai sus, am desprit fiecare parte a unei pagini n
buci, fiecare bucat este colorat diferit pentru o mai bun vizualizare. Putei
introduce n fiecare bucat cte un script php care s genereze respectiva bucat
dinamic. Astfel, n cazul unei modificri, va fi mult mai uor s modificai doar scriptul
care se ocup de o anumit parte a paginii, pe cnd dac tot site-ul ar fi fost fcut static
n HTML, la un site cu 100200 de pagini chiar i cea mai mic modificare ar fi
nsemnat un chin.

Am numit fiecare script care se ocup de o anumit parte a site-ului astfel:


head.php - conine partea dintre tagurile HTML <head> i </head>
body.php - conine partea dintre tagurile HTML <body> i coninutul paginii
footer.php - conine partea de jos a paginii

156
Laborator Tehnologii Internet Lucrarea nr.6
6.3 Elementele componente

6.3.1 index
index.php - n care se seteaz nivelul de raportare al erorilor (dac nu dorii ca
vizitatorii s vad eventualele erori raportate de ctre php, putei stabili nivelul 0). Apoi,
se verific dac exist fiierul head.php i body.php i se ncarc sau se oprete cu un
mesaj de eroare.
Scriptul acestui fiier este:
<?php
/***************************
modulul index.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se seteaza nivelul de raportare al erorilor din php
error_reporting(E_ALL);

// se include modulul de head


if (file_exists("head.php"))
{
include_once("head.php");
}
else
{
die('<br>Eroare: Nu se gaseste fisierul head.php');
}
// se include modulul de body
if (file_exists("body.php"))
{
include_once("body.php");
}
else
{
die('<br>Eroare: Nu se gaseste fisierul body.php');
}
// se inchid tagurile html
echo '</body>
</html>';
?>

6.3.2 head
head.php - n acest fiier se afieaz codul html pentru nceputul paginii, i dac
exist, se ncarc i fiierele cu cod CSS i JavaScript folosite n pagin.
<?php
/***************************
modulul head.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se trimite la browser codul html
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

157
Laborator Tehnologii Internet Lucrarea nr.6
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />';

// se verifica ce pagina se cere si se afiseaza titlul paginii


/* scurte explicatii pentru cod
- daca este setata variabila pagina care se trimite prin intermediul
link-urilor prin GET, atunci se preia valoarea acelei variabile si se
cauta daca corespunde cu una din valorile scrise in switch, si daca
corespunde afiseaza titlul corespunzator, daca nu corespunde cu nici o
valoare, atunci afiseaza valoarea default
- daca nu este setata variabila pagina (cazul cand se acceseaza prima
data pagina)atunci se seteaza valoarea titlului ca "Pagina principala"
*/
if(isset($_GET['pagina']))
{
$titlu = $_GET['pagina'];
}
else
{
$titlu = 'Pagina principala';
}
switch ($titlu)
{
case 'a':
$titlu = 'Pagina A';
break;
case 'b':
$titlu = 'Pagina B';
break;
default:
$titlu = 'Alte pagini';
}

// se trimite la browser titlul paginii


echo '<title>'.$titlu.'</title>';

//se include partea de CSS si cea de JavaScript daca exista


if (file_exists("css.php"))
{
include_once("css.php");
}
if (file_exists("js.php"))
{
include_once("js.php");
}
// se inchide tagul html pentru head
echo '</head>';
?>

css.php - acest fiier conine codul CSS folosit pentru formatarea i afiarea
paginii HTML.
<?php
/***************************
modulul css.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0

158
Laborator Tehnologii Internet Lucrarea nr.6
**************************/
// se seteaza variabila care contine codul css
$valoare_css = '<style type="text/css">
<!--
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
body {
background-color: #FFFFFF;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.style1 {
font-size: 24px;
font-weight: bold;
}
-->
</style>';
// se trimite la browser codul css
echo $valoare_css;
?>

js.php - dac se folosete cod JavaScript n pagini, este de preferat s se salveze


codul n acest fiier, pentru a putea avea acces rapid la el n cazul n care dorii s facei
modificri.

6.3.3 body
body.php - conine codul HTML existent ntre tagurile <body> i </body> Dac
exist, se ncarc i fiierele care conin meniul orizontal i/sau vertical, precum i
fiierul care afieaz coninutul paginii cerute. Pe lng acestea, dac dorii s bgai
alte scripturi n pagini, se include i fiierul module.php
<?php

// se trimite la browser codul html pentru body


echo '<body>
<table width="100%" border="0" cellspacing="3" cellpadding="0">
<tr>
<td valign="top"><table width="100%" border="0" cellspacing="3"
cellpadding="0">
<tr>
<td width="25%" height="60"><span class="style1">Prima
pagin&#259; + LOGO </span></td>
<td bgcolor="#996666">Aici pute&#355;i pune un banner de
reclam&#259;, sau o poz&#259; </td>
</tr>

</table></td>
</tr>
<tr>
<td valign="top">';

// daca exista meniu orizontal atunci se include


if (file_exists("meniu_orizontal.php"))
159
Laborator Tehnologii Internet Lucrarea nr.6
{
/* nu se foloseste include_once deoarece poate doriti sa mai
afisati meniul si in alt loc pe pagina*/
include("meniu_orizontal.php");
}

// se continua prelucrarea paginii


echo '
</td>
</tr>
<tr>
<td valign="top"><table width="100%" border="0" cellspacing="3"
cellpadding="0">
<tr>
<td width="20%" valign="top">';

// daca exista meniu vertical atunci se include


if (file_exists("meniu_vertical.php"))
{
include("meniu_vertical.php");
}
// se continua prelucrarea paginii
echo '</td>
<td valign="top">';

// se include partea care prelucreaza continutul paginii


if (file_exists("continut.php"))
{
include("continut.php");
}
else
{
die('EROARE: Nu exista fisierul continut.php');
}
// se continua prelucrarea paginii
echo '</td>
<td width="20%" valign="top">';

// daca exista module aditionale se includ


if (file_exists("module.php"))
{
include_once("module.php");
}
// se continua prelucrarea paginii
echo '</td>
</tr>
</table></td>
</tr>
<tr>
<td align="center" valign="top" bgcolor="#9999FF">';
// daca exista footer se include
if (file_exists("footer.php"))
{
include_once("footer.php");
}
// se continua prelucrarea paginii
echo '</td>
</tr>

160
Laborator Tehnologii Internet Lucrarea nr.6
</table>';
?>

6.3.4 Meniurile orizontal i vertical


meniu_orizontal.php - conine codul HTML pentru meniul orizontal.
<table width="100%" border="0" cellpadding="0" cellspacing="3"
bgcolor="#9999FF">
<tr>
<td align="center" valign="top"><a
href="index.php">HOME</a></td>
<td align="center" valign="top"><a
href="index.php?pagina=a">PAGINA A </a></td>
<td align="center" valign="top"><a
href="index.php?pagina=b">PAGINA B </a></td>
<td align="center" valign="top"><a
href="index.php?pagina=contact">CONTACT</a></td>
</tr>
</table>

meniu_vertical.php - conine codul HTML pentru meniul vertical


<table width="100%" border="0" cellspacing="3" cellpadding="0">
<tr>
<td align="center" valign="top">MENIU</td>
</tr>
<tr>
<td align="center" valign="top"><a
href="index.php?pagina=a">PAGINA A </a></td>
</tr>
<tr>
<td align="center" valign="top"><a
href="index.php?pagina=b">PAGINA B </a></td>
</tr>
<tr>
<td align="center" valign="top"><a
href="index.php?pagina=contact">CONTACT</a></td>
</tr>
<tr>
<td align="center" valign="top"><a
href="index.php?pagina=blabla">Pagina inexistenta </a></td>
</tr>
<tr>
<td align="center" valign="top"><a
href="index.php?pagina=">Pagina eronata </a></td>
</tr>
</table>

6.3.5 Coninut
continut.php - afieaz coninutul paginilor, n funcie de linkul cerut. Dac se
cer pagini externe, se verific dac acea pagin exist i se ncarc pentru afiare.
<?php
/***************************
modulul continut.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica daca se cere o pagina
161
Laborator Tehnologii Internet Lucrarea nr.6
if (isset($_GET['pagina']))
{
// daca se cere o pagina se verifica daca variabila nu este goala
if(!empty($_GET['pagina']))
{
$pagina = $_GET['pagina'];
}
// daca este goala se ia pagina principala
else
{
$pagina = 'index';
}
}
/* daca nu se cere nici o pagina nseamn ca trebuie afiata pagina
principala */
else
{
$pagina = 'index';
}

// in continuare se prelucreaza pagina pentru afisare


switch ($pagina)
{
case 'a':
$afisare = '<br>A fost ceruta pagina A. <br>Aceasta este
pagina A.';
break;
case 'b':
$afisare = '<br>A fost ceruta pagina B. <br>Aceasta este
pagina B.';
break;
case 'contact':
if (file_exists("contact.php"))
{
include_once("contact.php");
$afisare = '';
}
else
{
$afisare = '<br>Eroare: Nu se gaseste fisierul
contact.php';
}
break;
case 'index':
$afisare = 'Aceasta este pagina principala';
break;
default:
$afisare = '<br>Eroare: A fost ceruta pagina cu numele
<b>'.$pagina.'</b> dar nu exista pe server.';
}

// se afiseaza codul html pentru continut


echo $afisare;
?>

contact.php - poate fi o pagina extern, cu coninut HTML sau PHP, precum i


formulare de contact.

162
Laborator Tehnologii Internet Lucrarea nr.6
<p>Aceasta este pagina de contact. Este o pagin; separat; i se gsete n
fiierul <em>contact.php</em></p>
<p>Se pot folosii fiiere separate n php pentru diferite pagini, precum i
formulare i alte scripturi. </p>

6.3.6 Module
module.php - este un fiier care atunci cnd este accesat, verific ce fiiere
exist n directorul MODULE i le ncarc pe fiecare.
<?php
/***************************
modulul module.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica ce module sunt in directorul de module
if (!$director = opendir("module"))
{
echo("Eroare: Nu exista directorul cu module");
}
else
{
$citire = readdir($director);
while ($citire)
{
if ($citire != '.')
{
if ($citire != '..')
{
$fisier[] = $citire;
}
}
$citire = readdir($director);
}
closedir($director);
}
// se incarca fiecare modul existent in director
foreach ($fisier as $valoare)
{
if (file_exists("module/".$valoare))
{
include_once("module/".$valoare);
}
else
{
echo "<br>module/".$valoare;
}
}
?>

6.3.7 Footer, modulul data i ora


data_ora.php - este un fiier extern, care afieaz cteva informaii despre
vizitator.
<?php
/***************************
modulul data_ora.php

163
Laborator Tehnologii Internet Lucrarea nr.6
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se preiau data si ora serverului
$data = date("d-m-Y", time());
$ora = date("H:i:s", time());
// se preia ip-ul vizitatorului
$ip = $_SERVER['REMOTE_ADDR'];
// se preia semnatura browserului
$browser = $_SERVER['HTTP_USER_AGENT'];

$info = '<br>'.$data.'<br>Ora: '.$ora.'<br>IP: '.$ip.'<br>Semnatura


browser: <br>'.$browser;
// se afiseaza informatiile
echo '<table width="100%" border="0" cellspacing="3" cellpadding="0">
<tr>
<td align="center" valign="top"><strong>Modulul data_ora
</strong></td>
</tr>
<tr>
<td align="center" valign="top">'.$info.'</td>
</tr>
</table>';
?>
footer.php - este fiierul care afieaz n josul paginii numele curent al paginii.

<?php
/***************************
modulul module.php
creat de Birkoff pentru www.tutoriale.far-php.ro
Data: 16-07-2006
Versiune modul: 1.0
**************************/
// se verifica ce module sunt in directorul de module
if (!$director = opendir("module"))
{
echo("Eroare: Nu exista directorul cu module");
}
else
{
$citire = readdir($director);
while ($citire)
{
if ($citire != '.')
{
if ($citire != '..')
{
$fisier[] = $citire;
}
}
$citire = readdir($director);
}
closedir($director);
}
// se incarca fiecare modul existent in director
foreach ($fisier as $valoare)
{

164
Laborator Tehnologii Internet Lucrarea nr.6
if (file_exists("module/".$valoare))
{
include_once("module/".$valoare);
}
else
{
echo "<br>module/".$valoare;
}
}
?>

6.4 Mod de lucru


n directorul C:\Program Files\EasyPHP 2.0b1\www\ se creeaz un subdirector,
de exemplu Lab5-nume_student, n care se creaz toate fiierele enumerate mai sus, mai
puin data_ora.php, care va fi plasat n directorul module (aa cum se vede n figura de
mai jos).

Rezultatul final, trebuie s arate aa:

165
Laborator Tehnologii Internet Lucrarea nr.7

7 Stiluri css i chestionar n PHP


7.1 Obiective
Dobndirea cunotinelor necesare utilizrii stilurilor din fiiere css externe;
Realizarea unui formular n php

7.2 Utilizarea fiierelor css externe


Stilurile definite n interiorul unui bloc <style>...</style> pot fi transferate ntr-
un fiier extern existnd astfel posibilitatea asocierii lor mai multor fiiere HTML.
Pentru a utiliza un stil definit ntr-un fiier extern se procedeaz astfel:
1. se creaz un fiier care s conin numai descrierea stilurilor i se salveaz cu
extensia ".css". Coninutul acestui fiier coincide cu coninutul unui bloc
<style>...</style>, fr ca aceti delimitatori s fie inclui.
2. n fiierul HTML care utilizeaz stilurile definite n fiierul creat anterior, se
include n blocul <head>...</head> o etichet <link>, avnd trei atribute:
atributul "rel" cu valoarea "stylesheet";
atributul "type" cu valoarea "text/css".
atributul "href" avnd ca valoare adresa URL a fiierului creat la
punctul 1;
Stilurile definite din fiierul CSS extern se activeaz ca i cum ar fi stiluri
definite n fiierul HTML curent ntr-un bloc <style>...</style>.

Modul de lucru: se creeaz un director nou n C:\Program Files\EasyPHP


2.0b1\www, de exemplu Ex_CSS, n care se creeaz dou fiiere, unul index.html i
unul stil.css.
Iat un fiier HTML cu un CSS extern:
Fiierul HTML:
<html>
<head>
<LINK REL= "stylesheet" TYPE= "text/css" HREF= "stil.css">
<title>Pagina de text stilizat</title>
</head>
<body>
<H2>Acesta este text formatat ca Header 1</H2>
<p>Acesta este un paragraf</p>
<H3>Acesta este text formatat ca Header 2, urmat de un tabel</H3>

<table width="500" border="1">


<tr>
<th align="left">Nume</th>
<th align="left">Prenume</th>
<th align="left">Telefon</th>
<th align="left">E-mail</th>
</tr>
<tr>
<td width="25%">Popescu</td>
<td width="25%">Valentin</td>
<td width="25%">4433978</td>
<td width="25%">popescu@yahoo.com</td>
166
Laborator Tehnologii Internet Lucrarea nr.7
</tr>
<tr>
<td width="25%">Ionescu</td>
<td width="25%">Mihai</td>
<td width="25%">5599786</td>
<td width="25%">ionescu@yahoo.com</td>
</tr>
</table>
<br>
<h3>Acesta este un text formatat ca Header 3, urmat de 2 liste:</h3>
<ol>
<li>Date personale student;</li>
<li>Calificari student;</li>
<li>Program zilnic:</li>
</ol>
<ul>
<li>Program dimineata</li>
<li>Pauza de masa</li>
<li>Program dupamiaza</li>
</ul>
<br>
urmeaza un text Header1, de marime 80:
<H1>Sfarsit</H1>
</body>
</html>

Fiierul stil.css conine:


H2,H3,h3 {
color:#483d8b;
font-family: "lucida calligraphy", "arial";
}
H1 {
color:#01faf1;
font-family: "comic sans ms", "tahoma";
font-size:80;
}
p, table, li
{
font-family: "lucida calligraphy", "arial";
margin-left: 10pt;
}
body
{
background-color:#fffaf0;
}
li,p,th,td
{
font-size: 80%;
}
table {border-style:outset}
li {list-style: square;)

167
Laborator Tehnologii Internet Lucrarea nr.7
7.3 Crearea chestionarelor n php

De multe ori este nevoie pe un stie de un chestionar prin care vizitatorii s poat
vota sau prin care s i poat exprima punctul de vedere. De aceea n continuare se
prezint un chestionar pe care cred c i voi vrei s l avei pe paginile voastre.
El este compus din 2 fiiere: chestionarul n format html i modulul de
prelucrare i trimitere a datelor din chestionar (un script php). Putei s adugai sau s
tergei ntrebri, s punei alte butoane (specifice html - text field, check box, radio
button, etc) i s l modificai aa cum dorii.
Explicaii:
n modulul chestionar.php avei grij s introducei datele i check box-urile
doar n form altfel pot aprea probleme la afiarea sau trimiterea datelor. Tot n
chestionar, dac mai adugai ntrebri trebuie s specificai numele butonului ca fiind
8-9-10 sau alt nume (vezi <input name = "1" type = "checkbox" id = "1"
value="da">). n situaia de fa eu le-am numerotat i la valoarea am pus "da" (adic
dac e bifat apare ca "da"). Dac avei i un text field (cum este la <textarea name="8"
id="8"> scrie aici ce vrei s gseti sau poi s ntrebi pe forum. </textarea>) trebuie
s i punei i lui un nume (n cazul de fa numele este "8"). Dup completarea i
trimiterea chestionarului ctre server, se acceseaz fiierul prelucrare_chest.php care
verific datele introduse i dac sunt corecte le afieaz i le trimite pe e-mail la adresa
specificat. Putei s introducei datele din chestionar i ntr-o baz de date sau ntr-un
fiier text, adugnd doar cteva linii de cod.
Mod de lucru: Fiecare student va crea un director propriu (de ex:
chestionar_iniiale-student) n C:\Program Files\EasyPHP 2.0b1\www, n care se vor
scrie cele trei fiiere listate mai jos: index.php, chestionar.php i
prelucrare_chestionar.php.

index.php
<html>
<head>
<title>Formular Chestionar</title>
</head>
<body>
<table width="100%" border="1">
<tr>
<td width="30%" valign="top">
<?php
include ("chestionar.php");
?>
</td>
<td><div align="center"> Completai chestionarul alturat, i dup
verificare, apsai TRIMITE. Dac nu sunei siguri, apsai ANULARE
</div></td>
</tr>
</table>
</body>
</html>

chestionar.html
<style type="text/css">
<!--
.style1 {

168
Laborator Tehnologii Internet Lucrarea nr.7
color: #FFFFFF;
font-weight: bold;
}
-->
</style>
<!-
Chestionar varianta 1
Creat la data de 08-01-2004
Copyright Alex - http://www.tutoriale.far-php.ro
->
<table width="100%" border="1" cellpadding="0" cellspacing="0"
bordercolor="#000099">
<tr>
<td valign="top" bgcolor="#9999cc"><div align="center"
class="style1 style1">Ce doriti sa gasiti<br>
in acest site? </div></td>
</tr>
<tr>
<td valign="top"><form action="prelucrare_chest.php"
method="post" name="chestionar" id="chestionar">
<input name="1" type="checkbox" id="1" value="da">
Scripturi php freeware.<br>
<input name="2" type="checkbox" id="2" value="da">
Mai multe articole despre php.<br>
<input name="3" type="checkbox" id="3" value="da">
Mai multe detalii despre comenzi.<br>
<input name="4" type="checkbox" id="4" value="da">
Mai multe despre MySQL.<br>
<input name="5" type="checkbox" id="5" value="da">
Mai multe despre baze de date.<br>
<input name="6" type="checkbox" id="6" value="da">
Mai multe despre baze de date in format txt.<br>
<input name="7" type="checkbox" id="7" value="da">
Altceva - si anume:<br>
<textarea name="8" id="8">scrie aici ce vrei sa gasesti sau
poti sa intrebi pe forum.</textarea>
<br><br>
<div align="left"><input type="reset" value="sterge"> <input
type="submit" value="expedieaza"> </div>
</form></td>
</tr>
</table>

prelucrare_chestionar.php
<html>
<head>
<title>Untitled Document</title>
/* Modul Prelucrare chestionar varianta 1 Creat la data de 08-01-2004
Copyright Alex - http://www.tutoriale.far-php.ro */

</head>
<body>
<?php
// Scripturi php freeware
$a=$_POST[1];
if ($a == "") {
$a = "nu";
}

169
Laborator Tehnologii Internet Lucrarea nr.7
// Mai multe articole despre php
$b=$_POST[2];
if ($b == "") {
$b = "nu";
}
// Mai multe detalii despre comenzi
$c=$_POST[3];
if ($c == "") {
$c = "nu";
}
// Mai multe despre MySQL
$d=$_POST[4];
if ($d == "") {
$d = "nu";
}
// Mai multe despre baze de date
$e=$_POST[5];
if ($e == "") {
$e = "nu";
}
// Mai multe despre baze de date in format txt
$f=$_POST[6];
if ($f == "") {
$f = "nu";
}
// Altceva - si anume:
$g=$_POST[7];
if ($g == "") {
$g = "nu";
}
// comentarii
$h=$_POST[8];
// in cazul in care campul 8 este gol sau scrie mesajul
pus initial atunci seteaza variabila ca "nu"
// altfel ea ramane asa cum este cu textul trimis de
utilizator
if (($h == "") or ($h == "scrie aici ce vrei sa gasesti
sau poti sa intrebi pe forum.")) {
$h = "nu";
}
// chestii utile
$browser = $_SERVER["HTTP_USER_AGENT"];
$timp = time ();
$ip = getenv ( "REMOTE_ADDR" );
$ip_name = gethostbyaddr ( $ip );
// diferenta de timp - in cazul in care ora de pe
server nu e corect setata
$hourdiff = "0";
$timeadjust = ($hourdiff * 60 * 60);
// cu - $timeadjust daca e in scadere sau cu +
$timeadjust daca trebuie sa creasca
$servdate = date("d-m-Y - H:m:s",time() -
$timeadjust);
// echo $servdate;

$headers = "MIME-Version: 1.0\r\nContent-type:


text/html; charset=iso-8859-2\r\n";
$continut = "\n
Ip $ip a completat chestionarul.\n

170
Laborator Tehnologii Internet Lucrarea nr.7
Campurile completate sunt:\n\n
$a - Scripturi php freeware.\n
$b - Mai multe articole despre php.\n
$c - Mai multe detalii despre comenzi.\n
$d - Mai multe despre MySQL.\n
$e - Mai multe despre baze de date.\n
$f - Mai multe despre baze de date in format txt.\n
$g - Altceva - si anume:\n
$h - Comentarii.\n\n
Mesajul a fost trimis la data de $servdate \n
Browser: $browser , host: $ip_name , ip: $ip \n
";
// ATENTIE!!! schimbati adresa de email cu adresa
voastra.
mail("antonpan2003@yahoo.com", "Mesaj de pe site",
"$continut", "$headers");
// afisare informatii
echo "<br><br>";
echo "Chestionarul completat de dvs. a fost trimis cu
informatiile de mai jos:<br><br>
$a - Scripturi php freeware.<br>\n
$b - Mai multe articole despre php.<br>\n
$c - Mai multe detalii despre comenzi.<br>\n
$d - Mai multe despre MySQL.<br>\n
$e - Mai multe despre baze de date.<br>\n
$f - Mai multe despre baze de date in format
txt.<br>\n
$g - Altceva - si anume:<br>\n
$h - Comentarii.<br><br>\n\n
Mesajul a fost trimis la data de $servdate <br>\n
Browser: $browser , host: $ip_name , ip: $ip <br>\n
";
echo "<br><br>";
echo "Va multumesc pentru informatii";
?>
</body>
</html

171
Laborator Tehnologii Internet Lucrarea nr.8

8 Formular de prelucrare a datelor din baza de date MySQL


8.1 Obiective
Realizarea unei baze de date MySQL;
Realizarea unui formular n php de introducere, prelucrare i vizualizare a
datelor din baza de date mai sus creat.

8.2 Realizarea bazei de date


Se verific dac aplicaia EasyPHP este pornit (serverul Apache i MySQL).
Se intr n phpMyAdmin (se deschide un browser internet i la adres se tasteaz
localhost/phpmyadmin/).
Se creeaz baza de date cu numele "formular" i apoi tabela "intrari", cu 6
coloane, i care are structura urmtoare:

Cmp Tip Null Extra


ID int(11) nu auto_increment
Nume char(60) nu
Prenume char(60) nu
Vrsta char(10) nu
e-mail char(100) nu
Observaii char(255) nu

n directorul rdcin al serverului Apache (EasyPHP), care este C:\Program


Files\EasyPHP 2.0b1\www, se creeaz un folder cu numele formular.
Cu ajutorul aplicaiei PHP Designer 2005 se creeaz un fiier cu numele
config.php care va fi salvat n directorul mai sus creat, i care va conine datele de
configurare la baza de date:
<?php
session_start();
set_time_limit(0);
error_reporting(E_ALL);
// Informatii baza de date
$AdresaBazaDate = "localhost";
$UtilizatorBazaDate = "root";
$ParolaBazaDate = "";
$NumeBazaDate = "formular";
$conexiune =
mysql_connect($AdresaBazaDate,$UtilizatorBazaDate,$ParolaBazaDate)
or die("Nu ma pot conecta la MySQL!");
mysql_select_db($NumeBazaDate,$conexiune) or die("Nu gasesc baza de
date!");
function addentities($data){
if(trim($data) != ''){
$data = htmlentities($data, ENT_QUOTES);
return str_replace('\\', '&#92;', $data);
} else return $data;
} // End addentities() --------------
?>

172
Laborator Tehnologii Internet Lucrarea nr.8
n continuare, se creeaz fiierul index.php, n care se introduce
urmtorul script:
<?php
require_once('config.php');
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['varsta'])) $_SESSION['varsta'] = '';
if(!isset($_SESSION['e-mail'])) $_SESSION['e-mail'] = '';
if(!isset($_SESSION['observatii'])) $_SESSION['observatii'] = '';
echo '<table width="310" border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="validare.php" method="post">
<tr>
<td height="36" colspan="3" valign="top"><h2>Formular</h2>Comentariul
nu trebuie sa
fie mai lung de 255 caractere.</td>
<td width="1"></td>
</tr>
<tr>
<td width="80" height="19" valign="top"> </td>
<td width="15" rowspan="10" valign="top"> </td>
<td width="214" valign="top"> </td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Nume:</td>
<td valign="top">
<input type="text" name="nume" value="'.$_SESSION['nume'].'"> </td>
<td></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Prenume:</td>
<td valign="top"><input type="text" name="prenume"
value="'.$_SESSION['prenume'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"><input type="text" size="3" maxLength="3"
name="varsta"
value="'.$_SESSION['varsta'].'"> ani</td>
<td></td>
</tr>
<tr>
<td height="10"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Email:</td>

173
Laborator Tehnologii Internet Lucrarea nr.8
<td valign="top"><input type="text" name="e-mail"
value="'.$_SESSION['e-mail'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="19" align="right" valign="top">Observatii:</td>
<td rowspan="2" valign="top"><textarea name="observatii" cols="30"
rows="5"
value="'.$_SESSION['observatii'].'">'.$_SESSION['observatii'].'</texta
rea></td>
<td></td>
</tr>
<tr>
<td colspan="2" rowspan="3" valign="top"> </td>
<td height="83"></td>
</tr>
<tr>
<td height="17" valign="top">
</td>
<td></td>
</tr>
<tr>
<td height="24"
valign="top"><input
name="Trimite" type="submit"
id="Trimite"
value="Trimite">
<input name="Reseteaza"
type="reset" id="Reseteaza"
value="Reseteaza"> </td>
<td></td>
</tr>
</form>
</table>';
?>
Rezultatul ar trebui s arate aa:

Interpretarea codului php:


if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
- dac nu este setat sesiunea nume, o setm ca fiind goal.
Aceast operaie se face pentru a evita afiarea unei erori php care ne va spune
cum c sesiunea nume nu exist, ceea ce este adevrat.
Analiznd HTML-ul observm cmpurile crora le-am atribuit numele
corespunztoare, i anume:

<td height="22" align="right" valign="top">Nume:</td>


<td valign="top">
<input type="text" name="nume" value="">
</td>

174
Laborator Tehnologii Internet Lucrarea nr.8
Acum c am realizat formularul, trebuie s i prelucrm datele prin $_POST i
s verificm coninutul acestora, apoi s l introducem n baza de date.
Se realizeaz un fiier cu numele validare.php i introducem codul de mai jos,
apoi testm n browser, se introduc date n formular i se apas butonul Trimite.
<?php
require_once('config.php');
$_SESSION['nume'] = $_POST['nume'];
$_SESSION['prenume'] = $_POST['prenume'];
$_SESSION['varsta'] = $_POST['varsta'];
$_SESSION['e-mail'] = $_POST['e-mail'];
$_SESSION['observatii'] = $_POST['observatii'];
echo 'Nume: '.$_SESSION['nume'].'<br>
Prenume: '.$_SESSION['prenume'].'<br>
Varsta: '.$_SESSION['varsta'].'<br>
Email: '.$_SESSION['e-mail'].'<br>
Comentariu: '.$_SESSION['observatii'].'<br><br>
Daca datele sunt corecte, apasati <a href="prelucrare.php">aici</a>
pentru a le valida
<br> si a le introduce in baza de date.';
?>

Ca noutate, observai c s-a folosit $_SESSION. Scopul unei sesiuni este de a


reine o informaie care s se menin de la o pagin la alta.
Pentru a seta o sesiune i a o menine de la o pagin la alta, este nevoie de a o
declara cu ajutorul unei funcii, i anume: session_start(); Aceast funcie se pune la
nceput de PAGINA, prima linie din script.
Pentru a distruge sesiunile, ne putem folosi de o funcie care va terge toate
sesiunile existente, i anume session_destory(); sau de declararea sesiunilor ca fiind
nule: $_SESSION[nume_sesiune] = ;
ntorcndu-ne la formularul nostru de nregistrare, ai vzut c valoarea
cmpurilor este o sesiune. Vom seta cte o sesiune pentru fiecare cmp, astfel nct s
pstrm datele scrise de el, iar dac utilizatorul completeaz greit cmpurile i este
redirecionat la pagina cu formularul, datele introduse de el vor aprea din nou n
formular, astfel nct el va putea s corecteze doar cmpurile n care a greit.

Dup ce am realizat cele dou fiiere, realizai nc unul cu numele


prelucrare.php, introducei codul de mai jos i testai din nou n browser.
<?php
require_once('config.php');
if(($_SESSION['nume'] == "") || ($_SESSION['prenume'] == "") ||
($_SESSION['varsta'] ==
"") || (!is_numeric($_SESSION['varsta'])) || ($_SESSION['e-mail'] ==
"") ||
($_SESSION['observatii'] == "") || (strlen($_SESSION[' observatii ']) >
255) )
{
echo 'Nu ai introdus date in formular sau cele introduse nu sunt
corecte. <br>
Apasa <a href="index.php">aici</a> pentru a te intoarce la pagina
anterioara.';
} else {
echo 'Va multumim. <br>
Datele au fost introduse cu succes in baza de date. <br>

175
Laborator Tehnologii Internet Lucrarea nr.8
Pentru vizualizare apasati <a href="vizualizare.php">aici</a>.';
$cerereSQL = "INSERT INTO `intrari` (`nume`, `prenume`, `varsta`, `e-
mail`,`observatii`)
VALUES ('".$_SESSION['nume']."', '".$_SESSION['prenume']."',
'".$_SESSION['varsta']."', '".$_SESSION['e-mail']."',
'".$_SESSION['observatii']."');";
mysql_query($cerereSQL);
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['e-mail'] = '';
$_SESSION['observatii'] = '';
}
?>
Dup ce ai testat n browser i ai trecut toi paii din formular, accesai
phpMyAdmin i vizualizai datele introduse n baza de date.

Explicaii din scriptul prelucrare.php:


Prima linie, require_once('config.php'); include fiierul config.php n care
sunt variabilele cu datele de conectare la baza de date.
n continuare avem condiiile if i else.
n condiia if, verificm dac s-au introdus date n formular, dac valoarea
cmpului vrsta este numeric, dac valoarea cmpului comentariu este mai
mare de 255 caractere.
o Construcia if este deschis i nchisa de parantezele rotunde ( ), iar n
interiorul acestora sunt conditiile:
($_SESSION['nume'] == "") = Dac valoarea cmpului nume este goal
...
(!is_numeric($_SESSION['varsta'])) = Dac valoarea cmpului vrsta nu este
numeric... (!is_numeric).
...
(strlen($_SESSION['comentariu']) > 255) = Dac valoarea cmpului comentariu este
mai mare de 255 caractere (strlen = numar de caractere n sir-ul dat).
Semunul || nseamn OR (sau logic)
n condiia else, afi textul, cum c datele au fost introduse n baza de date, i
efectum inserarea.

n continuare se va realiza un script prin care afim n browser datele introduse


n baza de date. Astfel, se realizeaz un fiier vizualizare.php n care se introduce
scriptul de mai jos:
<?php
require_once('config.php');
$cerereSQL = 'SELECT * FROM intrari';
$rezultat = mysql_query($cerereSQL);
while($rand = mysql_fetch_array($rezultat)) {
echo '<b>Nume:</b> '.$rand['nume'].' <br>
<b>Prenume:</b> '.$rand['prenume'].' <br>
<b>Varsta:</b> '.$rand['varsta'].' ani <br>
<b>Email:</b> '.$rand['e-mail'].' <br>
<b>Observatii:</b> '.$rand['observatii'].' <br><br>';
}
?>

176
Laborator Tehnologii Internet Lucrarea nr.8
Acest fiier va fi accesat astfel: http://localhost/formular/vizualizare.php
Se vor introduce mai multe nregistrri n baza de date, apelnd de fiecare dat
http://localhost/formular/index.php, i apoi se acceseaz
http://localhost/formular/vizualizare.php pentru a vedea rezultatele

8.3 Tem pentru acas:

S se creeze o baz de date ce conine cer urmtoarele cmpuri: nume (tipul


text), vrsta (tipul text), ora (tipul text), ocupaie (tipul text), codul numeric personal
(tipul text).
Cerine:
Realizai baza de date, verificai cmpurile (s fie obligatorii, cmpurile nume i
ora trebuie s conina numai litere, cmpul cod numeric personal s conin numai cifre
i s nu poat fie introduse mai mult de 13 caractere), introducei n baza de date
informaiile prelucrate prin formular i afiai-le in ordinea:
nume | ora | ocupaie | vrsta | cod numeric personal.

177
Laborator Tehnologii Internet Lucrarea nr.9

9 Sistem de nregistrare, autentificare i protecie


9.1 Obiective
Realizarea unei baze de date MySQL, care se va numi autentificare;
Realizarea unui formular n php de nregistrare i introducere a datelor n baza
de date , dup validarea acestora;
Realizarea unei pagini de autentificare;
Restricionarea unei pagini pentru utilizatorii neautentificai;
Realizarea unui panou de control n care utilizatorii nregistrai s-i poat
schimba datele personale i parola.

9.2 Realizarea bazei de date


Se verific dac aplicaia EasyPHP este pornit (serverul Apache i MySQL).
Se intr n phpMyAdmin (se deschide un browser internet i la adres se tasteaz
localhost/phpmyadmin/).
Se creeaz baza de date cu numele "autentificare" i apoi tabela "utilizatori",
cu 7 coloane, i care are structura urmtoare:

Cmp Tip Null Extra Cerine


ID int(11) nu auto_increment
utilizator char(60) nu
parola char(60) nu parola1 = parola2
nume char(30) nu Numai litere
prenume char(30) nu Numai litere
varsta char(3) nu Numai cifre
localitate char(30)

n directorul rdcin al serverului Apache (EasyPHP), care este C:\Program


Files\EasyPHP 2.0b1\www, se creeaz un folder cu numele autentificare.
n acest director vor trebui create 7 scripturi php, i anume:
config.php aici se gsesc datele de autentificare la baza de date este identic
cu cel de la laboratorul 7, dar trebuie modificate datele de identificare ale bazei
de date numele acesteie.
index.php pagina principal cu legturi ctre scripturile de nregistrare i
autentificare useri.
inregistrare.php script pentru nregistrare de noi utilizatori.
autentificare.php script pentru autentificare utilizatori.
pagina.php pagina accesibil numai utilizatorilor autentificai.
profil.php pagina pentru modificare date personale.
iesire.php pagina pentru ieire din sistem.

178
Laborator Tehnologii Internet Lucrarea nr.9

9.3 Scriptul de nregistrare


Dup ce s-au modificat datele
din config.php, se creeaz fiierul
inregistrare.php care va conine
urmtorul script:

<?php
require_once('config.php');

if(!isset($_GET['actiune']))
$_GET['actiune'] = '';
if(!isset($_SESSION['user']))
$_SESSION['user'] = '';
if(!isset($_SESSION['parola1'])) $_SESSION['parola1'] = '';
if(!isset($_SESSION['parola2'])) $_SESSION['parola2'] = '';
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['varsta'])) $_SESSION['varsta'] = '';
if(!isset($_SESSION['localitate'])) $_SESSION['localitate'] = '';

switch($_GET['actiune'])
{
case '':
echo '<table width="309" border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="inregistrare.php?actiune=validare"
method="post">
<tr>
<td height="36" colspan="4" valign="top"><h1>Formular inregistrare
</h1></td>
</tr>
<tr>
<td width="80" height="19" valign="top">&nbsp;</td>
<td width="15" rowspan="5" valign="top"></td>
<td width="144" valign="top">&nbsp;</td>
<td width="70" valign="top">&nbsp;</td>
</tr>
<tr>
<td height="22" align="right" valign="top">Utilizator:</td>
<td colspan="2" valign="top">
<input type="text" name="user" value="'.$_SESSION['user'].'">
</td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Parola:</td>

179
Laborator Tehnologii Internet Lucrarea nr.9
<td colspan="2" valign="top"><input type="password" name="parola1"
value="'.$_SESSION['parola1'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="38" align="right" valign="top">Reintroduceti<br>
Parola:</td>
<td>&nbsp;</td>
<td align="middle" valign="middle"><input type="password"
name="parola2" value="'.$_SESSION['parola2'].'"></td>
<td>&nbsp;</td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="19" align="right">Nume:</td>
<td>&nbsp;</td>
<td colspan="2" valign="top"><input type="text" name="nume"
value="'.$_SESSION['nume'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right">Prenume:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="prenume"
value="'.$_SESSION['prenume'].'"></td>
</tr>
<tr>
<td height="8"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" size="3"
maxLength="3" name="varsta" value="'.$_SESSION['varsta'].'">
ani</td>
</tr>
<tr>
<td height="15"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>

180
Laborator Tehnologii Internet Lucrarea nr.9
<tr>
<td height="22" align="right" valign="top">Localitate:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="localitate"
value="'.$_SESSION['localitate'].'"></td>
</tr>
<tr>
<td height="19">&nbsp;</td>
<td valign="top"></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td height="24">&nbsp;</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input name="Trimite" type="submit"
id="Trimite" value="Trimite">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
</tr>
<tr>
<td height="24">&nbsp;</td>
<td valign="top"></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</form>
</table>';
break;

case 'validare':
$_SESSION['user'] = $_POST['user'];
$_SESSION['parola1'] = $_POST['parola1'];
$_SESSION['parola2'] = $_POST['parola2'];
$_SESSION['nume'] = $_POST['nume'];
$_SESSION['prenume'] = $_POST['prenume'];
$_SESSION['varsta'] = $_POST['varsta'];
$_SESSION['localitate'] = $_POST['localitate'];

if(($_SESSION['user'] == '') || ($_SESSION['parola1'] == '') ||


($_SESSION['parola2'] != $_SESSION['parola1']) || ($_SESSION['nume']
== '') || ($_SESSION['prenume'] == '') || ($_SESSION['varsta'] == '')
|| (!is_numeric($_SESSION['varsta'])) || (strlen($_SESSION['varsta'])
< 2) || ($_SESSION['localitate'] == ''))
{
echo 'Nu ai introdus date in formular sau cele introduse nu sunt
corecte. <br>
Apasa <a href="inregistrare.php">aici</a> pentru a te intoarce
la pagina anterioara.';
}
else
{
echo 'Va multumim. <br>
Datele au fost introduse cu succes in baza de date. <br>
Pentru a va autentifica apasati <a
href="autentificare.php">aici</a>.';

$cerereSQL = "INSERT INTO `utilizatori` (`utilizator`, `parola`,


`nume`, `prenume`, `varsta`, `localitate`)

181
Laborator Tehnologii Internet Lucrarea nr.9
VALUES ('".addentities($_SESSION['user'])."',
'".md5($_SESSION['parola1'])."', '".addentities($_SESSION['nume'])."',
'".addentities($_SESSION['prenume'])."',
'".addentities($_SESSION['varsta'])."',
'".addentities($_SESSION['localitate'])."')";
mysql_query($cerereSQL);

$_SESSION['user'] = '';
$_SESSION['parola1'] = '';
$_SESSION['parola2'] = '';
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['localitate'] = '';
}
break;
}
?>

9.3.1 Explicarea scriptului


inregistrare.php
Ca o a II-a linie din script, observm linia if(!isset($_GET['actiune']))
$_GET['actiune'] = ''; Aceast linie, dac nu gsete $_GET[actiune] ca fiind setat,
o va seta. La fel i restul:
if(!isset($_SESSION['user'])) $_SESSION['user'] = '';
if(!isset($_SESSION['parola1'])) $_SESSION['parola1'] = '';
if(!isset($_SESSION['parola2'])) $_SESSION['parola2'] = '';
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['varsta'])) $_SESSION['varsta'] = '';
if(!isset($_SESSION['localitate'])) $_SESSION['localitate'] = '';

Observm construcia if, care are ca i condiie negativ (!) o funcie isset (se
folosete numai pentru a verifica dac o variabil exist, returneaz adevrat atunci cnd
o gsete i fals atunci cnd nu o gsete). Prin urmare, cu aceast construcie if..
verificm dac $_GET[actiune] este setat, dac nu, o setm noi.
n continuare, uitndu-ne peste script, observm construcia switch. Am folosit
aceasta pentru a implementa mai multe aciuni ntr-o singur pagin.
Dup cum vedem, primul case este null, ceea ce nseamn c se execut scriptul
pentru pagina curenta .php.
Avem un formular n care sunt 7 cmpuri: utilizator, parola, reintroducerea
parolei, nume, prenume, vrsta i localitate.
Daca va uitai ateni, o s observai c n valoarea cmpurilor avem declarate
nite sesiuni:
<input type="text" name="user" value="'.$_SESSION['user'].'">

Sesiunile au fost explicate n laboratorul anterior.

Vom seta cte o sesiune pentru fiecare cmp, astfel nct s pstrm datele scrise
de el, iar dac utilizatorul completeaz greit cmpurile i este redirecionat la pagina cu
formularul, datele introduse de el vor aprea din nou n formular, astfel nct el va putea
s corecteze doar cmpurile n care a greit.

182
Laborator Tehnologii Internet Lucrarea nr.9
Ca aciune a formularului este setat inregistrare.php?actiune=validare
Acest case l gsii la linia 119.
Dup cum vedei, avem declarate sesiunile de care ne vom folosi n valoarea
cmpurilor din formular, i anume:
$_SESSION['user'] = $_POST['user'];

Valoarea acestei sesiuni user, este valoarea POST cu numele user, i tot aa.
n urmtoarele linii de cod avem structura if i else cu condiiile necesare, iar
dac condiiile nu sunt adevrate, ne rezult eroarea, dac sunt acceptate, rezult
mesajul de mulumire i inserarea n baza de date, apoi setarea sesiunilor folosite ca
fiind nule.
Dup acest case cu numele 'validare', vom nchide structura switch, respectiv
scriptul php.
Observm ca la introducerea n baza de date am complicat procedeul.
Motivul este pentru a ne proteja de procedeul numit SQL INJECTION.
Aceasta operaiune se folosete pentru a introduce vulnerabiliti n comanda
care trimite datele la baza de date (comanda query) i cu ajutorul acestora, se poate
pcli cu uurin baza de date.
Pentru a proteja datele care se introduc prin formular, ne-am folosit de o funcie,
i anume: addentities();

9.3.2 Exemplu de script de atac:


SELECT * FROM `tabela` WHERE camp = 'orice' OR 'x'='x';
Observai c utilizatorul poate pcli comanda SQL, introducnd ca VALOARE
a cmpului: orice' OR 'x'='x, astfel nct comanda SQL se va modifica. Funcia
addlentities(); va transforma caracterele speciale din html n coduri.
Exemplu: din codul html <html> ne va rezulta &lt;html&gt; sau dac
utilizatorul introduce sau n cmpul innput, acestea se vor transforma n: &#039; sau
&quot; . . .
Protecia cu aceast funcie se face pentru ca atunci cnd citim din baza de date
un cod html, s nu fie interpretat de ctre browser ci, doar s fie afiat.
Aplicaie experimental:
Punei intr-un fiier test.php codul: echo"<html>" i apoi punei i
echo"&lt;html&gt"; testai i observai rezultatul.

Urmtoarea noutate din comanda noastr SQL este funcia md5();


Aceasta funcie am folosit-o pentru a coda parola noastr i astfel a o introduce
n baza de date, neputnd fi decodat de ctre nimeni.
md5 este o funcie PHP care codeaz o parol n mod teoretic ireversibil:
<?php
$parola = 'parola';
echo md5($parola);
?>
Punei acest cod ntr-un fiier md5.php apoi testai i vei observa urmtorul
rezultat: 8287458823facb8ff918dbfabcd22ccb

183
Laborator Tehnologii Internet Lucrarea nr.9
9.3.3 Funcii n PHP
O funcie este folosit pentru a separa codul care realizeaz un singur task bine
definit. Acest lucru face codul mai lizibil i ne permite s l reutilizm de fiecare dat
cnd trebuie s efectum acelai task.
Argumentele unei funcii trebuie separate prin virgul, i, implicit, acestea sunt
transmise prin valoare. Pentru ca funcia s returneze un rezultat se folosete construcia
return care primete ca parametru o expresie care reprezint valoarea funciei. n
momentul n care este ntlnit construcia return, execuia funciei se ncheie.
n PHP sunt foarte multe funcii predefinite, ns putei s v concepei i
propriile funcii.
Apelul unei funcii se face: nume_functie();
Majoritatea funciilor necesit unul sau mai muli parametrii informaii oferite
funciei atunci cnd este apelat i care influeneaz rezultatul execuiei funciei
Apelul unei funcii cu parametru se realizeaz astfel:
nume_functie($parametru);
Dac ncercai s apelai o funcie care nu exist, vei primi un mesaj de eroare.

9.3.4 Exemple de creare funcii:


<?php
function functie_nume($nume) {
$prenume = 'Vasile';
return $nume.' '.$prenume;
}
echo functie_nume('Popescu');
?>

n exemplul urmtor se calculeaz cu ajutorul unei funcii PHP, ptratul unui


numr.
<?php
function patrat($n) {
return $n * $n;
}
echo '4^2 = <b> '.patrat(4).' </b>';
?>
Observai c am atribuit valoarea 4 funciei noastre cu numele patrat, iar
rezultatul apelrii acesteia este calculul din interiorul funciei: return $n * $n; adic
returneaz 4 x 4, care ne d 16.

9.4 Scriptul de autentificare


La fel ca si la scriptul de nregistrare,
observm setarea $_GET[actiune] ca fiind nul,
apoi deschiderea structurii switch.
n case null avem formularul de autentificare ce cuprinde 2 cmpuri: utilizator i
parol.
n case validare, avem sesiunea user cu valoarea postului user urmat de
construcia if i else cu condiiile aferente.
Fiierul autentificare.php conine:
<?php
require_once('config.php');
184
Laborator Tehnologii Internet Lucrarea nr.9

if(!isset($_GET['actiune'])) $_GET['actiune'] = '';

switch($_GET['actiune'])
{
case '':
echo '<form action="autentificare.php?actiune=validare" method="post">
Utilizator: <input type="text" name="user" value=""><br>
Parola: <input type="password" name="parola" value=""><br>
<input type="submit" name="Login" value="Login">
</form>';
break;

case 'validare':

$_SESSION['user'] = $_POST['user'];

if(($_POST['user'] == '') || ($_POST['parola'] == ''))


{
echo 'Completeaza casutele. <Br>
Apasati <a href="autentificare.php">aici</a> pentru a va intoarce la
pagina precedenta.';
}
else
{
$cerereSQL = "SELECT * FROM `utilizatori` WHERE
utilizator='".htmlentities($_POST['user'])."' AND
parola='".md5($_POST['parola'])."'";
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) == 1)
{
while($rand = mysql_fetch_array($rezultat))
{
$_SESSION['logat'] = 'Da';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=pagina.php">';
}
}
else
{
echo 'Date incorecte. <Br>
Apasati <a href="autentificare.php">aici</a> pentru a va
intoarce la pagina precedenta.';
}
}
break;
}
?>

n aceasta construcie else, avem selectarea din baza de date unde cmpul
utilizator este egal cu POST user, iar parola este egal cu criptarea parolei pentru POST
parola.
Dac numrul de rnduri rezultate este 1, atunci setm o sesiune cu numele logat
i valoarea Da, apoi redirecionm - cu ajutorul etichetei HTML meta refresh ctre
pagina utilizatorului.
Dac numrul de rnduri rezultate nu este 1, atunci afim un mesaj de eroare.
n cazul n care rezultatele au fost gsite n baza de date, autentificarea s-a
efectuat cu succes i vom fi redirecionai n pagina.php
185
Laborator Tehnologii Internet Lucrarea nr.9
9.5 Scriptul pagina utilizator pagina.php
<?php
require_once('config.php');

if(!isset($_SESSION['logat'])) $_SESSION['logat'] = 'Nu';


if($_SESSION['logat'] != 'Da')
{
echo 'Pentru a accesa aceasta pagina, trebuie sa va autentificati.
<br>
Pentru a va autentifica, apasati <a href = "autentificare.php">
aici</a><br>
Pentru a va inregistra, apasati <a href = "inregistrare.php">
aici</a>';
}
else
{
echo 'Bine ai venit, <b><i>'.$_SESSION['user'].'</b></i>!<br><br>
<a href="profil.php">Schimba date personale</a><br><br>
<a href="iesire.php">Iesire</a>';
}
?>

Observam ca avem o construcie if i else.


Dac sesiunea cu numele logat nu are valoarea Da executm o bucl de cod,
dac sesiunea logat are valoarea Da, executm pagina pentru utilizator.
S ne reamintim c aceast sesiune $_SESSION[logat] == Da; a fost setat
atunci cnd autentificarea s-a realizat cu succes.
Accesai http://localhost/autentificare/pagina.php, fr s v autentificai, i vei
observa mesajul de eroare, apoi autentificai-v i vei observa pagina utilizatorului.
Din aceast pagin, v
putei schimba datele personale
precum i parola, iar apoi putei
s ieii din sistem folosind link-
ul ieire.

9.6 Scriptul profil.php


<?php
require_once('config.php');

if(!isset($_GET['actiune'])) $_GET['actiune'] = '';


if(!isset($_SESSION['logat'])) $_SESSION['logat'] = 'Nu';

if($_SESSION['logat'] != 'Da')
{
echo 'Pentru a accesa aceasta pagina, trebuie sa va autentificati.
<br>
Pentru a va autentifica, apasati <a href="autentificare.php">
aici</a><br>
Pentru a va inregistra, apasati <a href="inregistrare.php">
aici</a>';
}
else
{
switch($_GET['actiune'])
186
Laborator Tehnologii Internet Lucrarea nr.9
{
case '':
echo '<h1>Profilul dumneavoastra</h1>
Apasati <a href="profil.php?actiune=date_personale">aici</a>
pentru a schimba datele personale.<br>
Apasati <a href="profil.php?actiune=parola">aici</a> pentru a
schimba parola dumneavoastra.<br><br>
<a href="pagina.php">Intoarceti`va la pagina principala.</a>';
break;

case 'date_personale':
$cerereSQL = 'SELECT *
FROM `utilizatori` WHERE
utilizator="'.$_SESSION['u
ser'].'"';
$rezultat =
mysql_query($cerereSQL);
while($rand =
mysql_fetch_array($rezulta
t))
{
echo '<table width="347"
border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="profil.php?actiune=validare"
method="post">
<tr>
<td height="50" colspan="4" valign="top"><h1>Modifica date
personale</h1></td>
</tr>
<tr>
<td width="80" height="19">&nbsp;</td>
<td width="15">&nbsp;</td>
<td width="214">&nbsp;</td>
<td width="38">&nbsp;</td>
</tr>

<tr>
<td height="10"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Nume:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="nume"
value="'.$rand['nume'].'"></td>
<td></td>
</tr>
<tr>
<td height="9"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Prenume:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="prenume"
value="'.$rand['prenume'].'"></td>

187
Laborator Tehnologii Internet Lucrarea nr.9
<td></td>
</tr>
<tr>
<td height="9"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Varsta:</td>
<td valign="top"></td>
<td valign="top"><input type="text" size="3" maxLength="3"
name="varsta" value="'.$rand['varsta'].'">
ani</td>
<td></td>
</tr>
<tr>
<td height="8"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Localitate:</td>
<td valign="top"></td>
<td valign="top"><input type="text" name="localitate"
value="'.$rand['localitate'].'"></td>
<td></td>
</tr>
<tr>
<td height="14"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="24"></td>
<td valign="top"></td>
<td valign="top"><input name="Trimite" type="submit" id="Trimite"
value="Modifica date">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
<td></td>
</tr>
<tr>
<td height="19"></td>
<td valign="top"></td>
<td>&nbsp;</td>
<td></td>
</tr>
</form>
</table>';
}
break;

case 'parola':

echo '<table width="309" border="0" cellpadding="0" cellspacing="0">

188
Laborator Tehnologii Internet Lucrarea nr.9
<form name="formular" action="profil.php?actiune=validare"
method="post">
<tr>
<td height="36" colspan="4" valign="top"><h1>Modifica
parola</h1></td>
</tr>
<tr>
<td width="80" height="19" valign="top">&nbsp;</td>
<td width="15" rowspan="5" valign="top"></td>
<td width="144" valign="top">&nbsp;</td>
<td width="70" valign="top">&nbsp;</td>
</tr>
<tr>
<td height="22" align="right" valign="top">Parola:</td>
<td colspan="2" valign="top">
<input type="password" name="parola1" value=""> </td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Reintroduceti
parola:</td>
<td colspan="2" valign="middle"><input type="password"
name="parola2" value=""></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="24">&nbsp;</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input name="Trimite" type="submit"
id="Trimite" value="Modifica parola">
<input name="Reseteaza" type="reset" id="Reseteaza"
value="Reseteaza"> </td>
</tr>
<tr>
<td height="24">&nbsp;</td>
<td valign="top"></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</form>
</table>';
break;

case 'validare':

if(!isset($_POST['parola1'])) $_SESSION['parola1'] = '';


else $_SESSION['parola1'] = $_POST['parola1'];

if(!isset($_POST['parola2'])) $_SESSION['parola2'] = '';


else $_SESSION['parola2'] = $_POST['parola2'];

189
Laborator Tehnologii Internet Lucrarea nr.9
if(!isset($_POST['nume'])) $_SESSION['nume'] = '';
else $_SESSION['nume'] = $_POST['nume'];

if(!isset($_POST['prenume'])) $_SESSION['prenume'] = '';


else $_SESSION['prenume'] = $_POST['prenume'];

if(!isset($_POST['varsta'])) $_SESSION['varsta'] = '';


else $_SESSION['varsta'] = $_POST['varsta'];

if(!isset($_POST['localitate'])) $_SESSION['localitate'] = '';


else $_SESSION['localitate'] = $_POST['localitate'];

if(($_POST['Trimite'] == 'Modifica date') && ($_SESSION['nume'] == ''


|| $_SESSION['prenume'] == '' || $_SESSION['varsta'] == '' ||
!is_numeric($_SESSION['varsta']) || strlen($_SESSION['varsta'] < 2) ||
$_SESSION['localitate'] == ''))
{
echo 'Completeaza campurile.<br>
Apasa <a href="profil.php?actiune=date_personale">aici</a>
pentru a te intoarce.';
}
elseif(($_POST['Trimite'] == 'Modifica date') && ($_SESSION['nume'] !=
'' || $_SESSION['prenume'] != '' || $_SESSION['varsta'] != '' ||
is_numeric($_SESSION['varsta']) || strlen($_SESSION['varsta'] >= 2) ||
$_SESSION['localitate'] != ''))
{
echo 'Datele au fost modificate. <br>
Apasa <a href="pagina.php">aici</a> pentru a te intoarce la
pagina principala.';
$cerereSQL = "UPDATE `utilizatori` SET
nume='".addentities($_SESSION['nume'])."',
prenume='".addentities($_SESSION['prenume'])."',
varsta='".addentities($_SESSION['varsta'])."',
localitate='".addentities($_SESSION['localitate'])."' WHERE
utilizator='".$_SESSION['user']."'";
mysql_query($cerereSQL);

$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['varsta'] = '';
$_SESSION['localitate'] = '';
}
elseif(($_POST['Trimite'] == 'Modifica parola') &&
($_SESSION['parola1'] == '' || $_SESSION['parola1'] !=
$_SESSION['parola2']))
{
echo 'Completeaza campurile.<br>
Apasa <a href="profil.php?actiune=parola">aici</a> pentru a te
intoarce.';
}
elseif(($_POST['Trimite'] == 'Modifica parola') &&
($_SESSION['parola1'] != '' || $_SESSION['parola1'] ==
$_SESSION['parola2']))
{
echo 'Parola a fost modificata. <br>
Apasa <a href="pagina.php">aici</a> pentru a te intoarce la
pagina principala.';

190
Laborator Tehnologii Internet Lucrarea nr.9
$cerereSQL = "UPDATE `utilizatori` SET
parola='".md5($_SESSION['parola1'])."' WHERE
utilizator='".$_SESSION['user']."'";
mysql_query($cerereSQL);

$_SESSION['parola1'] = '';
$_SESSION['parola2'] = '';
}
break;
}
}
?>

i n acest script, la fel ca i n celelalte, ne-am folosit de construcia switch i


case.
n case null, avem legturile ctre urmtoarele case unde vom avea formularele
de prelucrare a datelor existente utilizatorului autentificat.
n case date_personale: selectm tot din baza de date unde utilizator este egal
cu utilizatorul autentificat. Dac conexiunea returneaz rezultate, executm formularul
de prelucrare a datelor, iar n cmpul value al fiecrui input vom seta ca valoare cmpul
din baza de date aferent acelui input.

Exemplu:
<input type="text" name="nume" value="'.$rand['nume'].'">

Observai c acest case, precum i cel de modificare parol, se folosete de


aceeai aciune, respectiv: profil.php?actiune=validare
Da, este posibil deoarece am setat 2 valori diferite pentru cele 2 formulare:
pentru formularul cu date am setat ca valoare: Modifica date iar pentru cel cu
parola am setat Modifica parola, apoi, n funcie de ce buton era apsat, am
realizat condiiile if.

9.7 Scriptul iesire.php


Acest script conine funciile ce golesc i distrug sesiunile.

<?php
session_start();
session_destroy();
session_unset();
echo 'Ati iesit din sistem. <br>
Pentru a va intoarce la pagina principala, apasati
<a href="index.php">aici</a>';
?>

191
Laborator Tehnologii Internet Lucrarea nr.10

10 Realizarea unui formular de contact


10.1 Obiective
Realizarea unei pagini php care s conin un formular de contact pentru trimis
date prin e-mail;
Realizarea unei pagini php de prelucrare i trimitere a mesajului.

Formularul trebuie s aib cinci cmpuri (care sunt obligatorii), i anume:


e-mail;
nume doar litere;
prenume doar litere;
subiect;
mesaj.

10.2 Mod de lucru:


n directorul www al serverului Apache se creeaz directorul contact n care se
salveaz fiierul index.php creat cu PHPDesing2005, i care va conine urmtorul
script:

<html>
<head>
<title>Formular de contact</title>
</head>
<body>
<form action="trimite.php" method="post">

E-Mail: <input type="text" name="email" value=""> <br>


Nume: <input type="text" name="nume" value=""> <br>
Prenume: <input type="text" name="prenume" value=""> <br>
Subiect: <input type="text" name="subiect" value=""> <br>
Mesaj: <textarea name="mesaj" cols="60" rows="6"></textarea>

<br><br>
<input type="submit" name="Trimite" value="Trimite">
<input type="reset" name="Reseteaza" value="Reseteaza">
</form>
</body>
</html>
Se salveaz i se vizualizeaz n browser accesand
http://localhost/contact/index.php.

Se creaz un fiier numele trimite.php n care se introduce codul de mai jos:


<?php
if(($_POST['email'] == '') || ($_POST['nume'] == '') ||
(is_numeric($_POST['nume'])) ||
($_POST['prenume'] == '') || (is_numeric($_POST['prenume'])) ||
($_POST['subiect'] == '')
|| ($_POST['mesaj'] == ''))
{

192
Laborator Tehnologii Internet Lucrarea nr.10
echo 'Completati campurile corect <br>
Apasati <a href="index.php">aici</a> pentru a va intoarce la
pagina principala.';
}
else
{
$catre = 'adresaemail@yahoo.com';
$data_trimitere = date('d-m-Y H:i:s');
$subiect = $_POST['subiect'];
$mesaj = '
<html>
<head>
<title>Formular de Contact</title>
</head>
<body>
<p><tt>Data trimitere: '.$data_trimitere.' </tt></p>
<table>
<tr>
<td><tt> Nume: '.$_POST['nume'].' </tt></td>
</tr>
<tr>
<td><tt> Prenume: '.$_POST['prenume'].' </tt></td>
</tr>
<tr>
<td><tt> E-Mail: <a href="mailto:'.$_POST['email'].'"> '.$_POST
['email'].'</a> </tt></td>
</tr>
<tr>
<td><tt> Mesaj: <br><br> '.$_POST['mesaj'].' </tt></td>
</tr>
</table>
</body>
</html>';
$headere = "MIME-Version: 1.0\r\n";
$headere .= "Content-type: text/html; charset=iso-88591\r\n";
headere .= "From: ".$_POST['nume']."
".$_POST['prenume']."<".$_POST['email'].">\r\n";
mail($catre, $subiect, $mesaj, $headere);
echo 'Mesajul a fost trimis';
}
?>
Modificai adresa de email din variabila $catre ='adresaemail@yahoo.com';
cu email-ul dvs.
Pentru a face acest script s trimita mail, este aveti nevoie de un server SMTP,
un server de E-Mail.
V recomand serverul QK care poate fi descrcat de la adresa
http://www.qksoft.com/ Dup ce ai instalat serverul i l-ati pornit, ar trebui s v apar
n bara de start de lnga ceas.
Testai scriptul i verificai email-ul dvs pentru a vedea dac ai primit mesajul.
(n caz c nu apare n Inbox, uitai-v n Bulk).
Observai c n scriptul trimite.php ne-am folosit de condiiile if i else (condiii
pe care deja le tiam) ns am folosit i 2 noi functii, i anume: date(); i mail();

193
Laborator Tehnologii Internet Lucrarea nr.10

10.2.1 Funcia date();


Aceast funcie returneaz un string ce conine data. Acestei funcii i se pot
atribui parametrii, parametrii ce semnific formatul de afiare a datei.
Aceast funcie returneaz datele n englez, pentru a returna n romn, trebuie
s v facei propria funcie.
Exemple de folosire a funciei date();
Realizai un fiier cu numele data.php i introducei codul de mai jos:
<?php
$data = date("d.m.Y");
echo 'Data curenta este: '.$data.'';
?>
Salvai i vizualizai n browser http://localhost/contact/data.php.
i aa mai departe, v putei juca cu funcia date i parametrii ei pentru a
obine rezultatele dorite:
<?php
$data = date("d.m.Y");
$ora = date("H:i:s");
echo 'Data curenta este: '.$data.' si ora '.$ora.'';
?>

10.2.2 Functia mail();


Dup cum vedei n scriptul trimite.php, ne-am folosit de aceast funcie PHP
pentru a trimite datele culese din formular n email-ul nostru.
Un simplu exemplu de folosire ar fi urmtorul:
<?php
mail("adresamail@yahoo.com", "Subiectul meu", "Line 1\nLine 2\nLine
3");
?>

194
Laborator Tehnologii Internet Lucrarea nr.10
Pentru ca trimiterea mail-ului s se fac mai rapid i mai uor i s fie mai uor
de interpretat de ctre serverul de email i client, trebuie s i definim parametrii pentru
headere.
<?php
mail("adresamail@yahoo.com", "Subiectul", "Mesajul",
"From: adresamail@gmail.com\r\n" . "Reply-To:
adresamail@hotmail.com\r\n"."X-Mailer: PHP/"
. phpversion());
?>

Acum, analiznd exemplul nostru de trimitere email din scriptul trimite.php,


observm c de fapt nu este aa greu precum pare, ci chiar este foarte uor:
Dup cum vedei, am declarat nite variabile:
$catre = 'adresamail@yahoo.com'; // adresa de email unde primim informaiile
$data_trimitere = date('d-m-Y H:i:s'); // data la care mesajul a fost trimis
$subiect = $_POST['subiect']; // subiectul (pe care l-a completat utilizatorul n
form)

Apoi avem variabila $mesaj ce conine ca valoare un cod HTML cu datele


trimise prin formular i variabila $data_trimitere.
i, ca ultim alctuire, avem headerele i funcia mail ce conine variabilele
setate mai sus.
mail($catre, $subiect, $mesaj, $headere);

195
Laborator Tehnologii Internet Lucrarea nr.11

11 Sistem de cutare n baza de date


11.1 Obiective
Realizarea unei baze de date mysql cu urmtoarele cmpuri: ID, titlu, adresa,
descriere, vizite;

Tabela bazei de date trebuie s aib cinci cmpuri (care sunt obligatorii), i
anume:
id - int(11), not-null, auto_increment ;
titlu varchar(255), not-null, cu minim 2 caractere, cel mult 255;
adresa varchar(255), not-null, cu minim 2 caractere, cel mult 255;
descriere varchar(255), not-null, cu minim 2 caractere, cel mult 255;;
vizite bigint(10), not-null, default = 0.

11.2 Mod de lucru:


n primul rnd, vom crea baza de date cautare care va avea tabela intrari cu 5
cele coloane i cu proprietile acestora, prezentate mai sus.
Vom crea apoi, n directorul rdcin al serverului C:\Program Files\EasyPHP
2.0b1\www directorul numit cautare.
n acesta vom crea fiierul config.php n care introducem codul de mai jos
(identic cu celelalte fiiere config.php utilizate n laboratoarele anterioare):

<?php
session_start();
set_time_limit(0);
error_reporting(E_ALL);

// Informatii baza de date


$AdresaBazaDate = "localhost";
$UtilizatorBazaDate = "root";
$ParolaBazaDate = "";
$NumeBazaDate = "cautare";

$conexiune =
mysql_connect($AdresaBazaDate,$UtilizatorBazaDate,$ParolaBazaDate) or
die("Nu ma pot conecta la MySQL!");
mysql_select_db($NumeBazaDate, $conexiune) or die("Nu gasesc baza de
date!");

function addentities($data){
if(trim($data) != ''){
$data = htmlentities($data, ENT_QUOTES);
return str_replace('\\', '&#92;', $data);
} else return $data;
} // End addentities() --------------
?>

196
Laborator Tehnologii Internet Lucrarea nr.11
n continuare se realizeaz fiierul index.php n care se introduce codul de mai
jos, i se vizualizeaz n browser.
<?php
echo '<a href="adauga.php">Adauga site</a> | <a href="cauta.php">Cauta
site</a>';
?>

11.2.1 Fiierul adauga.php


Pagina index.php va avea dou legturi ctre paginile adauga.php i
cauta.php. n continuare vom realiza pagina adauga.php n care introducem codul de
mai jos:
<?php
require_once 'config.php';

if(!isset($_GET['pag'])) $_GET['pag'] = '';


if(!isset($_SESSION['titlu'])) $_SESSION['titlu'] = '';
if(!isset($_SESSION['adresa'])) $_SESSION['adresa'] = '';
if(!isset($_SESSION['descriere'])) $_SESSION['descriere'] = '';

switch($_GET['pag'])
{
case '':
echo '<form name="adauga" action="adauga.php?pag=verifica"
method="post">
Titlu: <br> <input type="text" name="titlu"
value="'.$_SESSION['titlu'].'"><br><br>
Adresa: <br> <input type="text" name="adresa"
value="'.$_SESSION['adresa'].'"><br><br>
Descriere: <br> <textarea name="descriere" rows="6" cols="45"
value="'.$_SESSION['descriere'].'">'.$_SESSION['descriere'].'</texta
rea><br><br>
<input type="submit" name="Adauga" value="Adauga">
</form>';
break;

case 'verifica':

$_SESSION['titlu'] = $_POST['titlu'];
$_SESSION['adresa'] = $_POST['adresa'];
$_SESSION['descriere'] = $_POST['descriere'];

if(($_SESSION['titlu'] == '') || (strlen($_SESSION['titlu']) < 2) ||


(strlen($_SESSION['titlu']) > 255) || ($_SESSION['adresa'] == '') ||
(strlen($_SESSION['adresa']) < 2) || (strlen($_SESSION['adresa']) >
255) || ($_SESSION['descriere'] == '') ||
(strlen($_SESSION['descriere']) < 2) ||
(strlen($_SESSION['descriere']) > 255))
{
echo 'Completeaza corect campurile. <br>
Vezi daca: ai completat campurile, daca ai scris mai
mult de 2 caractere si mai putin de 255<br><br>
Apasa <a href="adauga.php">aici</a> pentru a te intoarce.';
} else
{

197
Laborator Tehnologii Internet Lucrarea nr.11
$cerereSQL = "INSERT INTO `intrari` (`titlu`, `adresa`,
`descriere`)
VALUES ('".addentities($_SESSION['titlu'])."',
'".addentities($_SESSION['adresa'])."',
'".addentities($_SESSION['descriere'])."');";
mysql_query($cerereSQL);

$_SESSION['titlu'] = '';
$_SESSION['adresa'] = '';
$_SESSION['descriere'] = '';

echo 'Am introdus datele in baza de date. <br>


Apasa <a href="index.php">aici</a> pentru a te intoarce la
pagina principala.';
}
break;
}
?>

Formularul prin care vom aduga date n baza de date.


Privind codul putem deduce:
instruciunea switch i case este folosit pentru a delimita paginile;
instruciunea if i else pentru a condiiona rezultatele.

n case-ul default, case ' ':, avem formularul cu cmpurile: titlu, adresa,
descriere iar ca valoare a acestora avem setate sesiunile corespunztoare lor.
n case-ul 'verific', observm setarea sesiunilor cu date trimise de utilizator
prin metoda $_POST, instruciunea if, n care avem condiiile, apoi instruciunea else ce
va executa introducerea n baza de date, golirea sesiunilor folosite i afiarea unui text
n pagin.
Ca protecie a introducerii datelor, s-a folosit funcia addentities().
Introducei cteva adrese n baza de date, pentru a testa cutarea.

198
Laborator Tehnologii Internet Lucrarea nr.11
11.2.2 Fiierul cauta.php
Scriptul pentru pagina cauta.php :

<?php
require_once 'config.php';

if(!isset($_GET['pag'])) $_GET['pag'] = '';


switch($_GET['pag']) {

case '':
echo '<form name="cauta" action="cauta.php?pag=cauta" method="post">
Titlu: <input type="text" name="cauta" value=""> <input
type="submit" name="Cauta" value="Cauta"> <br>
<a href="cauta.php?pag=cautare-avansata">Cautare avansata</a>
</form>';
break;

case 'cauta':

if($_POST['cauta'] == '') {
echo 'Introdu un cuvant pentru a cauta in baza de date. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} elseif(strlen($_POST['cauta']) < 3) {
echo 'Cuvantul trebuie sa contina cel putin 3 caractere. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} else {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0) {
while($rand = mysql_fetch_array($rezultat)) {
echo '<a href="'.$rand['adresa'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].'<br> <i>'.$rand['descriere'].'</i> <br><br>';
}
} else {
echo 'Nu au fost gasite rezultate pentru cautarea: <font
color="red"><b><i>'.addentities($_POST['cauta']).'</i></b></font> <br>
Apasati <a href="cauta.php">aici</a> pentru a va intoarce';
}

break;

case 'cautare-avansata':

echo '<form name="cauta" action="cauta.php?pag=cautare-avansata2"


method="post">
Cauta: <input type="text" name="cauta" value=""> <br><br>
in <input type="checkbox" name="in1" value="titlu" id="titlu">
<label for="titlu">Titlu</label> |
<input type="checkbox" name="in2" value="adresa"
id="adresa"> <label for="adresa">Adresa</label> |
<input type="checkbox" name="in3" value="descriere"
id="descriere"> <label for="descriere">Descriere</label> <br><br>
<input type="submit" name="Cauta" value="Cauta"> <br>
</form>';

199
Laborator Tehnologii Internet Lucrarea nr.11
break;

case 'cautare-avansata2':

if(!isset($_POST['in1'])) $_POST['in1'] = '';


if(!isset($_POST['in2'])) $_POST['in2'] = '';
if(!isset($_POST['in3'])) $_POST['in3'] = '';

if($_POST['cauta'] == '') {
echo 'Introdu un cuvant pentru a cauta in baza de date. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} elseif(strlen($_POST['cauta']) < 3) {
echo 'Cuvantul trebuie sa contina cel putin 3 caractere. <br>
Apasa <a href="cauta.php">aici</a> pentru a te intoarce.';
} else {

if(($_POST['in1'] != 'titlu') && ($_POST['in2'] != 'adresa') &&


($_POST['in3'] != 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = '';
} elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] != 'adresa') &&
($_POST['in3'] != 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu';
} elseif(($_POST['in1'] != 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] != 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `adresa` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'adresa';
} elseif(($_POST['in1'] != 'titlu') && ($_POST['in2'] != 'adresa') &&
($_POST['in3'] == 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `descriere` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'descriere';
} elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] != 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%" AND `adresa` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu, adresa';
} elseif(($_POST['in1'] != 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] == 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `adresa` LIKE
"%'.addentities($_POST['cauta']).'%" AND `descriere` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'adresa, descriere';
} elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] == 'descriere')) {
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%" AND `adresa` LIKE
"%'.addentities($_POST['cauta']).'%" AND `descriere` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu, adresa, descriere';
}

$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0) {

200
Laborator Tehnologii Internet Lucrarea nr.11
echo 'Cautati in: <font color="red">'.$in.'</font> dupa:
<font
color="red"><b>'.addentities($_POST['cauta']).'</b></font><br><br>';
while($rand = mysql_fetch_array($rezultat)) {
echo '<a href="'.$rand['adresa'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].'<br> <i>'.$rand['descriere'].'</i> <br><br>';
}
} else {
echo 'Nu au fost gasite rezultate pentru cautarea: <font
color="red"><b><i>'.addentities($_POST['cauta']).'</i></b></font> in
<font color="red">'.$in.'</font><br>
Apasati <a href="cauta.php?pag=cautare-
avansata">aici</a> pentru a va intoarce';
}
}
break;
}
?>
comand SQL:

$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE


"%'.addentities($_POST['cauta']).'%"';

Aceast comand SQL, selecteaz tot din baza de date unde cmpul titlul
conine cuvntul trimis prin formular $_POST['cauta'].
Aceasta este o cutare simpl n baza de date, dup titlu, ns se poate realiza i
o cutare mai avansat dup titlu, adres sau descirere.
Analiznd case-ul 'cautare avansata':, observ, scriptul pentru cutare
avansat:
if(($_POST['in1'] != 'titlu') && ($_POST['in2'] != 'adresa') &&
($_POST['in3'] != 'descriere'))
{
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = '';
}
Aceast parte de cod se interpreteaz astfel:
Dac valoarea post in1 nu este egal cu titlu, i valoarea post in2 nu este egal
cu adresa, i valoarea post in3 nu este egal cu descriere:
{
creeaz o variabil cerereSQL care s caute doar n titlu dup textul dat,
creeaz o variabil cu numele "in" cu valoare nul,
}

adic, dac nu se selecteaz nici o opiune, cutarea se va efectua ca cea anterioar,


adic doar dup cmpul titlu.
elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] != 'adresa') &&
($_POST['in3'] != 'descriere'))
{
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu';
}

201
Laborator Tehnologii Internet Lucrarea nr.11
Dac valoarea post in1 este egal cu titlu (adic dac opiunea titlu a fost
selectat), i dac valorile post-ului 2 i 3 nu sunt selectate
{
creeaz o variabila cerereSQL care s caute n titlu dup textul dat
creeaz o variabil cu numele in cu valoarea titlu
}

.
elseif(($_POST['in1'] == 'titlu') && ($_POST['in2'] == 'adresa') &&
($_POST['in3'] != 'descriere'))
{
$cerereSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE
"%'.addentities($_POST['cauta']).'%" AND `adresa` LIKE
"%'.addentities($_POST['cauta']).'%"';
$in = 'titlu, adresa';
}
Dac valoarea post in1 este egal cu titlu (adic dac opiunea titlu a fost
selectat), i dac valoarea post-ului in2 este egal cu adresa (adic dac i opiunea
adresa a fost bifat), i dac valoarea post-ului in3 nu este descriere
{
creeaz o variabil cerereSQL care s caute n titlu i adresa dup textul dat
creeaz o variabil cu numele in cu valoarea titlu, adresa
}

.
Efectuai un test n browser, n funcie de adresele introduse de dumneavoastr
n formular, bifai opiunile pe rnd i testai.

Deducei rolul variabilei in i de ce a fost utilizat.

202
Laborator Tehnologii Internet Lucrarea nr.12

12 Sistem de blocare acces al unui utilizator aspra site-ului,


sistem de contorizare a click-urilor pe un link
12.1 Obiective
Realizarea a dou pagini n php, index i admin cu urmtoarea structur:
admin.php:
o utilizator sau adresa IP (tip text, not null, ntre 2 i 255 caractere) ;
o motiv (tip text, not null, ntre 2 i 255 caractere);
realizarea unei pagini php n care s se contorizeze clck-urile efectuate pe un
link din pagin.

12.2 Partea I blocare accces


Baza de date pe care o vom folosi n aceast lucrare a fost folosit i n lucrarea
nr. 8 (mysql-2), nsa va trebui s mai crem un tabel. Intrm n phpMyAdmin, selectam
baza de date cu numele autentificare, apoi crem o nou tabel cu numele
acces_interzis cu 3 coloane si anume:
id - int(11), not-null, auto_increment ;
interzis char(60), not-null;
motiv char(255), not-null;

12.2.1 Mod de lucru:


n primul rnd, vom crea n baza de date autentificare tabelul acces_interzis cu
3 cele coloane i cu proprietile acestora, prezentate mai sus.
Vom crea apoi, n directorul rdcin al serverului C:\Program Files\EasyPHP
2.0b1\www directorul numit interzicere.
n acesta vom crea fiierul config.php n care introducem codul de mai jos
(identic cu celelalte fiiere config.php utilizate n laboratoarele anterioare):

<?php
session_start();
set_time_limit(0);
error_reporting(E_ALL);

// Informatii baza de date


$AdresaBazaDate = "localhost";
$UtilizatorBazaDate = "root";
$ParolaBazaDate = "";
$NumeBazaDate = "autentificare";

$conexiune = mysql_connect ($AdresaBazaDate, $UtilizatorBazaDate,


$ParolaBazaDate) or die("Nu ma pot conecta la MySQL!");
mysql_select_db($NumeBazaDate, $conexiune) or die("Nu gasesc baza de
date!");

function addentities($data){
if(trim($data) != ''){
$data = htmlentities($data, ENT_QUOTES);

203
Laborator Tehnologii Internet Lucrarea nr.12
return str_replace('\\', '&#92;', $data);
} else return $data;
} // End addentities() --------------
?>

n continuare se realizeaz fiierul index.php n care se introduce codul de mai


jos, i se vizualizeaz n browser.
<?php
require_once 'config.php';

$_SESSION['utilizator'] = 'student';
$adresa_ip = $_SERVER['REMOTE_ADDR'];

$cerereSQL = 'SELECT * FROM `acces_interzis` WHERE


interzis="'.$_SESSION['utilizator'].'" OR interzis="'.$adresa_ip.'"';

$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0)
{
while($rand = mysql_fetch_array($rezultat)) {
$motiv = $rand['motiv'];
}
}
if(isset($motiv)) {
echo 'Acces interzis asupra paginii, motivul: <i>'.$motiv.'</i>';
} else {
echo 'Continutul paginii.<br>
Apasa <a href="admin.php">aici</a> pentru a interzice acces-ul
asupra paginii.';
}
?>

Observai faptul c la nceputul paginii avem setat sesiunea cu utilizatorul logat


(acum am definit-o manual, normal aceast sesiune o setai atunci cnd utilizatorul se
autentific, pagina index.php fiind una din paginile protejate, prin urmare vom avea
sesiunea cu numele utilizatorului).
Adresa IP a utilizatorului o lum cu ajutorul variabilei globale $_SERVER,
REMOTE_ADDR.
Dup ce am obinut utilizatorul sau adresa ip a acestuia, avem comanda SQL
care selecteaz tot din tabela acces_interzis unde interzis este utilizator ori interzis este
adresa ip.
Dac returneaz rezultate, setm variabila $motiv, cu valoarea rndului motiv
din baza de date, apoi realizm o construcie if cu condiia: dac este setat variabila
motiv, nseamn c au fost gsite rezultate, nseamn c utilizatorul apare n baza de
date ca fiind blocat, prin urmare afim un mesaj de eroare.
Dac nu, afim coninutul paginii web.
Creai o pagin cu numele admin.php, introducei codul de mai jos, apoi testai
n browser.

204
Laborator Tehnologii Internet Lucrarea nr.12
<?php
require_once 'config.php';

if(!isset($_GET['pag'])) $_GET['pag'] = '';


switch($_GET['pag']) {
case '':
echo '<form name="adauga" action="admin.php?pag=verifica"
method="post">
Utilizator sau Adresa IP <br> <input type="text"
name="interzis"><br><br>
Motiv <br> <input type="text" name="motiv"><br><br>
<input type="submit" name="Adauga" value="Adauga">
</form>';
break;
case 'verifica':
if(($_POST['interzis'] == '') || (strlen($_POST['interzis']) < 2) ||
(strlen($_POST['interzis']) > 255) || ($_POST['motiv'] == '') ||
(strlen($_POST['motiv']) < 2) || (strlen($_POST['motiv']) > 255))
{
echo 'Completeaza corect campurile. <br>
Vezi daca: ai completat campurile, daca ai scris mai mult de
2 caractere si mai putin de 255<br><br>
Apasa <a href="admin.php">aici</a> pentru a te intoarce.';
} else {

$cerereSQL = "INSERT INTO `acces_interzis` (`interzis`, `motiv`)


VALUES ('".addentities($_POST['interzis'])."',
'".addentities($_POST['motiv'])."');";
mysql_query($cerereSQL);

echo 'Am introdus datele in baza de date. <br>


Apasa <a href="index.php">aici</a> pentru a te intoarce la
pagina principala.';
}
break;
}
?>

Observai faptul c n case default, case '':,


avem formularul de blocare utilizator sau IP i
o csu cu motivul care va apare atunci cnd
un utilizator blocat acceseaz adresa.
A II-a parte, cea cu validarea i
nserarea n baza de date, v este cunoscut.
Introducei, spre exemplu, adresa dvs
local: 127.0.0.1 i un motiv apoi testai n browser accesnd pagina principal
index.php.
Rezultat:

Descoperii modalitatea de a nltura adresa mai sus introdus, pentru a da acces


utilizatorului la pagina index.php.

205
Laborator Tehnologii Internet Lucrarea nr.12
12.3 Partea a II-a contorizare click-uri
Avem nevoie de o baz de date. n acest scop o vom folosi pe aceea care a fost
utilizat n lucrarea cu scripturile de cutare. Vom utiliza celula vizite din baza de date
cautare, tabela intrari.
n directorul rdcin al serverului web (Apache) vom crea directorul
contorizare, n care vom copia fiierul config.php din directorul contorizare (este
acelai, deoarece ne conectm la aceeai baz de date).
Realizm o pagin cu numele index.php, n care introducem scriptul de mai jos:

<?php
require_once('config.php');

if(!isset($_GET['pag'])) $_GET['pag'] = '';


switch($_GET['pag'])
{

case '':
$cerereSQL = 'SELECT * FROM `intrari`';
$rezultat = mysql_query($cerereSQL);
while($rand = mysql_fetch_array($rezultat))
{
echo '<a href="index.php?pag=
redirectionare&id='.$rand['id'].'">'.$rand['titlu'].'</a> -
'.$rand['adresa'].' <font color="blue" size="2">(vizualizari:
'.$rand['vizite'].')</font> <br> <i>'.$rand['descriere'].'</i>
<br><br>';
}
break;

case 'redirectionare':
if(!is_numeric($_GET['id'])) {
echo 'ID nu este numeric, ce incerci sa faci?';
} else {
$cerereSQL = 'SELECT * FROM `intrari` WHERE id="'.$_GET['id'].'"';
$rezultat = mysql_query($cerereSQL);
while($rand = mysql_fetch_array($rezultat))
{
header("Location: ".$rand['adresa']."");
$cerereSQL = 'UPDATE `intrari` SET vizite="'.($rand
['vizite']+1).'" WHERE id="'.$rand['id'].'"';
$rezultat = mysql_query($cerereSQL);
}
}
break;
}
?>

Observai c n primul case avem selectarea i afiarea n pagin a tuturor


adreselor introduse din proiectul cutare; mai observai i transferarea prin:
<a href="index.php?pag=redirectionare&id='.$rand['id'].'">
a id-ului corespundator fiecrei intrri.
n al II-lea case avem verificarea dac valoarea trimis prin $_GET este
numeric. Dac nu este numeric, afim un mesaj de eroare, iar dac este, selectm tot
din baza de date unde id-ul este id-ul trimis prin get.

206
Laborator Tehnologii Internet Lucrarea nr.12
Redirecionm utilizatorul ctre pagina selectata prin metoda header Location.
header("Location: ".$rand['adresa']."");
Apoi updatam vizitele cu +1, unde id-ul este id-ul trimis prin $_GET.
Accesai din nou pagina principal index.php i observai rezultatele:

OBS: php este un limbaj case sensitive, dac unul din cmpurile din baza de
date are numele scris cu litere mari (de exemplu ID), atunci scriptul index-php de mai
sus trebuie corectat (s fie scris ID i nu id).

207
Tehnologii Internet

Bibliografie
1. http://www.bsdguides.org/guides/freebsd/
2. http://www.cssplaza.com/tutoriale-css/
3. http://www.dplus.ro/resurse.php#ghid
4. http://www.drogoreanu.ro/tutorials/index.php
5. http://www.freebsd.org/
6. http://freebsd.ournet.md/docs/system/index.phtml
7. http://www.geocities.com/WallStreet/Floor/7071/jstutor.htm
8. http://www.infodamina.ro/jscript/index.html
9. http://www.itzone.ro/tutoriale.php?categorie_id=9
10. http://jalobean.itim-cj.ro/Cursuri/www.my-sql.go.ro/instalare.htm#mysqll
11. http://www.linux-magazin.ro/
12. http://www.mcli.dist.maricopa.edu/tut/lessons.html
13. http://www.mydigitallife.info/2006/04/13/installing-web-server-in-freebsd-60-
with-apache-22-mysql-50-and-php-5-part-4/
14. www.oriceon.com/tutoriale
15. http://www.supremeweb.org/fusion/news.php
16. http://www.rofug.ro/
17. http://www.tutoriale.far-php.ro/
18. http://www.worklance.com/htmltutorial/
19. The PHP begginers tutorial - Leendert Brouwer, PHP Pocket Reference editia 2
OReilly, Manual PHP (ro) HTML And XHTML The Definitive Guide editia
5 OReilly;
20. Iniiere n PHP & MySQL, Valentin Ivacu, 06.2005

208
Cuprins

1. CONCEPTELE INTERNETULUI .................................................................................................5


1.1. MODELUL DE REFERIN OSI ....................................................................................................5
1.2. CLASIFICAREA TEHNOLOGIILOR INTERNET ................................................................................9
1.2.1. Tehnologii Internet Hardware ..................................................................................................9
1.2.2. Tehnologii Internet de comunicaii .........................................................................................10
1.2.3. Tehnologii Internet Software ..................................................................................................12
1.2.4. Tehnologii Internet Dataware.................................................................................................13

2. SERVICII INTERNET SUB FREE BSD .....................................................................................14


2.1. ISTORIA I DEZVOLTAREA FREEBSD........................................................................................14
2.1.1. FreeBSD 5 schimbri i dezvoltare ....................................................................................15
2.1.2. FreeBSD 6 i 7 ........................................................................................................................16
2.1.3. Compatibilitate cu Linux.........................................................................................................16
2.1.4. Licen ....................................................................................................................................16
2.1.5. Produse derivate din FreeBSD ...............................................................................................17
2.1.6. TrustedBSD.............................................................................................................................17
2.2. CONFIGURAREA UNUI SERVER MULTIFUNCIONAL PE BAZA LA FREEBSD...............................18
2.2.1. Introducere: ............................................................................................................................18
2.2.2. Instalarea sistemului...............................................................................................................18
2.2.3. Setarea marrutizatorului .......................................................................................................19
2.2.4. Mail server..............................................................................................................................20
2.2.4.1. Setarea SMTP ......................................................................................................................... 20
2.2.4.2. Configurarea POP3 i IMAP................................................................................................... 21
2.2.5. FTP server ..............................................................................................................................21
2.2.6. Web server (Apache + PHP) ..................................................................................................22
2.2.7. Instalarea MySQL...................................................................................................................22

3. SERVICII INTERNET SUB WINDOWS ....................................................................................27


3.1. GENERALITI .........................................................................................................................27
3.2. CONFIGURAREA WINDOWS 2000 CA SERVER DE DOMENIU ......................................................27
3.2.1. Instalare Active Directory.......................................................................................................28
3.2.2. Dezinstalarea serviciului Active Directory .............................................................................30
3.3. INSTALAREA I CONFIGURAREA UNUI SERVER DE WEB ............................................................30
3.4. CONFIGURAREA SERVERULUI CA UN GATEWAY .......................................................................31

4. PROTOCOALE SI SERVICII ......................................................................................................33


4.1. DNS (DOMAIN NAME SERVICE)...............................................................................................33
4.1.1. Introducere..............................................................................................................................33
4.1.2. Instalarea i configurarea serverului BIND ...........................................................................34
4.2. REMOTE LOGIN (SSH, TELNET) SSH ....................................................................................35
4.2.1. Arhitectura lui SSH .................................................................................................................35
4.3. HTTP PROTOCOLUL HTTP .....................................................................................................37
4.3.1. Modul de funcionare..............................................................................................................37
4.3.2. Transferul argumentelor .........................................................................................................38
4.3.3. Versiuni...................................................................................................................................39
4.3.4. Metode ....................................................................................................................................39
4.3.5. Serverul Web Apache..............................................................................................................40
4.3.5.1. Instalare Apache 2.2.2............................................................................................................. 40
4.3.5.2. Instalare MySQL 5.0............................................................................................................... 41

209
Tehnologii Internet
4.3.6. Instalare PHP 5.1.4 ................................................................................................................42
4.4. FTP PROTOCOLUL FTP .........................................................................................................43
4.4.1. Instalarea i configurarea unui server FTP............................................................................43
4.5. SMTP PROTOCOLUL SMTP...................................................................................................45
4.5.1. Funcionare.............................................................................................................................45
4.5.2. Realizarea comunicaiei SMTP - exemplu ..............................................................................46
4.6. POP PROTOCOLUL POP.........................................................................................................47
4.6.1. Operaia de baz.....................................................................................................................47
4.6.1.1. Starea AUTHORIZATION ..................................................................................................... 48
4.6.1.2. Starea TRANSACTION.......................................................................................................... 49
4.6.1.3. Starea UPDATE ...................................................................................................................... 51
4.6.2. Concluzii .................................................................................................................................54
4.6.3. protocolul IMAP .....................................................................................................................55
4.7. PROTOCOALE CRIPTOGRAFICE SSL I TLS...............................................................................55
4.7.1. Descriere i funcionare..........................................................................................................55
4.7.2. Aplicaii ale SSL......................................................................................................................56

5. LIMBAJE DE PROGRAMARE I TEHNOLOGII WEB .........................................................58


5.1. INTRODUCERE ..........................................................................................................................58
5.2. HTML .....................................................................................................................................59
5.2.1. Introducere..............................................................................................................................59
5.2.2. Operatori, cuvinte cheie HTML ..............................................................................................60
5.2.3. Fonturi ....................................................................................................................................61
5.2.4. Blocuri de text .........................................................................................................................61
5.2.5. Imagini ....................................................................................................................................63
5.2.6. Legturi (Link-uri) .................................................................................................................64
5.2.7. Liste.........................................................................................................................................65
5.2.8. Tabele......................................................................................................................................67
5.2.9. Ferestre sau cadre n HTML...................................................................................................69
5.2.10. Formulare .............................................................................................................................70
5.3. LIMBAJUL XML .......................................................................................................................74
5.4. XHTML...................................................................................................................................74
5.5. CSS..........................................................................................................................................74
5.5.1. Introducere n css....................................................................................................................74
5.5.2. Sintaxa css...............................................................................................................................76
5.5.3. Clasele css...............................................................................................................................78
5.5.4. IDurile css...............................................................................................................................79
5.5.5. Utilizarea css n paginile (X)HTML........................................................................................79
5.5.5.1. Divizii ..................................................................................................................................... 79
5.5.5.2. Spanul css................................................................................................................................ 80
5.5.5.3. Marginile css ........................................................................................................................... 80
5.5.5.4. Padding css.............................................................................................................................. 81
5.5.5.5. Fonturi css............................................................................................................................... 82
5.5.5.6. Ancore, linkuri i pseudo clase................................................................................................ 83
5.5.5.7. Pseudo Clasele ........................................................................................................................ 84
5.5.5.8. Fundaluri css ........................................................................................................................... 85
5.5.6. Validarea fiierelor CSS .........................................................................................................85
5.6. AMP APACHE, MYSQL, PHP................................................................................................86
5.7. INTRODUCERE N PHP..............................................................................................................89
5.7.1. Elemente de baz ....................................................................................................................89
5.7.2. Tipuri de date, variabile, constante, operatori .......................................................................89
5.7.3. Structuri de control .................................................................................................................92
5.7.3.1. Instruciunile If , If-Else i elseif............................................................................................ 92
5.7.3.2. Bucla WHILE ......................................................................................................................... 93
5.7.3.3. Instruciunea SWITCH............................................................................................................ 93
5.7.3.4. Instruciunea for ...................................................................................................................... 93
5.7.3.5. Structura FOREACH .............................................................................................................. 94
5.7.3.6. Instruciunea BREAK ............................................................................................................. 95

210
Cuprins
5.7.3.7. Instruciunea CONTINUE....................................................................................................... 95
5.7.3.8. Alte structuri PHP ................................................................................................................... 96
5.7.4. Lucrul cu formularele .............................................................................................................96
5.7.4.1. Prelucrarea datelor din formular.............................................................................................. 96
5.7.4.2. Verificarea datelor trimise prin formular................................................................................. 97
5.8. INTRODUCERE N MYSQL........................................................................................................98
5.8.1. Crearea bazelor de date........................................................................................................100
5.8.2. Utilizarea PHP pentru conectarea la MySQL ......................................................................102
5.8.2.1. Comanda SELECT................................................................................................................ 103
5.8.2.2. Comanda INSERT ................................................................................................................ 104
5.8.2.3. Comanda UPDATE............................................................................................................... 105
5.8.2.4. Comanda DELETE ............................................................................................................... 106
5.9. ASP, ASPX(.NET)..................................................................................................................107
5.10. JAVASCRIPT ...........................................................................................................................107
5.11. AJAX TEHNOLOGIA AJAX, ...................................................................................................112

6. CREAREA PAGINILOR WEB CU DREAMWEAVER..........................................................113


6.1. GENERALITI .......................................................................................................................113
6.2. CREAREA UNUI SIT WEB .........................................................................................................114
6.3. CREAREA PAGINILOR WEB ......................................................................................................116
6.4. CREAREA I UTILIZAREA STILURILOR .....................................................................................118
6.4.1. Realizarea unei foi de stiluri.................................................................................................118

Lucrri de laborator

L1 INSTALAREA I CONFIGURAREA SERVERULUI APACHE, PHP I MYSQL PE


FREEBSD ...............................................................................................................................................121
1.1 OBIECTIVE .............................................................................................................................121
1.2 INSTALAREA SI CONFIGURAREA MYSQL ...............................................................................121
1.2.1 Instalarea MySQL Server 5 din colecia de porturi FreeBSD..........................................122
1.2.2 Instalarea phpMyAdmin (nu merge fr PHP) .............................................................123
1.3 INSTALAREA I CONFIGURAREA APACHE22 ...........................................................................123
1.4 INSTALAREA I CONFIGURAREA PHP .....................................................................................124
1.5 VERIFICAREA INSTALRII APACHE, PHP I MYSQL , VERIFICAREA/MODIFICAREA FIIERELOR
DE CONFIGURARE .................................................................................................................................126
1.5.1 Verificarea serverului Web Apache..................................................................................126
1.5.2 Verificarea funcionrii PHP ...........................................................................................127
1.5.3 Verificarea funcionrii phpMyAdmin..............................................................................127
1.6 INSTALAREA I CONFIGURAREA UNUI SERVER FTP................................................................128

L2 INSTALAREA I CONFIGURAREA SERVERULUI APACHE, PHP I MYSQL PE


SISTEMUL DE OPERARE WINDOWS.............................................................................................131
2.1 OBIECTIVE .............................................................................................................................131
2.2 INSTALAREA I CONFIGURAREA EASYPHP-2.0B1 ..................................................................131
2.3 INSTALAREA APLICAIEI PHPMYADMIN ................................................................................133
2.4 PHP DESIGNER 2005..............................................................................................................134
2.4.1 Prima pagin HTML ........................................................................................................134
2.4.2 Prima pagin PHP ...........................................................................................................135

L3 PRIMII PAI N HTML ..............................................................................................................137


3.1 OBIECTIVE .............................................................................................................................137
3.2 INTRODUCERE ........................................................................................................................137
211
Tehnologii Internet
3.3 ELEMENTE CONSTRUCTIVE.....................................................................................................138
3.3.1 Blocuri preformatate ........................................................................................................138
3.3.2 Culoarea de fond ..............................................................................................................138
3.3.3 Culoarea textului ..............................................................................................................139
3.3.4 Stiluri pentru blocurile de text..........................................................................................140
3.3.5 Stiluri fizice si logice ........................................................................................................141

L4 PRINCIPALELE STRUCTURI N HTML ...............................................................................143


4.1 OBIECTIVE .............................................................................................................................143
4.2 RECAPITULARE ......................................................................................................................143
4.3 LEGTURI LINK-URI ............................................................................................................143
4.3.1 Ancore ..............................................................................................................................144
4.4 LISTE......................................................................................................................................145
4.4.1 Liste neordonate ...............................................................................................................145
4.4.2 Liste ordonate...................................................................................................................145
4.5 TABELE ..................................................................................................................................146
4.5.1 Alinierea tabelului ............................................................................................................147
4.5.2 Definirea culorilor de fond pentru un tabel......................................................................147
4.5.3 Dimensionarea celulei unui tabel.....................................................................................148
4.5.4 Dimensionarea unui tabel.................................................................................................148
4.5.5 Titlul unui tabel ................................................................................................................148
4.5.6 Cap de tabel......................................................................................................................148
4.5.7 Celule vide ale unui tabel .................................................................................................149
4.5.8 Atributul " nowrap " .........................................................................................................149
4.5.9 Subblocurile unui tabel.....................................................................................................149

L5 PRIMII PAI N PHP ..................................................................................................................150


5.1 OBIECTIVE .............................................................................................................................150
5.2 INTRODUCERE ........................................................................................................................150
5.2.1 Sintaxa ..............................................................................................................................150
5.2.2 Aplicaii de nceput...........................................................................................................151
5.3 VARIABILE SI TIPURI DE DATE N PHP....................................................................................152
5.3.1 Lucrul cu variabile si tipuri de date .................................................................................152
5.3.2 Variabile dinamice ...........................................................................................................154
5.4 COD PHP N COD HTML........................................................................................................154

L6 CONSTRUIREA UNUI SITE N PHP .......................................................................................156


6.1 OBIECTIVE .............................................................................................................................156
6.2 INTRODUCERE ........................................................................................................................156
6.3 ELEMENTELE COMPONENTE ...................................................................................................157
6.3.1 index .................................................................................................................................157
6.3.2 head ..................................................................................................................................157
6.3.3 body ..................................................................................................................................159
6.3.4 Meniurile orizontal i vertical ..........................................................................................161
6.3.5 Coninut ............................................................................................................................161
6.3.6 Module..............................................................................................................................163
6.3.7 Footer, modulul data i ora ..............................................................................................163
6.4 MOD DE LUCRU ......................................................................................................................165

L7 STILURI CSS I CHESTIONAR N PHP.................................................................................166


7.1 OBIECTIVE .............................................................................................................................166
7.2 UTILIZAREA FIIERELOR CSS EXTERNE ...................................................................................166
7.3 CREAREA CHESTIONARELOR N PHP .......................................................................................168
212
Cuprins

L8 FORMULAR DE PRELUCRARE A DATELOR DIN BAZA DE DATE MYSQL ...............172


8.1 OBIECTIVE .............................................................................................................................172
8.2 REALIZAREA BAZEI DE DATE ..................................................................................................172
8.3 TEM PENTRU ACAS: ...........................................................................................................177

L9 SISTEM DE NREGISTRARE, AUTENTIFICARE I PROTECIE...................................178


9.1 OBIECTIVE .............................................................................................................................178
9.2 REALIZAREA BAZEI DE DATE ..................................................................................................178
9.3 SCRIPTUL DE NREGISTRARE...................................................................................................179
9.3.1 Explicarea scriptului inregistrare.php .............................................................................182
9.3.2 Exemplu de script de atac: ...............................................................................................183
9.3.3 Funcii n PHP..................................................................................................................184
9.3.4 Exemple de creare funcii:................................................................................................184
9.4 SCRIPTUL DE AUTENTIFICARE ................................................................................................184
9.5 SCRIPTUL PAGINA UTILIZATOR PAGINA.PHP ........................................................................186
9.6 SCRIPTUL PROFIL.PHP .............................................................................................................186
9.7 SCRIPTUL IESIRE.PHP ..............................................................................................................191

L10 REALIZAREA UNUI FORMULAR DE CONTACT ...............................................................192


10.1 OBIECTIVE .............................................................................................................................192
10.2 MOD DE LUCRU:.....................................................................................................................192
10.2.1 Funcia date(); .............................................................................................................194
10.2.2 Functia mail();.............................................................................................................194

L11 SISTEM DE CUTARE N BAZA DE DATE ..........................................................................196


11.1 OBIECTIVE .............................................................................................................................196
11.2 MOD DE LUCRU:.....................................................................................................................196
11.2.1 Fiierul adauga.php.....................................................................................................197
11.2.2 Fiierul cauta.php........................................................................................................199

L12 SISTEM DE BLOCARE ACCES AL UNUI UTILIZATOR ASPRA SITE-ULUI, SISTEM


DE CONTORIZARE A CLICK-URILOR PE UN LINK .................................................................203
12.1 OBIECTIVE .............................................................................................................................203
12.2 PARTEA I BLOCARE ACCCES ................................................................................................203
12.2.1 Mod de lucru: ..............................................................................................................203
12.3 PARTEA A II-A CONTORIZARE CLICK-URI .............................................................................206

BIBLIOGRAFIE ...................................................................................................................................208
CUPRINS ................................................................................................................................................209

213

S-ar putea să vă placă și