Sunteți pe pagina 1din 28

D EZVOLTARE WEB CU PHP

Pentru ncep torii n programare si n PHP care vor s devin profesioniti a a a s

D
O iniiativ Yet Another Project t a Homepage: http://originalcopy.github.com/

RA FT
Autor: Flavius Aspra 13 august 2011

Dezvoltare web cu PHP Pentru ncep torii n programare si n PHP care vor s devin profesioniti a a a s Flavius Aspra Copyright 2010-2011, Flavius Aspra. Toate drepturile rezervate lui Flavius Aspra. Nicio parte din acest lucrare nu poate repus c tre desc rcare electronic f r acordul autorului. a a a a a aa Redistribuirea sa n format printat este admis , atta timp ct distribuitorul nu are niciun fel de ctiguri nanciare a s de pe urma acestei activiti sau a altor activiti conexe. at at Redistribuirea sa, de orice natur ar ea, trebuie s se fac integral si f r modic ri aduse lucr rii. a a a aa a a Flavius Aspra, <avius.as@gmail.com> URL: http://originalcopy.github.com/

Cuprins

Introducere Scopul acestei c ri . . . . . . . . at De ce am nevoie? Premize . . . . Convenii folosite . . . . . . . . . t Cum s nvei ecient programare a t Comunitatea . . . . . . . . . Exerciiile . . . . . . . . . . t Cum pot ajuta? . . . . . . . . . . O privire de ansamblu a capitolelor 1

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

1 1 1 2 3 5 5 6 6 8 8 10 11 12 15 22

Retelistic a , 1.1 Noduri, TCP/IP, retele . . . . . . . . , 1.2 Domenii . . . . . . . . . . . . . . . 1.3 Protocoale . . . . . . . . . . . . . . 1.3.1 Primul exerciiu de hacking t 1.4 Instalarea mediului de dezvoltare . . 1.5 O altfel de remprosp tare . . . . . a

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

Introducere
Acest capitol contine informatii foarte importante despre cum s studiezi, unde s ceri ajutor, cum s raportezi a a a , , greseli si n general cum s proi la maxim de materialul prezentat. Recomand citirea sa cu atentie. a t , ,

n ultimii ani, utilizarea Internetului a crescut rapid. Num rul de dispozitive conectate la Internet crete n mod a s exponenial de la an la an, iar web-ul1 a devenit scena principal . Web-ul nu mai este static demult, avem retele t a , sociale,2 feed-uri,3 bloguri si microbloguri,4 s.a.m.d. Observ m c mai toate activit tile noastre informationale a a a, , , , s-au mutat pe web. ns aceste activit ti devin din ce n ce mai complexe, la fel ca si aplicatiile5 care le sustin. Iar aceste aplicatii a a, , , , , trebuie dezvoltate de cineva de programatori. PHP este unul dintre cele mai folosite limbaje pentru crearea de aplicatii web dinamice. Succesul s u se a , datoreaz n special simplit tii sale, ns acest lucru e cu dou t isuri: pe de o parte este usor accesibil, pe de a a, a a a , , cealalt parte poti face foarte usor greseli majore. a , , ,

Scopul acestei c ri at
Pentru a scrie aplicatii PHP bune6 este cerut simtul critic al programatorului, ns exist o mare problem : a a a , , ncep torul care alege PHP ca primul s u limbaj de programare nu are un simt critic dezvoltat sau gndirea analitic a a a , necesare n programare. n combinatie cu accesibilitatea aparent a limbajului PHP, acest lucru se dovedeste fatal a , , pe termen lung. Scopul acestei c ri este s -ti dezvolte gndirea autonom , productiv , critic , ct si capacitatea de analiz si at a , a a a a , , sintez , capacit ti att de vitale n programare. a a, Lucrarea de fata nu este nici pe departe complet nici nu vrea s e. Tot ceea ce vrea este s -ti ofere o a a a , , fundatie bun de start. Acest lucru se face punnd accent pe terminologie si pe explicarea modului de functionare a , , , a noiunilor si tehnologiilor prezentate. t Dup cum probabil intuieti deja, scopul acestei c ri este s te susin s devii bun n perspectiv , ind oriena s at a t a a a tat spre viitor, pe termen lung. a
World Wide Web hi5, facebook, lastFM, delicious 3 RSS, Atom 4 twitter 5 Termenul aplicatienu este tocmai corect, n sensul traditional, ns autorul consider c limba este ceva maleabil, care se schimb n a a a a , , timp n functie de nevoi. , 6 performante, sigure, complexe, mentenabile
2 1

Dezvoltare web cu PHP

De ce am nevoie? Premize
Aceast lucrare pleac de la premiza c stii deja (X)HTML,7 eventual si CSS, dar acesta din urm nu este a a a a necesar pentru nelegerea lucrurilor prezentate sau pentru nvarea PHP. Ar trebui studiat oricum, c ci f r el nu t at a aa este posibil design-ul de website-uri aspectuoase. Acolo unde va nevoie, vor prezentate si noiunile JavaScript8 t necesare. Un lucru important de care ai nevoie este r bdare. Citeste cu atentie si ncearc s ntelegi tot, c ci informatia a a a , a , , , , este comprimat si uneori pare s nu aib nicio aplicabilitate practic , ns e doar o iluzie tot ce scrie n acest a , a a a a ghid scurt este important. Nu uita c m rezum doar la fundatie, la cunostintele de baz . a a a , , , Aa cum spune si coperta acestei c ri, plec de la premiza c vrei s devii profesionist n PHP. Dac nu asta s at a a a este intentia ta, atunci lucrarea de faa nu este potrivit pentru tine. n particular, n timp ce urmezi aceast carte t a a , pentru prima oar , nu o face pentru a-ti rezolva problema ta imediat de care tocmai te-ai lovit, ci ncearc s a a a a , ntelegi notiunile expuse si s rezolvi exercitiile prezentate. Vei vedea c asta ti salveaz mult timp si frustrare pe a a a , , , , , , termen lung, si c rezolvarea eventualei probleme imediate de care te-ai lovit este de fapt marginal carierei tale a a de programator profesionist.

Ca un viitor profesionist ce eti, citete cu atenie acest material, si ncearc s nelegi nu numai conceps s t a a t tele de care te loveti, ci si implicaiile lor. Analizeaz -le, att pe el nsele, ct si n relaie cu celelalte s t a t concepte introduse. Cu ct sintetizezi mai mult atunci cnd ntlneti ceva nou, cu att vei ajunge s s a jonglezi cu noiunile nvate mai rapid, lucru care i va permite s i inovativ. t at t a De exemplu, n primul capitol vei nva despre reelistic . ntreab -te pe parcursul ntregii c ri ce at t a a at efecte au limit rile HTTP asupra posibilitilor sau asupra securitii. a at at

Un alt lucru de care ai nevoie este st pnirea limbii romne. Experienele noastre cu cursanii ne-au nvat a t t at c muli dintre cei ce aspir a programatori nu ndeplinesc aceast premiz . Unii dintre ei au avut diculti nu a t a a a at pentru c nu ar sti s vorbeasc , ci pentru c nu au realizat intensitatea cu care punem accent pe acest aspect. Nu a a a a te teme, prima faz de tutelare are exact acest scop: s te aduc pe linia de plutire. a a a Si nu n ultimul rnd, ai nevoie de st pnirea relativ bun a limbii engleze. F r ea oricum nu ai avea succes n a a aa programare de multe ori va trebui s citeti documentaii n englez , ba mai bine, s i documentezi aplicaiile n a s t a a t t englez . Apropo de documentaie, toate proiectele de succes au o documentaie bun n englez . Nu te impacienta a t t a a dac nu te simi preg tit s scrii ceva n englez , pn la capitolul 3 inclusiv vei avea sansa s i mbun teti a t a a a a a t a at s engleza doar citind.

Convenii folosite t
Pentru a-i face lectura ct mai pl cut , cartea de faa respect anumite convenii, att de natur tipograc , ct t a a t a t a a si inerente comunitii din jurul lucr rii. at a n primul rnd, pe prima pagin se a un link c tre pagina de start a proiectului. Aceast pagin va numit a a a a a a mereu pagina phpro. Urm toarea seciune i va descrie despre ce este vorba n detaliu. a t t n al doilea rnd, cnd spun wikipedia, m refer la versiunea original n englez a site-ului http://en. a a a wikipedia.org/. n carte nu voi face referire la niciun site n romn . a Pagina PHP si manualul PHP se refer la paginile ociale http://php.net/ si respectiv http:// a www.php.net/manual/en/. Demn de menionat este c nu voi folosi dect site-urile ociale ale produselor t a despre care vorbesc.

Urmarea link-urilor, n special cele c tre wikipedia si c tre manualul PHP, nu este opional . Informaiile a a t a t prezentate n acele pagini fac parte din cartea de faa. t

n ciuda credinelor populare, HTML nu este un limbaj de programare. t Un limbaj de programare pentru programarea clientului, a browser-ului, n contrast cu PHP, cu care se programeaz serverul. n a ciuda credinelor din folclor, JavaScript si Java sunt limbaje complet diferite si de sine st t toare. t aa
8

Dezvoltare web cu PHP Cuvintele importante sunt scrise cursiv, termenii si noiunile importante sunt scrise nclinat, iar cuvintele care t fac referire la nume de funcii, comenzi sau instruciuni care trebuie introduse ntr-un ier sau ca comand , sau t t s a 9. cuvinte cheie specice unui anumit limbaj sunt scrise cu font neproporional t Ap s rile de taste sunt scrise n chenare, astfel ENTER nseamn s apei enter o dat , iar CTRL+F nseamn aa a a s a a s apei tasta CTRL si n timp ce o ii ap sat , s apei F . a s t a a a s a a a Codul surs , de obicei n PHP, va ar ta n felul urm tor:

