You are on page 1of 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/hostcount-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

2.1. Istoria i dezvoltarea FreeBSD

proiectului 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.4BDSLite 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 Unixlike (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 10.7.0.1/16 NIC1 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-mailurilor 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 /usr/local/apache22

Apache

inclusiv

acele

de

configurare

se

afla

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 ln ln ln ln ln -s -s -s -s -s -s /usr/local/mysql/include/mysql /usr/include /usr/local/mysql/lib/mysql /usr/lib /usr/local/mysql/bin/mysql /usr/local/bin /usr/local/mysql/bin/mysqldump /usr/local/bin /usr/local/mysql/bin/mysqladmin /usr/local/bin /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 SSH1. 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, apoi implementat n concordan cu algoritmul i cheia negociate negociere secret cu algoritmul "mac" calculare folosind o cheie public, numrul de secven al pachetului i coninutul pachetului

pachet_length
uint32

padding_length
byte byte

payload (pachet_length)(padding_length) -1

Cel puin 4 bii aleatorii de umplutur


byte

umplutur de lungime aleatorie

Iniial necomprimat, apoi opional comprimat n conformitate cu schema de comprimare negociat (n general zlib) 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 mac_length

Fig. 4.2: Arhitectura pachetului SSH-2

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 de.wikipedia.org ...

HTTP/1.1

Host:

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 ContentType: 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 SlowStart, 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 (email). 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, printrun 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 maildropului. 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 multiusers 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 mailul 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/cgibin/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 semistructurate 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 </style> </head> url( Calea catre fisierul.css )

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 vai 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 #content #content #content #content a:link {color: #009900;} a:visited {color: #999999;} a:hover {color: #333333;} a:focus {color: #333333;} 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 #column #column #column #column a:link {color: #009900;} a:visited {color: #999999;} a:hover {color: #333333;} a:focus {color: #333333;} 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 .column .column .column .column a:link {color: #009900;} a:visited {color: #999999;} a:hover {color: #333333;} a:focus {color: #333333;} 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: fundalului Proprietatea "backgroundcolor" specific culoarea

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; $a = -123; $a = 0123; $a = 0x1A; ?> // // // // numr numr numr numr decimal negative octal (echivalent lui 83 decimal) 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

$4site = 'not yet'; $_4site = 'not yet'; $tyte = 'masina'; ?>

Cap 5: Limbaje de programare i Tehnologii Web // invalid; ncepe cu un numr // valid; ncepe cu underscore // 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

Exemplu $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b

Nume And Or Xor Not And Or

Operatori logici Rezultat TRUE dac $a i $b sunt TRUE. TRUE dac $a sau $b este TRUE. TRUE dac $a sau $b este TRUE, dar nu amndou. TRUE dac $a nu este TRUE. TRUE dac att $a ct i $b sunt TRUE. TRUE dac $a sau $b este TRUE. Rezultat TRUE dac $a este egal cu $b. TRUE dac $a este egal cu $b, i sunt de acelai tip TRUE dac $a nu este egal cu $b. TRUE dac $a nu este egal cu $b. TRUE dac $a nu este egal cu $b, sau nu sunt de acelai tip. (introdus n PHP 4) TRUE dac $a este mai mic dect $b. TRUE este $a mai mare dect $b. TRUE dac $a este mai mic sau egal cu $b. TRUE dac $a este mai mare sau egal cu $b.

Exemplu Nume $a == $b Egalitate $a === $b Identitate $a != $b Diferit $a <> $b Diferit $a !== $b Diferit $a < $b $a > $b $a <= $b $a >= $b Mai mic Mai mare Mai mic sau egal Mai mare sau egal

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:
<?php if ($a > $b) { echo "a este mai mare dect b"; $b = $a; // b devine egal cu a } ?>

Sintaxa:
if (expresie) { declaraii }

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

92

Cap 5: Limbaje de programare i Tehnologii Web

Exemplu 3:
<?php if echo } elseif echo } else { echo } ?> ($a > $b) { "a este mai mare dect b"; ($a == $b) { "a este egal cu b"; "a este mai mic dect b"; if (expresie 1) { declaraii 1} elseif(expresie 2) (declaraii 2) else { declaraii 3 }

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 $numar = 1; while($numar <= 5) echo $numar.'<br>'; $numar++; } ?>

1 2 3 4 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 $i = 2; if ($i == 0) { echo "i egal cu 0"; } elseif ($i == 1) { echo "i egal cu 1"; } elseif ($i == 2) { echo "i egal cu 2"; } ?>; <?php switch ($i) { case 0: echo "i egal cu 0"; break; case 1: echo "i egal cu 1"; break; case 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
<?php $sir = array("unu", "doi", "trei", "patru", "cinci"); foreach($sir as $valoare) { echo "Valoare: ".$valoare." <br>\n"; } ?>

rezultat Valoare: unu Valoare: doi Valoare: trei Valoare: patru Valoare: cinci

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

rezultat Cheie: 0 Valoare: unu Cheie: 1 Valoare: doi Cheie: 2 Valoare: trei Cheie: 3 Valoare: patru Cheie: 4 Valoare: cinci

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 pagina Browser Web

Schimb de date Server MySQL

Server Web Apache

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, $ParolaBazaDate) or die("Nu ma pot conecta la MySQL!"); mysql_select_db($NumeBazaDate,$conexiune) or die("Nu gasesc baza de date!"); ?> $UtilizatorBazaDate,

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
<?php require_once('config.php'); /*Selectare date din baza date*/ $cerereSQL = 'SELECT * FROM `tbl_Formular1`';

explicaii: Funcia require_once include (o singur dat) n pagina noastr select.php pagina config.php, adic de datele din config.php vor fi transmise n pagina select.php Variabila $cerereSQL cu valoarea cererii SQL pentru a extrage datele din tabela tbl_Formula1. SELECT * = se interpreteaz astfel: selecteaz tot din tbl_Formular1 Variabila rezultat cu valoarea funciei mysql_query, funcie care realizeaz deschiderea conexiunii Bucla while : atta timp ct exist nregistrri n tabela tbl_Formular1 afieaz (echo) elementele variabilei $rand (care este de tip array vector)

$rezultat = mysql_query($cerereSQL); while($rand = mysql_fetch_array($rezultat)){ echo $rand['Nume'].' '.$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` , `Vrsta`,`Sex`) VALUES ('Basesecu', 'Traian', '42','M')"; mysql_query($cerereSQL); echo 'Am adaugat valorile in baza de date'; ?> `Prenume`,

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:
Eveniment blur Se desfasoara atunci cand Tratearea evenimentului onBlur onClick onChange onFocus onLoad onMouseover onSelect onSubmit onUnload

utilizatorul elimin controlul de intrare de pe un element al unui formular utilizatorul execut un click pe un element al unui formular sau pe click o legtur utilizatorul modific valoarea unui text, zona de text sau element de change selecie focus utilizatorul atribuie unui element de formular control de intrare load utilizatorul ncrca pagin n programul de navigare utilizatorul deplaseaz indicatorul mouse-ului deasupra unei mouseover legturi sau a unei ancore utilizatorul selecteaz cmpul de intrare al unui element de select formular submit utilizatorul transmite un formular unload utilizatorul abandoneaz pagina

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. 2. Add the onLoad event handler into the BODY tag 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 superuser 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, mysmall.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

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

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. 1.4 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 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 libexec/apache22/libphp5.so

Laborator Tehnologii Internet <Directory "/usr/local/www/phpMyAdmin/"> Options none AllowOverride Limit Order Deny,Allow Deny from all Allow from all </Directory>

Lucrarea nr.1

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 instalarea aplicaiilor; 2. se alege limba de instalare , i astfel se pornete 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. 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: 2.4

134

Laborator Tehnologii Internet

Lucrarea nr.2

script html:
<html > <head> <title>Document Nou</title> </head> <body> Prima pagina web in HTML!! </body> </html>

Explicaii: - nceput document html - nceput antet, - titlul documentului - sfrit antet document - nceputul corpului documentului (paginii web) - coninutul paginii - 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:
<?php phpinfo(); ?>

Explicaii - nceput document php - 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 Bine ati venit in pagina mea de Web! </body> </html>

Lucrarea nr.3

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 <font color=red><h3>Lucrarea 1</h3></font> </body> </html>

de

laborator

nr

Lucrarea nr.4 <br> pagina

i
<html > <head> <title>Pagina 2</title> </head> <body> <font color=blue><h3>Lucrarea 2</h3></font> </body> </html>

de

laborator

nr

<br>

pagina

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 <h3>Ancore definite in acelasi document </h3> <a href="#jos"> Link catre sfarsit pagina</a>

Lucrarea nr.4

<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 <li>Aqua </ol>

Lucrarea nr.4

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:


align="center" border="3" bgcolor="yellow">

<table

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, printrun 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 ;. 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: 5.2.2
<?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 <?php echo(Salut<br>); echo(Numele meu este<br>); echo(Popescu Ion); ?>

Lucrarea nr.5

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 alarma \a control-x (x poate fi orice caracter) \cx escape \e formfeed \f newline (linie noua) \n carriage return \r tab \t caracter cu codul hexa hh \xhh caracter cu codul octal ddd \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 <?php $salut=Salutare natiune; echo($salut); ?>

Lucrarea nr.5

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 <?php $variabila_mea=Salut, sunt o variabila; $tip=gettype($variabila_mea); echo(Aceasta este o variabila de tip $tip); ?>

Lucrarea nr.5

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 <?php for($i=0, $i<50, $i++) { ?> <br /> <?php } ?>

Lucrarea nr.5

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.

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.

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) partea n care se afieaz coninutul paginilor, i alte informaii aici se pot pune alte informaii generate dinamic

6.2

meniul lateral

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-88591" />'; // 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 **************************/ // 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; ?>

Lucrarea nr.6

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%" cellpadding="0"> <tr> <td width="20%" valign="top">';

border="0"

cellspacing="3"

// 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 </table>'; ?>

Lucrarea nr.6

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 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'];

Lucrarea nr.6

$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 if (file_exists("module/".$valoare)) { include_once("module/".$valoare); } else { echo "<br>module/".$valoare; } } ?>

Lucrarea nr.6

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

6.4

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

Utilizarea fiierelor css externe Stilurile definite n interiorul unui bloc <style>...</style> pot fi transferate ntrun 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

7.2

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 ID Nume Prenume Vrsta e-mail Observaii Tip int(11) char(60) char(60) char(10) char(100) char(255) Null nu nu nu nu nu nu Extra auto_increment

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 date!"); function addentities($data){ if(trim($data) != ''){ $data = htmlentities($data, ENT_QUOTES); return str_replace('\\', '&#92;', $data); } else return $data; } // End addentities() -------------?>

de

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`, `email`,`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 ID utilizator parola nume prenume varsta localitate Tip int(11) char(60) char(60) char(30) char(30) char(3) char(30) Null nu nu nu nu nu nu Extra auto_increment Cerine

parola1 = parola2 Numai litere Numai litere Numai cifre

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 if(!isset($_GET['actiune'])) $_GET['actiune'] = '';

Lucrarea nr.9

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 linkul 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 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'];

Lucrarea nr.9

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 $cerereSQL = "UPDATE `utilizatori` SET parola='".md5($_SESSION['parola1'])."' WHERE utilizator='".$_SESSION['user']."'"; mysql_query($cerereSQL); $_SESSION['parola1'] = ''; $_SESSION['parola2'] = ''; } break; } } ?>

Lucrarea nr.9

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 http://localhost/contact/index.php.

vizualizeaz

browser

accesand

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 $cerereSQL = `descriere`)

"INSERT

INTO

`intrari`

(`titlu`,

Lucrarea nr.11 `adresa`,

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 pagina principala.'; } break; } ?>

te

intoarce

la

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 break; case 'cautare-avansata2': if(!isset($_POST['in1'])) $_POST['in1'] = ''; if(!isset($_POST['in2'])) $_POST['in2'] = ''; if(!isset($_POST['in3'])) $_POST['in3'] = '';

Lucrarea nr.11

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=cautareavansata">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 return str_replace('\\', '&#92;', $data); } else return $data; } // End addentities() -------------?>

Lucrarea nr.12

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 <?php require_once 'config.php';

Lucrarea nr.12

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 header("Location: ".$rand['adresa']."");

Lucrarea nr.12

Redirecionm utilizatorul ctre pagina selectata prin metoda header Location. 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-60with-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. 2.2.4.2. Setarea SMTP ......................................................................................................................... 20 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. 4.3.5.2. Instalare Apache 2.2.2............................................................................................................. 40 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. 4.6.1.2. 4.6.1.3. Starea AUTHORIZATION ..................................................................................................... 48 Starea TRANSACTION.......................................................................................................... 49 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. 5.5.5.2. 5.5.5.3. 5.5.5.4. 5.5.5.5. 5.5.5.6. 5.5.5.7. 5.5.5.8. Divizii ..................................................................................................................................... 79 Spanul css................................................................................................................................ 80 Marginile css ........................................................................................................................... 80 Padding css.............................................................................................................................. 81 Fonturi css............................................................................................................................... 82 Ancore, linkuri i pseudo clase................................................................................................ 83 Pseudo Clasele ........................................................................................................................ 84 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. 5.7.3.2. 5.7.3.3. 5.7.3.4. 5.7.3.5. 5.7.3.6. Instruciunile If , If-Else i elseif............................................................................................ 92 Bucla WHILE ......................................................................................................................... 93 Instruciunea SWITCH............................................................................................................ 93 Instruciunea for ...................................................................................................................... 93 Structura FOREACH .............................................................................................................. 94 Instruciunea BREAK ............................................................................................................. 95

210

Cuprins
5.7.3.7. 5.7.3.8. 5.7.4.1. 5.7.4.2. Instruciunea CONTINUE....................................................................................................... 95 Alte structuri PHP ................................................................................................................... 96 Prelucrarea datelor din formular.............................................................................................. 96 Verificarea datelor trimise prin formular................................................................................. 97

5.7.4. Lucrul cu formularele .............................................................................................................96 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. 5.8.2.2. 5.8.2.3. 5.8.2.4. Comanda SELECT................................................................................................................ 103 Comanda INSERT ................................................................................................................ 104 Comanda UPDATE............................................................................................................... 105 Comanda DELETE ............................................................................................................... 106

5.9. 5.10. 5.11. 6.

ASP, ASPX(.NET)..................................................................................................................107 JAVASCRIPT ...........................................................................................................................107 AJAX TEHNOLOGIA AJAX, ...................................................................................................112

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 OBIECTIVE .............................................................................................................................121 INSTALAREA SI CONFIGURAREA MYSQL ...............................................................................121 Instalarea MySQL Server 5 din colecia de porturi FreeBSD..........................................122 Instalarea phpMyAdmin (nu merge fr PHP) .............................................................123 INSTALAREA I CONFIGURAREA APACHE22 ...........................................................................123 INSTALAREA I CONFIGURAREA PHP .....................................................................................124 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 2.2 2.3 2.4 2.4.1 2.4.2 L3 OBIECTIVE .............................................................................................................................131 INSTALAREA I CONFIGURAREA EASYPHP-2.0B1 ..................................................................131 INSTALAREA APLICAIEI PHPMYADMIN ................................................................................133 PHP DESIGNER 2005..............................................................................................................134 Prima pagin HTML ........................................................................................................134 Prima pagin PHP ...........................................................................................................135 1.1 1.2 1.2.1 1.2.2 1.3 1.4 1.5

PRIMII PAI N HTML ..............................................................................................................137 3.1 3.2 OBIECTIVE .............................................................................................................................137 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 4.2 4.3 4.3.1 4.4 4.4.1 4.4.2 4.5 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 L5 OBIECTIVE .............................................................................................................................143 RECAPITULARE ......................................................................................................................143 LEGTURI LINK-URI ............................................................................................................143 Ancore ..............................................................................................................................144 LISTE......................................................................................................................................145 Liste neordonate ...............................................................................................................145 Liste ordonate...................................................................................................................145 TABELE ..................................................................................................................................146 Alinierea tabelului ............................................................................................................147 Definirea culorilor de fond pentru un tabel......................................................................147 Dimensionarea celulei unui tabel.....................................................................................148 Dimensionarea unui tabel.................................................................................................148 Titlul unui tabel ................................................................................................................148 Cap de tabel......................................................................................................................148 Celule vide ale unui tabel .................................................................................................149 Atributul " nowrap " .........................................................................................................149 Subblocurile unui tabel.....................................................................................................149

PRIMII PAI N PHP ..................................................................................................................150 5.1 5.2 5.2.1 5.2.2 5.3 5.3.1 5.3.2 5.4 OBIECTIVE .............................................................................................................................150 INTRODUCERE ........................................................................................................................150 Sintaxa ..............................................................................................................................150 Aplicaii de nceput...........................................................................................................151 VARIABILE SI TIPURI DE DATE N PHP....................................................................................152 Lucrul cu variabile si tipuri de date .................................................................................152 Variabile dinamice ...........................................................................................................154 COD PHP N COD HTML........................................................................................................154

L6

CONSTRUIREA UNUI SITE N PHP .......................................................................................156 6.1 6.2 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 OBIECTIVE .............................................................................................................................156 INTRODUCERE ........................................................................................................................156 ELEMENTELE COMPONENTE ...................................................................................................157 index .................................................................................................................................157 head ..................................................................................................................................157 body ..................................................................................................................................159 Meniurile orizontal i vertical ..........................................................................................161 Coninut ............................................................................................................................161 Module..............................................................................................................................163 Footer, modulul data i ora ..............................................................................................163 MOD DE LUCRU ......................................................................................................................165

L7

STILURI CSS I CHESTIONAR N PHP.................................................................................166 7.1 7.2 7.3 OBIECTIVE .............................................................................................................................166 UTILIZAREA FIIERELOR CSS EXTERNE ...................................................................................166 CREAREA CHESTIONARELOR N PHP .......................................................................................168 212

Cuprins L8 FORMULAR DE PRELUCRARE A DATELOR DIN BAZA DE DATE MYSQL ...............172 8.1 8.2 8.3 L9 OBIECTIVE .............................................................................................................................172 REALIZAREA BAZEI DE DATE ..................................................................................................172 TEM PENTRU ACAS: ...........................................................................................................177

SISTEM DE NREGISTRARE, AUTENTIFICARE I PROTECIE...................................178 9.1 9.2 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.4 9.5 9.6 9.7 OBIECTIVE .............................................................................................................................178 REALIZAREA BAZEI DE DATE ..................................................................................................178 SCRIPTUL DE NREGISTRARE...................................................................................................179 Explicarea scriptului inregistrare.php .............................................................................182 Exemplu de script de atac: ...............................................................................................183 Funcii n PHP..................................................................................................................184 Exemple de creare funcii:................................................................................................184 SCRIPTUL DE AUTENTIFICARE ................................................................................................184 SCRIPTUL PAGINA UTILIZATOR PAGINA.PHP ........................................................................186 SCRIPTUL PROFIL.PHP .............................................................................................................186 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

You might also like