Listing 1: Convenie listare t


1 2

<?php phpinfo();

Numerele de pe marginea stng reprezint numerele liniilor de cod corespunz toare si nu trebuie scrise. Ele a a a deservesc unei mai uoare identic ri n explicaiile din text. s a t Codul surs va conine si caracterul . Acesta trebuie v zute ca apostrof. Altfel spus, copierea si lipirea codului a t a surs prezentat nu va funciona pur si simplu. Acesta trebuie scris de tine nsui, deoarece caracterul respectiv este a t t (intenionat) greit. Procedez astfel pentru a mpiedica copierea codului surs . Acesta trebuie neles. t s a t Atunci cnd introduc termeni noi, ncerc s ofer si traducerea n englez , n parantez . Exemplu: a a a Un astfel de atac se numeste man in the middle, deoarece atacatorul se a la mijloc, ntre cele dou a a , capete (en. endpoints). iar la sfritul c rii poi g si o referina a tuturor acestor termeni. s at t a t Exist trei feluri n care marchez paragrafe: a

R U D

Paragrafele care te atenioneaz asupra unui lucru important sunt marcate ca atare, ca cel de faa. t a t

n unele locuri vreau s -i atrag atenia asupra unei practici de programare bune. at t n acelai timp, cteodat i atrag atenia asupra unor lucruri care, dei sunt posibile, nu ar trebui f cute. s a t t s a

Exerciiile sunt marcate cu un creion, iar num rul de stelue reprezint dicultatea lor, ntre 0 (nicio stelua) si t a t a t 3 (trei stelue). Exemplu: t

Eu sunt un enun. t

Exerciiu de dicultate 1* t

Exerciiile de dicultate zero necesit doar nelegerea exemplelor si explicaiilor imediat anterioare si mici t a t t modic ri sau ad ugiri. Cu ct solicitarea inteligenei si a capacitii de sintez a cursantului crete, cu att crete a a t at a s s si num rul steluelor. a t La evaluarea dicultii exerciiilor procedez n felul urm tor: n primul rnd, plec de la premiza c cursantul at t a a stie toate noiunile din capitolul anterior, chiar dac nu le-a sintetizat pe toate. n acelai timp, plec de la premiza t a s c restul capitolelor trecute au fost bine sintetizate. a

Dac trebuie s sari cu mai mult de un capitol napoi pentru a revizui ceva, atunci este un indiciu c nu a a a ai trecut prin toate stadiile de studiu n mod consecvent. Seciunea urm toare i va explica care sunt t a t aceste stadii.

Dac observi nc lc ri ale acestor convenii, te rog s le raportezi pe pagina de greeli a phpro. a a a t a s
9

monospace

Dezvoltare web cu PHP

Cum s nvei ecient programare a t


Momentan cartea de faa nu acoper nc materia aa cum a vrea nu este complet . ns subiectele abordate t a a s s a a sunt acoperite complet, cel puin la nivel conceptual. t Cartea n sine nu este gndit pentru a folosit singur , ci n paralel cu comunitatea phpro. n particular, a a a unele exerciii chiar nu sunt gndite pentru a rezolvate de cititor singur, ci cu susinerea tutorilor de pe phpro. t t Pe phpro g seti si ajutor sub form de idei si indicii pentru rezolvarea exerciiilor. a s a t nvaa terminologia, nelege-o si folosete-o. Dac setul de scule de programare folosite este lancea ta de t t s a programator, atunci terminologia este vrful lancei. Care este diferena dintre un toiag tocit, si o lance f r vrf? t aa Exact, nici una. Nu te apuca s foloesti termeni pe care nu-i nelegi, ci documenteaz -te nainte. Cu o lance a s t a ascuit : t a te vei putea nelege mai uor cu ali programatori; tu i vei nelege pe ei, si ei pe tine t s t t pe m sur ce termenii nelei de tine devin mai compleci, vei putea acumula cunotine din ce n ce mai a a t s s s t complexe bazate pe cele anterioare, n ritm exponential. La nceput i se va pare frustrant, ns dac vrei s t a a a devii bun, oricum va trebui s nvei termenii odat si-odat . Deci de ce s nu faci totul ca la carte de la bun a t a a a nceput? un programator profesionist stie mai mult de un singur limbaj de programare; ai uimit dac ai aa ci a t termeni si cte concepte sunt comune multor limbaje. Dac stii terminologia, chiar dac ai nvat-o n (cu) a a at PHP, vei putea trece la un nou limbaj cu mult mai puine eforturi. Primul limbaj (nvat corect) este cel mai t at greu, apoi i se va pare oare la ureche t Urmeaz link-urile n timp ce studiezi; acest carte nu este si nu va niciodat complet se pleac de la a a a a a premiza c citeti si nelegi ce se a la acele link-uri nainte de a trece mai departe. a s t a Notele de la subsol sunt importante; dac acestea introduc termeni neexplicai anterior sau n imediata vecin a t a tate, atunci trebuie reinute si f cute leg turi atunci cnd termenii respectivi sunt introdui pentru prima oar . t a a s a a t a a Plec de la premiza c cititorul meu are un anumit nivel de inteligena. Asta nu nseamn c nu iau n serios orice nel murire. ns m atept ca noiunile prezentate s e citite cel puin, si apoi nelese. Nu are rost s citeti a a a s t a t t a s o carte dac ... nu o citeti cu trup si suet. Atunci cnd ai o problem , ia-o gradual, netrecnd la urm torul stadiu a s a a pn nu l ndeplineti pe cel anterior. a s

Stadiile10 sunt: citire, nelegere, sintez , imaginaie (jonglarea cu noiunile), inovaie. t a t t t

A sintetiza nseamn a face leg turi cu toate celelalte noiuni deja nvate. De exemplu vei nva ce nseamn a a t at at a un array, iar peste cteva capitole vei face cunotina cu obiecte. Dac vei sintetiza cum trebuie, i vei da seama s t a t singur c este foarte posibil s ai un array de obiecte. a a A jongla cu noiunile are ca efect practic faptul c cititorul stie s pun n practic si s combine lucrurile t a a a a a nvate de ca si cum acele noiuni ar fost inventate de el. at t

i poi uura procesul de sintez asimilnd terminologia nc din momentul introducerii ei. t t s a a

Aceast sintez e foarte important , si de fapt, o faci de cnd erai copil. De exemplu, ai v zut-o pe mama ta a a a a t ind legumele cu cuitul. Mai trziu, la joac , ai avut nevoie s tai o aa, si nu aveai dect un cuit n apropiere. a t a a t t Ti-ai dat seama c poi t ia aa cu cuitul, dei nu este o legum . Altfel spus, ai sintetizat scopul uneltei cuit: s a t a t t s a t a taie ceva. Lucrarea de faa explic foarte bine noiunile, de la zero, ns sinteza i este l sat ie. Motivaia mea de a t a t a t a at t proceda aa este urm toarea: dup cum sugereaz subtitlul c rii Pentru ncep torii n programare si n PHP s a a a at a care vor s devin profesioniti scopul meu e s te ndrum pe calea profesionalismului. Pe de cealalt parte, sunt a a s a a
Noiunea de stadiu de nv are este extinderea autorului a sistemului japonez shu-ha-ri (en. retain-detach-transcend, jp. t at Detalii pe http://www.makigami.info/cms/japanese-learning-system-japan-36.
10

).

Dezvoltare web cu PHP un darwinist convins, si dac nu reueti nici s devii profesionist, nici s vezi utilitatea acestei c ri, atunci e mai a s s a a at bine aa. Ultimul lucru pe care l vreau este s te susin s devii ceva n care nu ai avea succes. s a t a Capacitatea de sintez pe care o vei avnd la sfritul c rii mai are nc un efect pozitiv asupra viitorului a s at a profesionist din tine: n programare, vei confruntat cu nevoia de a reutiliza codul pe care-l scrii, astfel nct s a nu i nevoit s rescrii acelai cod iar si iar, doar pentru c trebuie s -l personalizezi puin. ns pentru a putea face a s a a t a codul att de exibil nct s -l poi adapta cu uurina, trebuie s prevezi cazuri imprevizibile; altfel spus, s te a t s t a a gndeti la imposibil. s

Nu copia pur si simplu exemplele din carte, pentru c riti s te trezeti un moment dat c nu eti n stare a s a s a s s scrii ceva de unul singur. n schimb citete cu atenie codul si explicaiile de dinaintea si dup el, apoi a s t t a nchide cartea si scrie totul din minte, argumentndu-i (pe baza explicaiilor pe care le-ai citit) de ce t t faci un lucru ntr-un anumit fel, sau de ce l faci de fapt.

Stiu c este mai uor s copiezi, dar vor veni vremuri cnd va trebui s inventezi singur un script. Deci a s a a obinuiete-te de pe acum s scrii singur, si de ce nu, s faci greeli. Atunci cnd faci o greeal si PHP i spune s s a a s s a t asta, citete cu atenie mesajul de eroare, apoi corecteaz -i codul, si ine minte pentru ecare fel de greeal ce s t at t s a eroare genereaz , pentru ca n viitor s poi identica mai rapid greelile pe care le faci pe baza mesajelor de eroare a a t s pe care i le arat PHP. t a

Aceast putere de imaginaie, n combinaie cu capacitatea ta de analiz si sintez , si pe o fundaie a t t a a t solid a nelegerii conceptelor si termenilor cu care intri n contact, sunt cheia succesului garantat. a t

Comunitatea
Dezvoltare web cu PHP Pentru ncep torii n programare si n PHP care vor s devin profesioniti nu este a a a s pur si simplu o carte, ci o comunitate si o serie de servicii pe care aceast comunitate le ofer . Cartea de faa a a t constituie doar scheletul, fundaia studiului. Pentru a benecia deci de aceste servicii, cititorul c rii trebuie s e t at a si cursant n cadrul comunitii. at Pagina phpro este pagina de start a comunitii. Printre serviciile oferite se num r : at aa vericarea soluiilor exerciiilor si oferirea de indicii acolo unde cursantul s-a blocat, individual, pentru t t ecare cursant n parte, exact acolo unde are nevoie claricarea nel muririlor pe care cursantul le are n urma citirii explicaiilor a t articole care ntregesc conceptele prezentate n carte; excursuri garania c cursanii11 au ntr-adev r potenialul de a deveni profesioniti t a t a t s servicii care sunt folosite n viaa real a unui programator t a Ceea ce comunitatea phpro nu este, este un loc unde poi primi ajutor la problemele de care te-ai lovit pe cont t propriu. Altfel spus, comunitatea noastr este strict una de studiu. a

Exerciiile t
Exerciiile sunt parte integrant a studiului. Scopul exerciiilor nu este numai de a te testa, ci si de a te nva t a t at lucruri noi. De fapt, unele exerciii au menirea exclusiv de a te nva ceva. t a at Indiferent de menirea ec rui exerciiu, poi apela la comunitatea phpro pentru susinere, sfaturi si indicii la a t t t exerciii. n fapt, chiar va trebui s o faci la unele exerciii vei avea nevoie de asta. t a t Desprinz ndu-te de comunitatea phpro, riti s studiezi ceva de unul singur si s ai impresia c ai neles totul a s a a a t corect, ns lucrurile nvate se pot aterne greit n mintea ta, si la un moment dat te vei lovi tu nsui de probleme a at s s t din cauza asta.
11

n special cei care au reuit s ofere soluii la primele trei exerciii din capitolul 2, eventual cu susinerea tutorilor s a t t t

Dezvoltare web cu PHP Avnd ns permanent, la ecare exerciiu, un tutore lng tine care te ndrum , sansele ca un concept de a t a a programare s e neles si aplicat greit scad considerabil. a t s Unele exerciii vor direct legate de comunitate si de serviciile pe care aceasta le ofer . n capitolul patru de t a exemplu, exerciiile i vor cere s formezi echipe cu ali cursani, si s concurezi mpotriva altor echipe, folosind t t a t t a scule de programare aa cum sunt folosite n viaa real a unui programator, precum un bug tracker sau un revision s t a control system. ns pentru a primi acces la aceste servicii pe care comunitatea phpro le ofer gratis, trebuie s rezolvi toate a a a exerciiile anterioare sub tutela comunitii, dovedind astfel c ai potenialul unui programator bun. t at a t

Cum pot ajuta?


Att programatorii experimentai, ct si ncep torii, pot ajuta, iar ajutorul lor este apreciat n egal m sur . t a a a a Punctul de ntlnire pentru toi este phpro, unde poi g si ndrumare despre ce poi face, sau unde poi raporta t t a t t ce ai de raportat. De la cititorii avansati m astept la critic constructiv , sfaturi sau idei. Feedback -ul m bucur , ns vreau s a , a a a a a a , atrag atentia asupra unui lucru: exist situatii n care, atunci cnd trebuie s explici ceva, trebuie s faci compromia a a , , suri ntre corectitudinea tehnic si usurinta cu care notiunile pot acumulate de cititor (en. the learning curve), iar a, , , , cu compromisurile suntem obisnuiti din programare. Asa se face c pe alocuri ofer explicatii nu tocmai corecte, a , , , , care sunt corectate apoi. Asigur -te c ai citit tot continutul relevant (i mai ales notitele de la subsol) nainte de a a a s , , raporta o greseal cel mai probabil explicatiile sau denitiile sunt reluate si slefuite undeva. a , , , , , n privinta calit tii c rii, exist trei mari probleme: a, a t a , Nu cred n cacofonii. Consider c propria imaginatie e singura vinovat dac vezi alte lucruri cnd citesti. a a a , , Ca atare, refuz s le corectez. Ba mai r u, corectarea lor prin folosirea virgulei sau reformul ri mai mult ar a a a ngreuna inteligibilitatea. Folosesc xenisme. Resursele n limba englez sunt cele mai acurate si cele mai actuale, din acest motiv nu a , ncerc s evit folosirea lor. Asta ti va permite, pe termen lung, s te poti ajuta singur. Pentru a articula un a a , , xenism pun cratim , si apoi particula specic . De exemplu web -ul; ns : Internetul deoarece cuvntul a , a a internet exist n limba romn . a a Este foarte posibil s ntlnesti formul ri ciudate, cu ordinea cuvintelor inversat , si altfel de greseli similare. a a a , , , Cauza acestui lucru este c 90% din timp vorbesc germana, lucru care-si las amprenta. Corecturile sunt a a , binevenite.

O privire de ansamblu a capitolelor


1. Reelistic noiunile de reelistic sunt necesare pentru a nelege mai uor apoi lucruri legate de securitate, t a t t a t s optimizare sau servicii web 2. Controlul uxului de execuie si de date te nvaa constructele pentru controlul informaiilor n cadrul t t t aplicaiei t 3. Reutilizarea si modularizarea codului mp rirea codului n funcii si iere, separarea logicii aplicaiei de at t s t vizualizare 4. Baze de date si lucrul n echip cum s lucrezi n echip , de la anumite reguli de comunicare, pn la a a a a mailing lists si git; documentarea proiectului; debugging si proling pentru a lua cele mai bune decizii; database design pn la si inclusiv 3rd normal form a 5. Securitatea aplicaiilor web XSS, sql injection, CSRF t 6

Dezvoltare web cu PHP 6. Programare orientat pe obiecte OOP, concepte generale, cteva patterns (helper, strategy, factory, singlea ton), test-driven development, SPL 7. ajax, json, servicii (REST, SOAP, XML-RPC), XML, PDO si alte delicii, si ca ultima frontiera: php internals. ncepnd cu capitolul 4 proiectele se vor realiza n echipe, iar tutorii vor avea doar rolul de consilieri. Proiectele rezultate astfel vor aparine respectivilor programatori, si vor putea folosite pentru portofoliile cursanilor. t t

Capitolul

Retelistic a ,
Cu PHP controlezi ce se ntmpl pe server,1 server care este conectat la Internet. Deci folosirea PHP este a strns legat de retea. Din acest motiv, ntelegerea notiunilor fundamentale de retelistic este indispensabil .2 Nu a a a , , , , voi intra n toate detaliile, doar n ce ai nevoie ca programator si pentru a-ti seta mediul de programare n PHP, , , pentru a crea website-uri sigure, si pentru a ntelege notiunile necesare n folosirea extensiilor PHP care lucreaz a , , , cu reteaua. ,

Noduri, TCP/IP, retele ,


Retelistica (en. networking) se ocup cu comunicarea ntre asa-zise noduri (en. nodes). Un nod poate un a , , calculator personal, un router, un server, practic orice dispozitiv digital conectat la reea. t nainte de a vedea printr-un exemplu practic prin ce noduri din retea trec informatiile atunci cnd cauti ceva pe , , , web cu google, trebuie s faci cunostinta cu cteva denitii generale. a , , , Exist dou mari tipuri de interfete pentru interactiunea cu un sistem de operare (en. operating system)3 : a a , , GUI (en. graphical user interface) Este cea mai comun printre utilizatorii ocazionali, este usor de utilizat si nu necesit cunostinte avansate a a , , , , de IT pentru a o folosi. ns te limiteaz n folosirea programelor a a CLI (en. command line interface) Este destinat profesionistilor. Necesit cunostinte mai avansate, ns este mult mai puternic si exibil a a a a, a , , , Sub MS Windows, interfata CLI este cunoscut si ca MS-DOS Prompt. Pentru a-l lansa n executie, du-te n Start a, , , -> Run, si tasteaz cmd. Apare o fereastr neagr si neprietenoas . Sub GNU/Linux aceasta este cunoscut sub a a a, a a , numele de consol , terminal sau shell (unul dintre ele ind bash ). a Deschide interfata CLI a sistemului t u si introdu comanda tracert google.com pentru Windows sau a , , traceroute google.com pentru GNU/Linux. Figura 1.1 i d un exemplu de output. t a Dup cum vezi, tot ceea ce i trimit eu lui google.com si ce mi trimite el napoi trece prin alte 11 noduri din a , retea. Dac un infractor (en. cracker) detine controlul asupra unuia dintre aceste noduri, poate vedea absolut orice a , , vorbesc eu cu google.com. Un astfel de atac se numeste man in the middle, deoarece atacatorul se a la a , mijloc, ntre cele dou capete (en. endpoints). a
n acest capitol vei vedea c termenul server este deseori folosit gresit, ca si n acest paragraf. a , , De exemplu pentru ntelegerea implicatiilor de securitate, folosirea extensiilor precum cURL sau cereri asincrone AJAX. Nu i face t , , griji dac nu nelegi toi aceti termeni deocamdat . a t t s a 3 abv. OS
2 1

Dezvoltare web cu PHP

1.1. NODURI, TCP/IP, RETELE ,

Figura 1.1: Ruta c tre un nod a Binenteles c nu numai eu as victima unui astfel de atacator, ci oricine trimite pachete de date (en. data a , , packets) oricui altcuiva (nu neap rat numai lui google.com), atta timp ct pachetele de date trec prin nodul a controlat de el. Toate nodurile din reeaua global numit Internet au o adres unic numit adres IP (en. internet protocol ). t a a a a a a Ea este de forma xxx.xxx.xxx.xxx, unde xxx este un num r ntre 0 si 255. Unele adrese IP au o semnicaie a t special . De exemplu, ecare nod are adresa IP 127.0.0.1. Ea nu este util n Internet, deoarece orice pachet a a de date trimis la acea adres ajunge napoi la expeditor, f r nici m car a trece pragul sistemului local. ncearc de a aa a a exemplu comanda tracert 127.0.0.1. Alt bloc de adrese IP speciale sunt toate adresele ntre 192.168.0.0 si 192.168.255.255. Ele sunt rezervate reelelor locale (en. local area network ).4 t Un astfel de exemplu este chiar reeaua mea local 5 . Dup cum vezi n gura 1.1, pachetele de date care pleac t a a a 6 meu. Topologia reelei din de la mine trec mai nti prin nodul 192.168.2.1. Aceasta este adresa router-ului t perspectiva mea arat ca n gura 1.2. a

Figura 1.2: Exemplu de topologie a unui LAN Misiunea unui router este s distribuie pachetele pe care le primete altor calculatoare din LAN -ul meu. Asta a s mi permite s am acces la Internet cu mai multe calculatoare, ns din exterior LAN -ul este v zut ca avnd o sina a a gur adres IP: 84.43.53.126, si deci ca un singur calculator. Dac nu puneam acest router ntre calculatoarele a a a mele si Internet, nu puteam conecta la Internet dect un singur calculator, care avea adresa IP 84.43.53.126. Exist deci dou tipuri de adrese IP, cele interne reelei mele, precum 192.168.2.1 sau 192.168.2.6 a a t si cele externe reelei, publice, precum 84.43.53.126 sau una dintre adresele lui google.com, t 74.125.87.104. Cele dinti se numesc adrese private 7 sau adrese LAN, cele din urm sunt n schimb adrese a
abv. LAN Un bun punct de start este http://en.wikipedia.org/wiki/Private_network. De acolo poi urma link-uri intersante t c tre noiunile ce urmeaz a introduse, si multe alte lucruri neprezentate aici. a t a 6 http://en.wikipedia.org/wiki/Router 7 le poi numi si intranet, analog cu cele publice, internet. t
5 4

Dezvoltare web cu PHP publice.

1.2. DOMENII

Internetul este o reea de LAN-uri si WAN-uri (en. wide area network ) interconectate. Asta transform t a Internetul n cea mai mare WAN, o reea global . t a

Dac nu ai un router la mijloc, ntre tine si Internet, atunci i poi vedea adresa IP extern prin interfaa pus la a t t a t a dispoziie de sistemul t u de operare. Sub windows, introdu comanda ipconfig /all n CLI, sub GNU/Linux t a ifconfig -a. Dac ns ai un router la mijloc, si nu stii cum s -i accesezi interfaa de congurare, atunci trebuie s i ceri a a a t a unui alt calculator de pe Internet s -i spun ce adres IP vede el c ai, pentru c ce vede el va mereu adresa ta at a a a a Internet, extern . a

Caut pe web cu un motor de c utare what is my ip address si compar adresa aat de acea aplicaie web cu a a a s a t ce adres IP i raporteaz OS-ul t u. Ce poi deduce din aceast comparaie? a t a a t a t

What is my IP Address?*

Domenii
Teoretic, este sucient s stii adresa IP a unui nod pentru a comunica cu el. De exemplu, am aat a c una dintre adresele IP ale lui google.com este 74.125.87.104. Deci putem intra bine mersi pe adresa a http://74.125.87.104. ns oamenii nu pot reine uor numere. De aceea s-a inventat DNS (en. domain name system), un sistem a t s care convertete nume precum google.com, n adrese IP. Atunci cnd introduci google.com n browserul s t u, acesta trimite o cerere la serverul DNS si primete napoi adresele IP asociate cu google.com. Abia apoi se a s conecteaz la acea adres IP, si i cere informaii. a a t Sub MS Windows i poi aa serverele DNS cu aceeai comand ipconfig si parametrul /all. Sub t t s a GNU/Linux, acestea se a n mod normal n ierul /etc/resolv.conf. a s S presupunem c serverele tale DNS se deconecteaz de la reea.8 Atunci nu vei mai putea accesa a a a t http://google.com, pentru c browserul t u nu mai poate aa adresa IP corespunz toare. ns asta nu te a a a a mpiedic s introduci manual adresa IP, dac o stii. a a a Pentru a aa dac un nod este conectat la reea se folosete comanda ping9 , avnd primul parametru adresa a t s IP pe care vrei s o verici. a

A adresa IP a serverului t u DNS si trimite-i un pachet de date cu ping.10 a a Poi interoga manual serverul DNS cu comanda nslookup (en. nameserver lookup). Exemple: nslookup t google.com, nslookup 192.0.32.10. Este deci posibil s ai att adresele IP pornind de la un nume a precum google.com, ns si numele, pornind de la o adres IP de Internet (nu de intranet). Dei este posibil a a s ca mai multe domenii s pointeze c tre aceeai adres IP, o adres IP nu poate pointa (prin reverse DNS ) dect a a s a a spre un domeniu.11
O glum comun este s spui c administratorul serverului s-a mpiedicat din greeal de stecher si l-a tras din priz f r s i dea a a a a s a a aa a s seama. 9 o numim comand , ns n realitate este un program, si se numete ping.exe a a s 10 Acest exerciiu nu trebuie rezolvat n cadrul programului de tutelare, este un exerciiu suplimentar, pentru tine. t t 11 Tehnic este posibil, ns practic poate cauza probleme. a
8

Ping your DNS server

10

Dezvoltare web cu PHP

1.3. PROTOCOALE

Totui, din ce este compus o adres precum www.google.com? .com se numete TLD (en. top level s a a s domain). Ceea ce se a n stnga sa este un subdomeniu, pn la urm torul punct. Astfel, google este un a a a subdomeniu al lui .com, iar www este un subdomeniu al lui .google.com. Dac vrei s ai un domeniu al t u, trebuie s cumperi unul de la o rm numit domain name registrar. Pentru a a a a a a a nva PHP nu ai nevoie de un domeniu, poi face totul pe calculatorul t u personal, aa cum vei vedea n acest at t a s capitol.

Protocoale
Internetul este f cut din aa-numite servicii. Cele mai cunoscute servicii sunt web-ul pentru documente a s interconectate,12 pop3 sau imap pentru e-mail, irc (en. internet relay chat) pentru chat, sau ftp (en. le transfer protocol ) pentru transferul de iere. s Pentru a folosi unul dintre aceste servicii, ai nevoie de un program special numit client. Nu exist un client a care s tie s acceseze toate serviciile, pentru c ecare serviciu este diferit de celelalte. Vom vedea mai trziu a s a a de ce. Astfel, avem clieni pentru www, clieni pentru ftp, clieni pentru irc, s.a.m.d. t t t Serviciul world wide web, sau pe scurt web-ul, este att de r spndit, nct oamenii au dat un nume special a clienilor www: browser. Exist mai multe browsere, create de diferite rme. Printre cele mai cunoscute se t a num r : aa Firefox, creat de Mozilla Internet Explorer, creat de Microsoft Opera, creat de Opera Software Google Chrome, creat de Google Safari, creat de Apple Colocvial vorbind, te poi referi la client si ca ind calculatorul pe care ruleaz clientul, sau chiar la utilizatorul t a uman din spate care i d instrucii clientului. n explicaii voi ncerca s nu m exprim colocvial, ci corect din a t t a a punct de vedere tehnic. n continuare vom clarica ce se ntmpl atunci cnd ceri o pagin web cu ajutorul unui browser de la un a a server. Imagineaz -i c un calculator st conectat la reea si nu face nimic din proprie iniiativ . Acest calculator at a a t t a se numete server. Pe server, care este maina zic , ruleaz un program numit daemon. Acesta ateapt cones s a a s a xiuni din exterior, pe care s le deserveasc . Administratorul serverului va spune colocvial the server is up and a a running, dar ce vrea s spun de fapt este c serverul este conectat la Internet iar cel puin un daemon ateapt a a a t s a noi conexiuni. S nu uit m c ecare serviciu este diferit. Aa cum avem diferii clieni pentru diferite servicii, tot la fel avem a a a s t t si daemon-uri diferite pentru ecare serviciu. Exemple de astfel de daemon-uri: apache pentru serviciul www, UnrealIRCd pentru irc, postx pentru e-mail, s.a.m.d. Reine c acestea sunt programe, la fel cum este si firefox.exe. n contrast cu asta noiunile de client t a t si daemon sunt clasic ri generice pentru tipuri de software. a Ceea ce nu am ncetat s sugerez pn acum devine evident: cele dou p ri, clientul serviciului pe care doresc a a a at s -l utilizez, si daemonul care e capabil s -i r spund clientului meu cu informaii utile, trebuie s comunice unul a a a a t a cu cel lalt. a Aceast comunicare dintre cele dou programe se va desf sura ntr-un limbaj comun numit protocol. Fiecare a a a serviciu are un protocol specic lui. Astfel avem un protocol irc pentru serviciul irc, protocolul ftp pentru serviciul
12

Prin link-uri.

11

Dezvoltare web cu PHP

1.3. PROTOCOALE

ftp, sau protocolul http pentru serviciul web, s.a.m.d. De aici vine acel http:// care precede orice adres web. a , Aceast adres se numete URL (en. uniform resource locator), o form de URI (en. uniform resource identier). a a s a De obicei pe un server ruleaz mai multe daemon-uri n paralel si care ateapt s deserveasc cereri. Dar cum a s a a a s stie sistemul de operare al serverului pentru ce daemon este destinat un anumit pachet de date? Din cte stim a pn acum, nu are cum, pentru c OS-ul nu nelege noiunea de protocol. Totui OS-ul trebuie s paseze datele a a t t s a primite pachet cu pachet daemon-ului corect. Pentru a rezolva aceast problem ecare pachet de date este nsemnat cu un port. Un port este un num r a a a 13 corect. ntre 1 si 65535 care i permite sistemului de operare s paseze pachetul de date procesului a Atunci cnd administratorul serverului (en. sysadmin) lanseaz n execuie un daemon, acesta i spune OS-ului a t c ascult (en. listen) pe un anumit port. Din acel moment, OS-ul tie c acel port i aparine acelui daemon. a a s a t Astfel, sysadmin-ul poate rula pe sistemul s u mai muli daemoni concomitent, chiar si pentru servicii diferite, a t f r a-i face griji c pachetele de date ar putea ajunge la daemon-urile greite. aa s a s Important de menionat este si c ecare serviciu are un port standard. Serviciul www are 80 ca port standard. t a Astfel, URL-urile http://example.com:80 si http://example.com sunt absolut echivalente. n toate cele explicate pn acum nu am intrat n detalii importante precum TCP/IP, ns este recomandat a a a citirea si nelegerea acelor noiuni, ct si a celorlalte articole pe care le poi urma de acolo. Foarte important este t t t a si nelegerea modelului OSI (en. open system interconnection). t

1.3.1

Primul exerciiu de hacking t

nainte de a trece la coninutul propriu-zis, vreau s claric de ce aceast seciune folosete termenul hacking. t a a t s n primul rnd, pentru a face acest capitol mai atractiv pentru toi cititorii care s-au plictisit de teoria uscat 14 t a de reelistic prezentat pn acum, cnd ei vor de fapt s nvee PHP. Nu este ceva iluzoriu, ceea ce vei face n t a a a a t continuare chiar are de-a face cu hacking. ns hacking implic mult mai multe15 cunotine paginile anterioare a a s t doar i-au prezentat sumar nite concepte de baz . t s a n al doilea rnd, pentru a-mi crea ocazia de a explica termenul de hacker. n zilele noastre, mass-media, n ncercarea sa de a crea16 senzaionalul, a redenit hacker ca infractor. ns nu asta este semnicaia original t a t a a cuvntului. Un hacker este o persoan care nelege foarte bine ce face. Poi un hacker n orice domeniu, a t t dar atunci cnd devii un hacker ntr-un domeniu, stii tot ce mic n brana ta. Un hacker n calculatoare stie totul s a s despre calculatoare, ncepnd de la electronica procesorului, si terminnd cu analiza psihologic a omului n relaia a t 17 sa cu calculatorul (sau, pe larg, cu tehnologia n general). O alt concepie greit despre hacking este c nseamn s intri n sisteme care nu-i aparin (s le spargi). a t s a a a a t t a Nu asta caracterizeaz hackerul, ci dup cum am mai spus, nelegerea lucrurilor cu care are de-a face. Te poi a a t t numi hacker la fel de bine dac personalizezi un program scris de altcineva pentru nevoile tale. n astfel de cazuri a se spune c ai hack-uit codul surs , c l-ai neles mai nti, pentru a-l putea modica. Dup cum vezi, hacking a a a t a nseamn nelegere. a t Felul n care aplici aceast nelegere depinde de tine. Asta nu i absolv pe cei care folosesc ceea ce stiu pentru a t a lucruri ilegale s e catalogai drept infractori. Pe de cealalt parte, hackerii adev rai reacioneaz acid cnd sunt a t a a t t a privii ca nite infractori, deoarece ei stiu c hacking este de fapt ceva constructiv si benec unei mini s n toase. t s a t a a Ei prefer ca infractorii s e numii crackeri, pentru a deosebi binele de r u. a a t a ................................................................................................... Atunci cnd introduci un URL ntr-un browser, acesta face multe lucruri n fundal. Unul dintre cele mai importante lucruri este comunicarea n limbajul HTTP (en. hyper text transfer protocol ) cu daemon-ul de pe serverul dorit, asta dup ce a aat adresa IP a acestuia de la serverul DNS. a
Un program care este executat. Gndete-te la ce listeaz task manager. s a Trebuie s recunoatem c nu a fost deloc uscat . a s a a 15 Si cnd spun asta, nu exagerez. 16 n sensul de a inventa 17 Cel mai renumit exemplu este Kevin Mitnick
14 13

12

Dezvoltare web cu PHP

1.3. PROTOCOALE

Noi vrem s facem manual ceea ce ar face un browser automat pentru noi. Pentru asta, avem nevoie de un a program numit telnet. Este un program foarte simplu, tot ce face este s stabileasc o conexiune cu daemonul, a a si s -i transmit datele pe care le tast m. a a a O dat ce conexiunea este stabilit , ambele endpoints (daemonul si noi, cu ajutorul clientului telnet) pot scrie a a la gr mad date. De exemplu dac noi scriem a a a foo si daemonul ne r spunde cu a bar atunci toate datele comunicate arat ca un ier cu coninutul: a s t foo bar Imagineaz -i c dou endpoints comunic prin plicuri. Programul care iniiaz conexiunea (numit client), at a a a t a scrie datele pe care urmeaz s le trimit ntr-un plic. a a a Dac clientul si daemonul doar schimb date aa cum sunt, aa cum am face cu telnet, atunci doar acest plic a a s s este necesar. ns dac aplicaiile vor s se neleag reciproc, ele trebuie s foloseasc un protocol de comunicare. a a t a t a a a Pentru web, acest protocol este HTTP. Acest protocol de comunicare constituie layer-ul application level din modelul OSI.18 n astfel de cazuri, clientul va trebui s pun n plicul nostru nc un plic19 cu datele structurate specice a a a protocolului folosit, n cazul nostru cele specice protocolului HTTP. Majoritatea sistemelor de operare moderne vin cu programul telnet preinstalat. Deci deschide interfaa CLI si t lanseaz programul, pasndu-i ca prim parametru numele serverului, si port-ul ca al doilea parametru, deci: a telnet example.org 80 Dup ce s-a conectat, i poi cere daemonului ce document vrei, ns trebuie s o faci n limbajul HTTP, altfel a t a a nu va nelege ce vrem de la el. Altfel spus, folosind analogia cu plicul, noi ca oameni, deoarece stim c vrem t a s comunic m n HTTP, si deoarece telnet nu are noiunea de application layer, avem responsabilitatea de a ne a a t mpacheta singuri cererea n nc un plic cu formatul specic HTTP, plic pe care i-l pas m lui telnet, care ne va a a pune plicul pe rnd n toate celelalte layere (plicuri) din modelul OSI aate sub application layer: presentation, session, transport, network, iar electronica (de exemplu placa de reea) se va ocupa de data link layer si physical t layer.20 De exemplu, i vom cere pagina de start: GET / HTTP/1.1 Host: example.org

R
18 19

Simbolul nseamn c trebuie s apei tasta enter . Deci pentru a termina cererea HTTP, apei a a a s s de dou ori enter la rnd. Este posibil ca programul t u telnet s nu aeze ce tastezi. n acest caz, a a a s trebuie s scrii orbete, si s o faci exact ca mai sus, inclusiv scrisul cu litere mari/mici. a s a

GET este metoda HTTP (en. http method ) pe care o folosim pentru a cere resursa (documentul) dorit. Protocolul21 HTTP ne dicteaz c dup GET urmeaz un spaiu si apoi calea c tre documentul dorit, urmat de a a a a t a protocolul folosit, aici HTTP, un slash, si versiunea protocolului.
http://en.wikipedia.org/wiki/OSI_model sau mai multe, n funcie de protocolul de comunicare folosit t 20 Lucrurile sunt mult mai complexe, telnet singur nu ar putea face astfel de lucruri f r susinere din partea sistemului de operare. Aici aa t am simplicat imaginea pentru o mai uoar nelegere. s a t 21 Formatul

13

Dezvoltare web cu PHP

1.3. PROTOCOALE

Prima linie GET / HTTP/1.1 se numete request line. Dup ea urmeaz o serie de request headers, precum s a a Host mai sus. Request line si request headers mpreun sunt cunoscute si ca cererea HTTP (en. HTTP request). a Daemonul i va r spunde cu un text care arat cam aa, si care constituie r spunsul HTTP (en. HTTP rest a a s a ponse): HTTP/1.1 200 OK Server: Apache/2.2.3 (Red Hat) Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT ETag: b300b4-1b6-4059a80bfd280 (1) Accept-Ranges: bytes Content-Type: text/html; charset=UTF-8 Connection: Keep-Alive Date: Tue, 15 Dec 2009 11:52:46 GMT Age: 2528 Content-Length: 438 <HTML> <HEAD> <TITLE>Example Web Page</TITLE> </HEAD> <body> (2) <p>You have reached this web page by typing &quot;example.com&quot;, &quot;example.net&quot;, or &quot;example.org&quot; into your web browser.</p> <p>These domain names are reserved for use in documentation and are not available for registration. See <a href=http://www.rfc-editor.org/rfc/rfc2606.txt>RFC 2606</a>, Section 3.</p> </BODY> </HTML> ntreaga comunicaie cu daemonul este deci compus din trei segmente mari, ecare separate printr-o linie goal , t a a rezultat din ap sarea de dou ori a tastei enter : HTTP request, HTTP response headers (segmentul (1) din a a a outputul de mai sus), si HTTP response body (segmentul (2)). Felul n care se face cererea este parte din specicaia limbajului de comunicare HTTP. Acest limbaj, ca si t multe altele, au fost stabilite prin aa-numitele RFC-uri (en. request for comments). s Folosind analogia cu plicurile, cele sapte niveluri din modelul OSI nu sunt totul: protocolul HTTP nsui mai s denete nc trei plicuri care trebuie puse n plicul cu datele HTTP: s a HTTP request response headers response body Chiar dac cele trei segmente sunt scrise e de client, e de daemon, noi privim ntreaga comunicaie ca pe un a t ier unitar, si din acest motiv putem spune c este constituit din aceste trei segmente (plicuri). s a a Dup ce a primit r spunsul HTML, un browser ar face alte lucruri precum: a a crearea de cereri noi pentru ecare element care face referire la resurse externe precum imagini, frame-uri, scripturi Javascript, s.a.m.d. n urma acestui pas imaginile ar p rea c fac parte din document, ns ele sunt a a a de fapt resurse diferite si de sine st t toare, cu URL-uri diferite. aa executarea scripturilor Javascript 14

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Deoarece pentru ecare resurs extern este necesar crearea unei noi conexiuni TCP/IP si comunicarea cu a a a serverul n limbajul HTTP, protocolul HTTP este un protocol stateless 22 .

Faptul c HTTP este un protocol stateless are implic ri majore asupra structurii fundamentale n care i vei a a t concepe aplicaiile. t Gndete-te la aceste implic ri si explic -le n 200-300 cuvinte. s a a ns clientul nostru telnet nu stie toate aceste lucruri, el nu nelege limbajul de comunicare HTTP pe care l-am a t 23 cum nu nelege nici limbajul de formatare HTML, n consecina nici nu poate a a imagini sau executa folosit, t t s scripturi Javascript. El doar s-a conectat la daemon pe portul dorit de noi, si ne-a oferit posibilitatea de a comunica cu el n HTTP pentru a primi codul HTML al paginii. Dac n acest moment am vrea s cerem daemonului un alt ier, si nu cel standard, ar trebui s nu-i cerem a a s a resursa / (care urmeaz dup GET n cererea anterioar , si care este numit si root), ci numele resursei cu tot a a a a cu calea sa absolut . De exemplu, pentru ierul http://example.org/contact.html, cererea ar ar ta astfel: a s a GET /contact.html HTTP/1.1 Host: example.org Motivul pentru care trebuie s specic m la ce domeniu ne referim n cmpul (en. header eld ) Host (aici: a a example.org) este c un daemon HTTP poate deservi mai multe domenii simultan, si deci trebuie s -i spunem la a a care din ele ne referim. De exemplu, este posibil ca http://example.org si http://www.example.org s e dou site-uri complet diferite, independente, cu iere diferite. ntmpl tor, administratorul care a setat a a s a acel apache 2.2.3 (tim c acel program cu acea versiune deservete acel site din response header-ul Server) s a s a f cut set rile astfel nct cele dou hostname-uri complet diferite example.org si www.example.org s a a a a fac referire c tre acelai director de pe server. Din acest motiv nu conteaz c tre ce hostname trimitem cererea, a a s a a daemonul ne va r spunde cu aceleai iere. a s s

HTTP e stateless

Instalarea mediului de dezvoltare


n aceast seciune vom instala cele dou scule necesare cre rii si test rii aplicaiilor web, sau mai bine spus, a t a a a t scripturilor PHP. M voi limita doar la instruciuni pentru Microsoft Windows XP24 . Instalarea sub GNU/Linux a t este uoar : nu trebuie dect s instalezi pachetele de genul apache sau httpd si PHP din repozitoriul pus la s a a dispoziie de distribuia ta, aa cum ai instala orice alt program. Directivele de congurare sunt foarte similare, t t s deci o citire a instruciunilor urm toare nu este de prisos, chiar dac foloseti GNU/Linux. t a a s Paii si instruciunile de congurare sunt aceeai, att pentru windows, ct si pentru GNU/Linux. s t s n primul rnd, intr pe pagina ocial a daemonului apache25 si urmeaz linkul Download a ultimei versiuni, a a a momentan26 2.2.1927 . Alege un mirror 28 si apas change. Mirror-ul selectat automat ar trebui s e unul dintre cele mai bune. Apoi a a selecteaz versiunea Win32 Binary without crypto. a
http://en.wikipedia.org/wiki/Stateless_protocol Protocolul de comunicare este plicul ce corespunde application layer n modelul OSI. 24 Instalarea sub Windows Vista sau Windows 7 este asem n toare. a a 25 http://httpd.apache.org/ 26 08.08.2011 27 Tot timpul este bine s alegi ultima versiune, cea stabil . a a 28 Un mirror este o oglindire a unor iere. Mai multe rme sau instituii au ales s pun la dispoziie oglindiri ale ierelor de instalare s t a a t s pentru apache. Oricine poate face un mirror, ns e recomandat s ntiinezi autorul ocial, pentru ca acesta s pun un link c tre mirror-ul a a s t a a a t u. Toate ierele de pe un mirror sunt identice, deci teoretic nu conteaz ce mirror alegi, ns este recomandat s alegi un mirror apropiat a s a a a ie din punct de vedere geograc, pentru ca desc rcarea s e mai rapid . t a a a
23 22

15

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Figura 1.3: Pagina ocial Apache HTTPD a Introdu datele ca n gura 1.4 si treci la pasul urm tor. a

Figura 1.4: Setarea iniial apache httpd t a Alege modul de instalare custom, deoarece vrem s decidem exact unde si ce se instaleaz , ca n 1.5. a a n gura 1.6 avem un arbore cu toate componentele instalate. Apache HTTP Server 2.2.14 este p rina tele tuturor componentelor. Selecteaz -l si apas pe butonul Change... pentru a schimba locul de instalare. a a Creaz un nou director C:\webdev\ unde vor instalate toate sculele de programare web, introducnd a manual calea C:\webdev\apache exact ca n 1.7. Conrmarea te va aduce la dialogul anterior, iar n partea de jos ar trebui s scrie c programul va instalat la a a acea locaie. t Finalizeaz instalarea. La vizitarea adresei http://localhost/ ar trebui s vezi mesajul It works!. a a Asta nseamn c daemonul apache este setat corect si poate deservi pagini statice n formatul html, iar calculatorul a a t u este acum un server. a Noi ns vrem s gener m n mod dinamic cod HTML cu PHP. Deci intr pe pagina ocial PHP29 si urmeaz a a a a a a 30 (Figura ??). linkul de download, sub Windows binaries Selecteaz tipul de executabil VC9 x86 Thread Safe pentru versiunea PHP 5.3, ca n 1.8, apoi descarc a a
http://php.net n p rile ce urmeaz se folosete versiunea 5.3.6, dar tu trebuie s alegi ultima versiune stabil . Important este doar s selectezi at a s a a a versiunea compilat cu VC9, care este thread-safe. a
30 29

16

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Figura 1.5: Setare personalizat a

Figura 1.6: Setare httpd - Componentele instalate

Figura 1.7: Setare httpd - Calea instal rii a

17

Dezvoltare web cu PHP arhiva .zip care conine PHP, salvnd-o n C:\webdev\. t

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Figura 1.8: PHP - Tipul build -ului PHP Dup dezarhivare, coninutul s u va ar ta ca n Figura 1.9. a t a a

Figura 1.9: PHP - What you get nainte de a trece la integrarea lui PHP n apache, i recomand s instalezi un editor text ideal pentru ncep torii t a a n programare: Notepad++ 31 , de pe pagina ocial . a

R D

Notepad++ este foarte bun ca editor deoarece, ind un editor text, vezi exact ce faci, prelund controlul, aa cum ar trebui s o fac orice programator. Pe lng asta, Notepad++ i si coloreaz textul dac s a a a t a a recunoate limbajul n care scrii acel text, precum PHP sau HTML. s

Dac eti cumva tentat s foloseti editoare WYSIWYG32 precum Dreamweaver, atunci ar trebui s te a s a s a opreti acum - programarea nu e pentru tine. De ce? n afar de faptul c un astfel de editor nu te-ar s a a stimula s nvei, i-ar si crea mai multe probleme. Cu PHP, tu ca programator vei prelua controlul si vei a t t genera HTML. Pe lnga asta, astfel de programe nu sunt destul de puternice ca o minte uman , si mai si a genereaz cod greit. a s

PHP poate folosit si ca limbaj de scripting general, nu doar pentru generarea dinamic de HTML. ns pentru a a asta trebuie setat calea c tre directorul php care conine ierul de congurare php.ini, asupra c ruia voi reveni a a t s a puin mai trziu. t Sub Windows XP, click dreapta pe My Computer si apoi Properties. Sub Windows 7, n start -> run introdu comanda: C:\Windows\System32\SystemPropertiesAdvanced.exe Alege tabul Advanced, apoi click pe Environment Variables n partea de jos a dialogului, aa cum s vezi n Figura 1.10. Se va deschide un dialog similar cu cel din Figura 1.11. Click pe New sub System variables, si introdu datele ca n Figura 1.12. Aceast nou variabil de mediu a a a l va ajuta pe PHP s -i g seasc ierul de congurare php.ini. as a a s n acest moment, PHP este setat si l-am putea lansa n execuie folosind calea absolut t a C:\webdev\php-5.3.6\php.exe, ceea ce poate deveni obositor cu timpul. ns putem integra php.exe a a a n sistem astfel nct s e recunoscut ca comand .
31 32

http://notepad-plus.sourceforge.net/ what you see is what you get

18

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Figura 1.10: Proprietile avansate ale sistemului Windows XP at

Figura 1.11: Variabilele de mediu ale unui sistem Windows

Figura 1.12: Variabilele de mediu ale unui sistem Windows Pentru ca asta s se ntmple, identic variabila systemului numit Path si adaug -i la sfrit: a a a a s ;C:\webdev\php-5.3.6\, ca n Figura 1.13.

Acel ; de la nceput este foarte important. PATH conine o list de directoare n care windows se va t a uita pe rnd atunci cnd lansezi n execuie un program ca pe o comand . ; are rolul de a separa aceste t a directoare. 19

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

Figura 1.13: Variabila de mediu PATH Un singur lucru mai lipsete: php.ini. Arhiva pe care tocmai ai desc rcat-o vine cu dou astfel de iere, s a a s php.ini-development si php.ini-production. F o copie a ierului php.ini-development si a s redenumete-o php.ini. s Testeaz dac ai setat totul cum trebuie deschiznd o nou instana a promptului ms-dos. Acolo introdu a a a t comanda php -ini. Totul este corect dac php este g sit de sistem, iar comanda de mai sus i arat a a t a C:\webdev\php-5.3.6\php.ini ca Loaded Conguration File. Acum vom trece la integrarea lui PHP ca modul apache. Vom spune c folosim SAPI-ul33 (en. server applia cation programming interface) apache2. n directorul n care ai instalat apache este un subdirector de congurare numit sugestiv conf/, unde rezid toate ierele de congurare pentru apache. a s Fiierul principal de congurare al apache se numete httpd.conf. Este singurul ier nc rcat automat s s s a de apache pentru a citi conguraia, celelalte iere trebuie incluse folosind directiva Include din acest ier t s s principal (en. the master conguration le). Liniile care ncep cu caracterul diez (#) sunt comentarii, iar coninutul t lor nu este luat n considerare, chiar dac conine directive de congurare valide. a t Deschide httpd.conf cu notepad++ si adaug -i la sfrit (combinaia CTRL+END ) directiva Include a s t conf/extra/httpd-php.conf apoi creaz un nou ier cu CTRL+N cu acest coninut: a s t LoadModule php5_module "C:/webdev/php-5.3.6/php5apache2_2.dll" AddType application/x-httpd-php .php PHPIniDir "C:/webdev/php-5.3.6" <IfModule dir_module> DirectoryIndex index.php index.html </IfModule> Acum apas a CTRL+S si salveaz -l a ca httpd-php.conf n directorul C:\webdev\apache\conf\extra\ Directiva LoadModule i spune s ncarce un ier ca modul apache. AddType l instruiete s interpreteze a s s a iere ce se termin n .php ca application/x-httpd-php, care este un tip MIME34 (en. multipurpose s a internet mail extension). PHPIniDir i spune lui PHP (de data asta modulului PHP) unde i g sete ierul s a s s de congurare php.ini, aa cum variabila de mediu PHPRC pe care am setat-o anterior i spune acelai lucru s s SAPI-ului CLI (adic lui php.exe). a Acel bloc condiional35 IfModule veric dac apache are modulul dir, si dac da, seteaz resursa de start t a a a a corespunz toare root-ului (atunci cnd este accesat / al unui director, aa cum ai v zut n capitolul anterior) a s a ec rui director. Fiierele sunt listate dup ordinea prioritii, dac primul nu este g sit, apache va ncerca s -l a s a at a a a deserveasc pe al doilea. a

O alt directiv important din httpd.conf este DocumentRoot. Acesta i spune lui apache de a a a unde s deserveasc iere. n mod standard, acest director se numete htdocs hypertext documents. a a s s

Acum c avem totul setat, restarteaz daemonul httpd, n caz c e pornit, pentru a prelua toate schimb rile din a a a a
http://en.wikipedia.org/wiki/Server_Application_Programming_Interface http://en.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions 35 Se numete condiional deoarece ceea ce se a n interiorul s u este inclus doar dac condiia este adev rat , numele nsui coninnd s t a a a t a a s t If.
34 33

20

Dezvoltare web cu PHP

1.4. INSTALAREA MEDIULUI DE DEZVOLTARE

httpd.conf si ierele incluse de acesta. Ar trebuit s -i d m restart si dac am modicat conguraia php s a a a t din php.ini. Pentru a verica instalarea si congurarea lui PHP ca modul apache, creaz un nou ier si salveaz -l ca a s a C:\webdev\apache\htdocs\info.php . Apoi introdu urm torul text, numit si cod surs (n limbajul a a PHP): Listing 1.1: phpinfo() furnizeaz toate informaiile despre instalarea PHP curent a t a
1 2

<?php phpinfo();

si salveaz -l. a Acum intr pe adresa http://localhost/info.php. Ar trebui s vezi ceva similar cu Figura 1.14. a a

Figura 1.14: Informaii aate de un apel la phpinfo() t s Felicit ri, acum ai PHP instalat si poi nva programare, e folosindu-l pentru programare web ca modul a t at apache, e folosindu-l ca limbaj de scripting universal folosind SAPI-ul CLI (programul php.exe). SAPI-urile exist tocmai pentru a uura integrarea lui PHP n toate aceste medii: pentru web putem folosi un a s SAPI specic daemonului folosit, de exemplu pentru apache avem SAPI-ul php5apache2_2.dll. Acest ier DLL s a a t s reprezint ns doar interfaa (SAPI-ul, aa cum i spune si numele de interface) de comunicare dintre apache si "adev ratul PHP". a Pe acelai calapod, php.exe reprezint interfaa de comunicare dintre promptul ms-dos (sau shell, ntrs a t un sistem *NIX) si acelai "adev rat PHP" ca si n cazul apache. Altfel spus, ambele, att php.exe, ct si s a php5apache2_2.dll sunt dou SAPI-uri, ecare destinate integr rii lui PHP n mediile lor specice de exea a cuie a scripturilor PHP. t n capitolul urm tor ne vom uita mai ndeaproape la limbajul PHP. a

21

Dezvoltare web cu PHP

1.5. O ALTFEL DE REMPROSPATARE

O altfel de remprosp tare a


Vreau s stabilesc nite lucruri care probabil nu sunt evidente pentru tine, sau asupra c rora nu ai insistat prea a s a mult cnd ai nceput s nvei s creezi site-uri statice cu HTML, eventual cu CSS sau poate chiar cu interaciune a t a t n interiorul browserului cu JavaScript. HTML este un limbaj de formatare (en. markup language). Cu el nu controlezi ceva, nu iei decizii, deci nu este un limbaj de programare. n HTML doar structurezi un document. n mod ideal l structurezi semantic (semantic HTML), pentru a putea interpretat mai bine de motoarele de c utare web (en. search engine). a Exist multe formate de iere, si chiar n capitolul anterior ai lucrat cu dou astfel de formate formatul de a s a congurare specic apache, si protocolul HTTP. Dac i aminteti, i-am explicat pe rnd ce nseamn directive a t s t a a at precum Include. Semnicaia acestor directive, sau general spus, semnicaia oric rei entiti specice unui t t limbaj (e el de markup HTML, de congurare httpd.conf, de programare PHP, sau un protocol de comunicare HTTP) constituie semantica acelui limbaj. Semantica unui anumit construct al unui limbaj (de orice natur ar el) este strns legat de contextul n care a a se a acel construct. De exemplu, pentru a cere o resurs cu HTTP, am v zut c poi ncepe cererea cu GET, a a a a t urmat de o cale absolut (care ncepe cu /) din cadrul Host-ului n cauz . Calea respectiv are semnicaia pe a a a t care o vrem doar n contextul lui GET, ca dovad c atunci cnd vedem c i de genul /script.php pe site-uri a a a web, acestea nu sunt interpretate automat ca parametri GET, si deci browserul nostru nu este redirecionat c tre t a acele pagini. Contextul a ceva nseamn n ce punem acel ceva pentru a avea o anumit semantic . De exemplu, sarea pus a a a a n contextul g titului are semantica de condiment, dar dac o pui pe o ran , are semantica de ceva care provoac a a a a durere. Cu alte cuvinte, context nseamn circumstane sau mediul nconjur tor. a t a Analog, HTTP/1.1 are semantica de protocolul si versiunea folosit n contextul request line-ului HTTP a al unui request HTTP.

ns si GET nsui are semnicaia pe care ai ntlnit-o n capitolul trecut doar ntr-un anumit context semantic. a s t 1. Care este acest context semantic? 2. n ce context semantic are semantica ntlnit constructul Include? a 3. n ce context semantic are sens comunicarea n limbajul (n protocolul) HTTP? Determin contextul semantic n care urm toarele constructe au semantica pe care o intuieti ca cunosc tor al a a s a limbajului HTML: 4. <td> 5. <tr> 6. <body> 7. <html> 8. href

ntreb ri de sintez ** a a

22

Dezvoltare web cu PHP

1.5. O ALTFEL DE REMPROSPATARE

Dac ai avut diculti majore la r spunderea ntreb rilor de sintez , te rog ia atitudine. n primul rnd, a at a a a plec de la premiza c citeti cu atenie, si c reii tot ce-i povestesc. Toate noiunile pe care le introduc, a s t a t t t le introduc pentru c astfel voi putea explica lucruri destul de complicate mai trziu, pe baza celor spuse a aici. Asta i va permite s stii multe nv nd ct mai puin. Dezavantajul este c va trebui s i t a at t a a concentrat la ce citeti, si s sintetizezi singur mult. Sinteza aceasta este un exerciiu perfect pentru s a t tine ca viitor programator, deoarece atunci cnd vei programa vei confruntat cu aceast nevoie de a a sintetiza lucruri. Metoda mea de predare, dei dur , te preg tete foarte bine pentru cariera ta de s a a s programator. Deci dac simi c nu eti st pn pe ce ai nvat pn acum despre reelistic si despre a t a s a at a t a semantic , recitete acum, pn nu te pierzi denitiv. Cnd reciteti, urmeaz link-urile menionate a s a s a t dup cum am spus n capitolul Introducere, acestea nu sunt lectur opional . a a t a

Pe lng semantic , un limbaj mai are si o sintax . Regulile sintactice ale limbajelor sunt necesare pentru a a a a crea contextul semantic n care vor exista constructele acelui limbaj. Vreau s ilustrez asta cu un exemplu: n protocolul HTTP, GET trebuie s e separat de cale printr-un spaiu. a a t Asta este o regul sintactic a limbajului, standardizat prin RFC-uri, ns practic separatorul ar putea orice alta a a a ceva. ns un separator trebuie s e acolo, altfel calculatorul (browser-ul sau daemon-ul) nu ar putea decide unde a a ncepe cuvntul cheie GET, unde se termin , si unde ncepe calea c tre resursa pe care o dorim. Aceste reguli a a sintactice permit programelor precum daemon-uri si clieni HTTP s parseze (s neleag ) datele comunicate t a a t a reciproc. Exist multe posibiliti de a exprima sintaxa unui limbaj, ns acestea sunt mult prea complexe pentru noi. a at a ns exist un standard nescris pentru a specica sintaxa unor constructe simple, ntr-o singur linie. Ea se leag a a a a de necesitatea unui anumit parametru. De exemplu, sintaxa constructului GET ar putea : GET <RESOURCE> HTTP/1.1 RESOURCE este pus ntre < si >, ceea ce denot c este un parametru necesar, care trebuie specicat. GET a a (inclusiv spaiul) si HTTP/1.1 sunt puse ntre apostrofuri pentru a ar ta c sunt lucruri ce trebuie scrise exact aa t a a s cum sunt. RESOURCE este numele simbolic al parametrului, pe care l putem refolosi n documentaia limbajului t (n cazul nostru, documentarea limbajului HTTP, sau mai bine spus, a unei cereri HTTP de baz ). a Pentru a specica c un parametru e opional, l punem ntre [ si ]. Astfel, sintaxa unei cereri HTTP ca cea pe a t care am f cut-o n capitolul anterior, mpreun cu descrierea ei, ar putea ar ta astfel: a a a GET <resource> HTTP/ <version> <enter> [Host: <name enter> ]<enter> - resource = the absolute path to the resource - version = the version of the HTTP protocol used; currently only 1.0 and 1.1 are supported - name = the hostname - enter = press return once Pe lng lucrurile evidente pe care ni le spune aceast specicaie sintactic , ne mai spune si un lucru care a a t a probabil i-a sc pat: cmpul Host este opional, dar dac l specic m, atunci trebuie s specic m si parametrul t a t a a a a name, si s si ap s m o dat enter. a a a a Cu sigurana ai realizat c astfel de reguli pot incluse una n alta, crend reguli destul de complexe. t a Un limbaj precum cel de mai sus, care folosete <,>,[,] pentru a specica un alt limbaj se numete un metalims s baj. Meta nseamn care descrie - un limbaj care descrie limbajul. a Cel mai probabil ai ntlnit deja tag-ul HTML <meta>, de aici i provine numele. Diferena este c <meta> t a nu se refer la limbaj (HTML n cazul de faa), ci la informaii. Ceea ce <meta> ne spune despre documentul a t t HTML n care se a se numesc metainformaii - informaii care descriu informaiile din documentul curent. a t t t Probabil ai folosit deja un forum pe web. Probabil c acel forum i spunea la un moment dat c autorul unei a t a intr ri (al unui topic sau thread ) se numete Xulescu. Ei bine, n timp ce intrarea propriu-zis constituie informaia, a s a t numele autorului este o metainformaie (en. metadata) - o informaie despre informaie. t t t 23

Dezvoltare web cu PHP

1.5. O ALTFEL DE REMPROSPATARE

La ce i folosete aceast cunoatere despre metadate, metalimbaje, sintax si semantic ? n primul t s a s a a rnd, ai nvat primul cel mai important lucru pragmatic din viitoarea ta carier de programator: s at a a citeti manualul (PHP sau orice altceva) chiar dac nc nu eti contient de asta. s a a s s n al doilea rnd, meta-ceva-urile te vor nsoi n toate aplicaiile pe care le vei programa. Uit -te la toate t t a aplicaiile pe care le foloseti, vei vedea c toate au nite metadate. Singurul lucru care te-ar mpiedica t s a s s vezi asta este c datele si metadatele se ntretaie att de mult nct e greu s le identici pe ecare. a a a Si n al treilea rnd, pentru a te preg ti pentru exerciiile urm toare care au menirea de a te dezghea la a t a t minte puin, deoarece, din p cate, nu stiu nimic despre cititorul meu, ns trebuie s m asigur cumva t a a a a c este pe aceeai lungime de und ca mine, ceea ce-i permite s asimileze ct mai ecient cunoaterea a s a a s prezentat n continuare, f r risip de cuvinte. a aa a

Fie regula sintactic a

Reguli sintactice*

[A] A [A A] [A [A <B>]] <C>

Partea I
Care dintre urm toarele inputuri o respect ? a a 1. AABC 2. AAAAC 3. AC 4. AAAC 5. AAABC

Partea II
Detaeaz -te de aceast regul sintactic abstract , si f o armaie pragmatic despre B. Armaia ncepe aa: s a a a a a a t a t s ntr-un input valid, B este mereu . . . Metalimbajul prezentat nu este b tut n cuie. n primul rnd, caracterele speciale ale limbajului <,>,[,] si pot a schimbate n orice, atta timp ct documentezi aceste schimb ri aduse de tine. a Deasemenea, nu este dect un standard nescris, si l poi extinde n ce fel ai nevoie. Din nou, important este t doar s documentezi extensiile aduse metalimbajului astfel nct ceilali programatori s i neleag specicaia a t a t t a t limbajului pe care l descrii cu ajutorul acelei extensii proprii a metalimbajului. De exemplu, s zicem c vrem s introducem un nou construct n acest metalimbaj care s nsemne simbolul a a a a din stnga mea poate ap rea o dat sau de mai multe ori, si ne decidem s folosim simbolul + pentru asta. a a a Astfel o regul de genul: a <FOO+> [BAR+] S-ar putea citi ca: Unul sau mai muli FOO urmat de zero sau mai muli BAR. Un astfel de simbol precum + se t t numete cuanticator. Ar la ndemn s stabilim, n documentaia extensiei noastre adus metalimbajului, c s a a t a a + poate cuantica orice entitate din stnga sa, inclusiv o grupare <> sau []. Documentaia ar suna aa: t s + = repeat the entity on its left once or multiple times (a quantifier) the entity can be any SYMBOL, <required parameter> or [optional parameter] Iar exemplul de mai sus, n care vrem ca FOO si BAR s e separai de un eventual spaiu, ar deveni: a t t <FOO >+ [BAR ]+ 24

Dezvoltare web cu PHP

1.5. O ALTFEL DE REMPROSPATARE

Pn acum deniiile noastre sintactice se limitau doar la o singur regul (o singur linie), ns am putea a t a a a a introduce constructe n metalimbaj care ne-ar da voie s atribuim nume acestor reguli, si s refolosim acele nume a a n deniiile altor reguli sintactice, crend astfel interdependene ntre reguli, si deci crea specicaiile unor limbaje t t t foarte complexe.

Majoritatea limbajelor de programare, inclusiv PHP, sunt denite n astfel de limbaje.

Acum hai s aplic m ce am nvat asupra limbajului HTML. n HTML avem tag-uri (ex. <html>) care au a a at atribute si valori. 1. Creaz o specicaie sintactic a limbajului HTML folosind doar cuvintele cheie TAG, ATTRIBUTE si a t a a VALUE, care combinate cu [] si <> s reecte ct mai corect sintaxa limbajului. Specicaia trebuie s valideze orice text HTML valid. Un exemplu de input ar : t a <form method="get"> <checkbox name="hello" checked> <input type="submit"> </form> Note: Regula creat nu trebuie s ia n calcul sintaxa specic XHTML (n care de exemplu <img> ar greit, a a a s doar <img /> este valid). Se pleac de la premiza c inputul este cel mai curat HTML posibil, c sunt folosite " pentru a delimita a a a valorile atributelor (dac acestea exist ), c nu e mai mult de un spaiu acolo unde e nevoie de spaiu, a a a t t s.a.m.d. Pe scurt: folosete-i intuiia pentru a decide ce nseamn cel mai curat HTML posibil. s t t a Deoarece caracterele < si > au o semnicaie special n limbajul HTML, pe care ncerci s -l descrii sintactic t a a folosind printre altele si caracterele < si > nsei, va trebui s le pui ntre apostrofuri, pentru a face diferena s a t ntre <,> care ne spun n metalimbajul nostru c acel parametru este necesar, si < sau > care ne spun c a a ne referim la caracterul < respectiv > n limbajul pe care vrem s -l descriem (adic HTML nsui). a a s Va trebui s extinzi metalimbajul (nu uita s si documentezi extensiile aduse) pentru a ajunge la o rezolvare a a ct mai corect si complet a a Exerciiul este destul de dicil. ncearc s te apropii ct mai mult de soluia cea mai corect si complet . t a a t a a

Sintaxa HTML***

25

S-ar putea să vă placă și