Sunteți pe pagina 1din 99

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

FACULTATEA DE MATEMATIC I INFORMATIC INFORMATIC DIDACTIC Masterat anul I

PROGRAMARE WEB
Curs Masteral pentru Informatic Didactic - anul I

-9-

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

INTRODUCERE
Conceptele iniiale ale sistemului WWW
Termenul World Wide Web (cu binecunoscutul acronim WWW sau colocvialul Web), definete un spaiu informaional n Internet, alctuit din resurse situate n locaii sau noduri ale reelei globale. Acestea pot fi regsite cu ajutorul unui sistem hypertext, pe baza unei modaliti universale de identificare cunoscut sub numele de URI (Uniform Resource Identifier). Resursele sunt organizate prin intermediul unei pagini de Web situate pe un server de Web. Paginile pot fi vizualizate prin intermediul unui program client numit browser sau navigator de Web. Web-ul a aprut n anul 1989 la CERN (Conseil Europen pour la Recherche Nuclaire- Genve, Confdration Helvtique) ca rezultat al propunerii fcute de Tim Berners-Lee n luna martie a aceluiai an, pentru crearea unei colecii de documente, n scopul rezolvrii unor probleme de comunicare existente ntre echipele de cercettori ale centrului. Ulterior, n octombrie 1994, Tim Berners-Lee a nfiinat World Wide Web Consortium (W3C-http://www.w3.org/) la Massachusetts Institute of Technology, Laboratory for Computer Science [MIT/LCS] n colaborare cu CERN i cu sprijinul primit din partea DARPA (Defense Advanced Research Projects Agency) i a Comisiei Europene (European Commission). Prima versiune a protocolului HTTP (Hypertext Transfer Protocol), este HTTP/0.9, dezvoltat de Tim Berners-Lee i echipa sa. Ultima versiune, HTTP/1.1 este protocolul implicit de comunicare ntre browser i serverul de Web. Dezvoltarea acestui protocol este coordonat de W3C (World Wide Web Consortium). HTTP utilizeaz opt metode pentru comunicarea ntre browser i server, cea mai des utilizat fiind GET (folosit n situaia n care browser-ul cere serverului o resurs). Dup 1990 se dezvolt o gam larg de tehnologii Web, limbaje i platforme de programare, prezentate de consoriul W3C sub forma unor recomandri/standarde. Cele mai importante dintre acestea pot fi prezentate sub forma urmtoarei liste (incomplete): XML (Extensible Markup Language) XHTML (Extensible Hypertext Markup Language) PHP (PHP: Hypertext Preprocessor) ASP (Active Server Pages) JSP (JavaServer Pages) AJAX (Asynchronous JavaScript And XML) WSDL (Web Services Description Language) RSS (Really Simple Syndication) RDF (Resource Description Framework) OWL (Web Ontology Language) SOAP (Simple Object Access Protocol) JSON (JavaScript Object Notation) DOM (Document Object Model) XSL (EXtensible Stylesheet Language) CSS (Cascading Style Sheets) PNG (Portable Network Graphics) i SVG (Scalable Vector Graphics )

- 10 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Evoluia ascendent de la WEB 1.0 la WEB 2.0


Perioada de dezvoltare a Web-ului, cuprins ntre 1990 i 2004, a fost numit retroactiv (n 2005) Web 1.0. n aceasta faz a dezvoltrii sale, activitatea de prelucrare a documentelor purttoare de informaii pe Web se baza pe programe de navigare, pe motoare de cutare i pe site-uri considerate astzi depozite izolate de informaii (information silo un sistem de management incapabil de interoperabilitate n procesarea afacerilor cu alte sisteme similare nrudite). Evoluia susinut a Web-ului a determinat apariia, la sfritul anului 2004, a unei noi tendine evolutive, denumit secvenial Web 2.0. Conceptul Web 2.0 reprezint, n esen, un nou punct de vedere asupra a ceea ce nseamn Web-ul actual i nu o evoluie tehnologic n sine. Aceast nou paradigm consider Web-ul ca o platform dinamic i interactiv, care ofer utilizatorilor posibilitatea de a colabora i de a schimba informaii online (o component a acestui concept este, de exemplu, tehnologia AJAX). Termenul Web 2.0 se refer la a doua faz a dezvoltrii Web-ului, n ceea ce privete arhitectura i aplicaiile/serviciile furnizate. Acest concept a fost popularizat de OReilly Media i MediaLive International (http://www.mlii.com/ ), datorit eforturilor lui Dale Dougherty i John Battelle, prin intermediul unor serii de conferine privind dezvoltarea Web-ului. Noua imagine a Web-ului are dou componente principale: n primul rnd, spaiul World Wide Web este vzut ca o platform n care utilizatorul i controleaz propriile date. Astfel, site-ul Web se transform dintr-o surs de informaii n surs de servicii pentru utilizatori. n al doilea rnd, coninutul Web-ului i distribuirea acestuia sunt democratizate. Aceast component nseamn descentralizare, comunicare liber i control sporit exercitat de utilizator, coninutul Web-ului ieind de sub monopolul proiectanilor si. Astfel, Web-ul se apropie de ideea originar a lui Tim Berners-Lee, conform creia acesta trebuie s reprezinte un mediu democratic i personal de comunicare (DIY, Do It Yourself). Web-ul documentelor (Web 1.0) se transform ntr-un Web al datelor (Web 2.0). Noul concept implic, printre altele, urmtoarele aspecte: Interactivitate Web sporit i un grad de utilizare mrit, existnd tendina de a crea aplicaii similare celor desktop (e.g., tehnica AJAX); ncredere total n utilizatori (e.g., fenomenul wiki); Participarea utilizatorilor (e.g., fenomenul blog, tehnologia RSS/Atom (Really Simple Syndication) pentru mediatizarea (syndication) coninutului site-urilor Web, adnotarea coninuturilor, relaiilor ntre blog-uri prin intermediul permalinks, social networks, social Web, semantic Web).

- 11 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Aplicaiile Web 2.0 utilizeaz adesea combinaii ale unor tehnici/tehnologii care au existat nc din anii 90 ai secolului trecut (e.g., Web syndication 1997, servicii Web - 1998). Astfel, pe de o parte, noul concept are un rol de integrare, oferind noi valene i direcii de dezvoltare tehnicilor/tehnologiilor amintite (e.g., AJAX). Pe de alt parte, multe dintre conceptele i tehnologiile dezvoltate recent (Weblog, linklog, wiki, podcast) sunt vzute ca o contribuie la dezvoltarea Web 2.0.

Semantic Web, ultima frontier


Semantic Web (Web-ul semantic) asigur un cadru comun de diseminare, partajare i reutilizare a informaiilor dincolo de graniele unei aplicaii, ale unei organizaii sau ale unei comuniti umane. Semantic Web este Web-ul informaiilor (sau al datelor). n acest moment, exist un volum uria de date care se utilizeaz zilnic i care nu fac parte din sistemul WWW. Explicaia const n faptul c datele sunt controlate de aplicaii i fiecare aplicaie le pstreaz i le conserv pentru ea nsi. Cu alte cuvinte, nu exist, deocamdat, un web al datelor. Semantic Web se refer la dou direcii conceptuale de evoluie i dezvoltare: 1. Formate comune pentru integrarea i combinarea informaiilor(datelor) obinute din diverse surse. Aceasta este o deosebire major fa de Web-ul original care era concentrat, n principal, pe activitile de schimburi/tranzacii de documente. Limbaje de nregistrare a modului n care informaiile(datele) sunt asociate obiectelor din lumea real. Aceasta va permite unei persoane sau unei maini (sistem de calcul) s nceap cutarea/investigaia dintr-o baz de date i apoi s se deplaseze printr-un ir nesfrit de baze de date interconectate semantic ntre ele pentru c se refer la acelai obiect sau aceeai entitate sau aceeai clas sau acelai domeniu.

2.

La activitatea de definire, proiectare i dezvoltare a Web-ului Semantic particip un numr mare de cercettori coordonai de Consoriul W3C. Scopurile vizionare ale lui Semantic Web sunt de a extinde principiile funcionale ale Web-ului actual de la documente spre informaii(date). Aceast extindere va amplifica potenialul sistemului WWW pentru c va permite unor largi comuniti umane s acceseze n comun colecii uriae de informaii, care apoi pot fi prelucrate automat de instrumentele software. Semantic Web va permite realizarea urmtoarelor obiective: 1. Extragerea datelor n forma lor real, astfel nct programele s nu mai fie nevoite s le caute n paginile de Web, din care trebuie mai nti s elimine informaiile despre formatare, imaginile i alte elemente suplimentare neutilizabile. Scrierea/generarea de fiiere care descriu/explic relaiile/asociaiile dintre diferite seturi de date. Aceasta va permite sistemelor de calcul s urmreasc hyper-legturile semantice dintre obiectele care fac parte din acelai concept abstract i astfel s integreze automat date din mai multe surse diferite. - 12 -

2.

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Tehnologiile Semantic Web pot fi utilizate n domenii variate de aplicaii: Integrarea datelor. Informaii din locaii diferite i n formate diferite pot fi integrate ca un tot unitar ntr-o aplicaie; Descoperirea i clasificarea resurselor. Aceasta va asigura capaciti mbuntite motoarelor de cutare specializate pe domenii de cunotine. Catalogarea informaiilor care descriu coninutul i relaiile disponibile ntr-un anume site/pagin de Web sau bibliotec digital. Implementarea agenilor software inteligeni care permit diseminarea/partajarea i schimbul de cunotine. Evaluarea coninutului. Descrierea coleciilor de pagini care reprezint un singur document logic Descrierea drepturilor de proprietate intelectual ale paginilor de Web. Semantic Web (date integrate semantic) Web 2.0 (servicii i date) Web 1.0 (documente)

Evoluia conceptual a sistemului WWW.

Specificaiile Semantic Web


Tehnologiile Semantic Web dezvoltate de diferite organizaii sunt aplicate ntr-o gam larg de studii de caz grupate n colecii disponibile n site-ul Consoriului W3C (http://www.w3.org/).

Resource Description Framework (RDF)


Resource Description Framework (RDF) integreaz o varietate de aplicaii din cataloagele bibliotecilor i directoarelor din ntreaga lume n sisteme de culegere de tiri, evenimente i colecii personalizate de fotografii i muzic prin utilizarea XML (EXtesible Markup Language) ca sintax a transferului de date. Specificaile RDF furnizeaz un sistem simplu de ontologii ce asigur suportul necesar schimburilor/transferurilor de cunotine pe Web. Se spune chiar c XML (EXtesible Markup Language) reprezint ansamblul ontologiilor de nivel 0. RDF/XML Syntax Specification (Revised), W3C Recommendation, February 10, 2004, Dave Beckett, ed.

- 13 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 RDF Vocabulary Description Language 1.0: RDF Schema, W3C Recommendation, February 10, 2004, Ramanathan V. Guha, Dan Brickley, eds. Resource Description Framework (RDF): Concepts and Abstract Syntax, W3C Recommendation, February 10, 2004, Graham Klyne, Jeremy J. Carroll, eds. RDF Semantics, W3C Recommendation, February 10, 2004, Patrick Hayes, ed. RDF Test Cases, W3C Recommendation, February 10, 2004, Jan Grant, Dave Beckett, eds.

Web Ontology Language (OWL)


Web Ontology Language (OWL) este un limbaj de marcare semantic pentru publicarea i partajarea ontologiilor n sistemul World Wide Web. OWL se dezvolt ca un vocabular extins al lui RDF (Resource Description Framework) i este derivat din DAML+OIL Web Ontology Language. OWL Web Ontology Language Reference, W3C Recommendation, February 10, 2004, Guus Schreiber, Mike Dean, eds. Frank van Harmelen, Jim Hendler, Ian Horrocks, Deborah L. McGuinness, Peter F. Patel-Schneider, Lynn Andrea Stein, authors. OWL Web Ontology Language Use Cases and Requirements, W3C Recommendation, February 10, 2004, Jeff Heflin, ed. OWL Web Ontology Language Semantics and Abstract Syntax, W3C Recommendation, February 10, 2004, Peter F. Patel-Schneider, Patrick Hayes, Ian Horrocks, eds. OWL Web Ontology Language Overview, W3C Recommendation, February 10, 2004, Deborah L. McGuinness, Frank van Harmelen, eds. OWL Web Ontology Language Test Cases, W3C Recommendation, February 10, 2004, Jeremy J. Carroll, Jos De Roo, eds. OWL Web Ontology Language Guide, W3C Recommendation, February 10, 2004, Michael K. Smith, Deborah L. McGuinness, Chris Welty, eds Ontologia, n sens filozofic, reprezint o teorie privitoare la existen (sau o teorie asupra a ceea ce se consider, la modul general, c exist). Construirea mai multor sisteme filosofice pornete de la o Ontologie, adic de la definirea categoriilor fundamentale ale entitilor ce provin din realitate precum i a relaiilor dintre acestea. Termenul de ontologie este utilizat i n domeniul informaticii, mai ales n cadrul inteligenei artificiale (IA) sau al domeniilor nrudite. Dupa M. Gruber definiia conceptului informatic de ontologie ar putea fi urmtoarea: O ontologie reprezint conceptualizarea unui domeniu al cunoaterii ntr-un format destinat a fi procesat de calculator, format ce modeleaz entiti, atribute, relaii i axiome". n inteligena artificial i n domeniul Web-ului semantic, ontologia se refer la precizarea i descrierea, la modul general, a ceea ce se consider i este recunoscut c exist.

- 14 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 SGML

HTML

XML

XHTML

Ontologia meta-limbajelor. SGML(Standard Generalized Markup Language), HTML(Hypertext Markup Language), XML(Extensible Markup Language), XHTML(Extensible Hypertext Markup Language)

Gleaning Resource Descriptions from Dialects of Languages (GRDDL):


GRDDL este un mecanism pentru Gleaning Resource Descriptions from Dialects of Languages (Culegerea Descrierilor de Resurse din Dialecte de Limbaje). Specificaiile GRDDL introduc marcajele n standardele existente pentru a declara faptul c un document XML include date compatibile cu Resource Description Framework (RDF) i pentru al asocia cu algoritmii (reprezentai de obicei n limbajul XSLT), cu scopul de a extrage aceste date din document. Gleaning Resource Descriptions from Dialects of Languages (GRDDL), W3C Recommendation, September 11, 2007, Dan Connolly, ed. GRDDL Test Cases, W3C Recommendation, September 11, 2007, Chimezie Ogbuji, ed.

SPARQL Query Language for RDF


SPARQL reprezint limbajul de interogare pentru RDF(Resource Description Framework). RDF este un graf orientat i etichetat care formateaz datele pentru reprezentarea informaiei pe Web. SPARQL poate fi utilizat pentru a exprima interogri asupra unor surse de date diverse, fie c datele sunt stocate n original ca RDF, fie c sunt vzute ca RDF printr-un intermediar. SPARQL Query Language for RDF, W3C Recommendation, January 15, 2008, Andy Seaborne, Eric Prud'hommeaux, eds. SPARQL Protocol for RDF, W3C Recommendation, January 15, 2008, Elias Torres, Lee Feigenbaum, Kendall Grant Clark, eds. SPARQL Query Results XML Format, W3C Recommendation, January 15, 2008, Dave Beckett, Jeen Broekstra, eds..

- 15 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

CAPITOLUL I Limbajul PHP (PHP Hypertext Preprocessor)


1.1.
Introducere. Funcionarea motorului PHP

Definiie recursiv: PHP (PHP Hypertext Preprocessor) = Preprocesorul de Hypertext PHP (Preprocesorul de Hypertext PHP (Preprocesorul de Hypertext PHP(...))) PHP (acronim recursiv pentru "PHP: Hypertext Preprocessor") este un limbaj de scripting (realizat i distribuit n sistem Open Source) ce poate fi ncapsulat n HTML i care se utilizeaz pe scar larg n aplicaiile bazate pe tehnologiile Web, inclusiv n aplicaii de comer electronic. Exemplul 1.1. Trei scripturi elementare introductive ce conin respectiv numai cod PHP, cod PHP + cod HTML i cod PHP + cod JavaScript

<html> <head> <title>Exemplul 1 </title> </head> <body> <?php echo "Salut, eu sunt un script PHP elementar!"; ?> </body> </html> <html> <head> <title>Exemplul 2</title> </head> <body> <?php // scriptul se salveaza intr-un fisier "pagina_mea.php" echo 'Acesta este un script RECURSIV ce contine si <b>HTML</b> <br> <a href="pagina_mea.php">Legatura AUTOREFERENTIALA catre pagina mea</a>'; ?> </body> </html> <html> <head> <title>Exemplul 3</title> </head> <body> <?php echo '<html> <head><title>PHP cu JavaScript</title> <script language="JavaScript"> function alertare () { alert(Acesta este un test PHP ce contine JavaScript)

- 16 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


// alert(\'Acesta ... JavaScript\') //ACELASI REZULTAT CA PT."" } </script> </head> <body onLoad="alertare()"> <p>Un script PHP ce contine JavaScript</p> </body> </html>'; ?> </body> </html>

Se observ din acest exemplu cum difer un script PHP fa de un script scris n alte limbaje cum ar fi Perl (Practical Extraction and Report Language) sau C -- n loc de a scrie un program cu o mulime de comenzi pentru a produce un HTML, se scrie un script HTML ce include cod pentru a realiza un obiectiv (n acest caz, a afia un text). Codul PHP este delimitat de coduri de start i de sfrit (<?php?>)ce i permit s intri i s iei din "modul PHP". Diferena dintre PHP i alte limbaje cum ar fi JavaScript este aceea c PHP este executat pe server pe cnd JavaScript este executat pe calculatorul clientului (de ctre programul de navigare pe Internet). Dac ar fi s ai un script similar cu cel de mai sus pe serverul tu, clientul ar primi doar rezultatele scriptului ce este rulat, fr a vedea n nici un fel codul din spatele acestuia. Se poate chiar configura serverul de web ca acesta s proceseze toate fiierele HTML cu PHP i astfel nct nici un utilizator nu poate vedea ce exist n fiierele serverului. PHP este n principal axat pe partea de scripting ce ruleaz pe server, deci se poate realiza i un program CGI(Common Gateway Interface), cum ar fi colectarea de date de la formulare, generarea de coninut dinamic sau trimitere i primire de cookie-uri.

Figura 1.1.

Funcionarea motorului PHP

1.

Exist trei domenii principale unde sunt folosite scripturile PHP. Scripturi ce ruleaz pe server. Acesta este cel mai tradiional i cel mai important pentru PHP. Sunt necesare trei lucruri pentru a face s mearg: 1. 1. Interpretorul PHP (CGI sau modul server), 1. 2. Un server de web i 1. 3. Un navigator de web. - 17 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Este nevoie ca serverul de web s fie pornit, cu o conexiune PHP instalat. Rezultatul programelor PHP poate fi vizualizat cu un navigator prin intermediul serverului de web.
2.

Scripting la linia de comand. Se poate face ca PHP s ruleze fr a fi nevoie de server i de browser, ci doar de interpretorul PHP. Aceast metod este ideal pentru scripturile ce se vor a fi executate regulat folosind cron (task scheduler n Windows), sau sarcini simple de procesare a textelor. Scrierea de aplicaii ce ruleaz pe partea clientului n mod grafic (GUI). Se pot folosi facilitile avansate ale PHP-ului n aplicaiile ce ruleaz de partea clientului prin exploatarea extensiei PHP-GTK pentru a scrie astfel de programe care pot rula, de asemenea pe platforme diferite folosind aceast metoda.

3.

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluznd Linux, multe variante de Unix (incluznd HP-UX, Solaris i OpenBSD), Microsoft Windows, Mac OS X, RISC OS, probabil i altele. PHP are, de asemenea, suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server, Personal Web Server, Netscape i iPlanet, serverul Oreillz Website Pro, Caudium, Xitami, OmniHTTPd, i multe atele. Pentru majoritatea serverelor, PHP are un modul, iar pentru celelalte suport standardul CGI, PHP putnd s lucreze ca un procesor CGI. Deci, cu PHP, se poate alege liber un sistem de operare i un server de web. Exist, de asemenea, posibilitatea de a alege programarea procedural sau programarea orientat obiect, sau chiar un mixaj ntre aceste stiluri de programare. Una dintre cele mai puternice i importante faciliti n PHP o reprezint suportul su pentru o gam larg de baze de date. Scrierea unei pagini de web ce interacioneaz cu o baz de date este simpl i poate fi realizat pentru urmtoarele baze de date: Adabas D dBase Empress FilePro (doar citire) Hyperwave IBM DB2 Informix Ingres InterBase FrontBase mSQL Direct MS-SQL MySQL ODBC Oracle (OCI7 i OCI8) Ovrimos PostgreSQL Solid Sybase Velocis Unix dbm

n plus, PHP suport ODBC, standardul Open DataBase Connectivity, care permite conectarea la orice alt baz de date care este realizat dup o tehnologie ce suporta acest standard mondial. Funciile PHP pentru acces la bazele de date nu sunt standardizate. Aceasta conduce la necesitatea existenei unei biblioteci de clase pentru baze de date care s ascund diferenele ntre API(Aplication Program Interface) ale diverselor servere de baze de date (i.e. s ncapsuleze particularitile implementrilor acestora) astfel nct interschimbul de informaii privitoare la bazele de date i coninutul lor s se realizeze facil. O implementare care satisface aceste cerine este ADOdb (ActiveX Data Objects for Data Base).

- 18 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 n momentul de fa biblioteca ADOdb suport Access, MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (variantele Borland i Firebird), FoxPro, ADO, DB2, SAP DB i ODBC. PHP se poate folosi cu succes n domeniul comerului electronic, existnd deja un mare arsenal de funcii pentru plai on-line, funcii de plat Cybercash, CyberMUT, VeriSign Payflow Pro i CCVS. Exemplul 1.2. Afiarea unei variabile care este element al unui tablou (Variabila superglobal _SERVER)
<?php //Afisarea unei variabile care este element al unui tablou //(Variabila superglobala) _SERVER) echo $_SERVER['HTTP_USER_AGENT']; ?>

Rspunsul va fi: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Exemplul 1.3. Utilizarea structurii de control condiionale IF i a funciilor

<?php //Utilizarea structurii de control conditionale IF si a functiilor if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {echo 'Utilizati MS-Internet Explorer pentru navigare.<br />';} else {echo 'Multumiri pentru utilizarea MS-Internet Explorer!.<br />';} ?>

Rspunsul va fi: Utilizati MS-Internet Explorer pentru navigare. Exemplul 1.4. Mixaj ntre HTML i PHP

<?php //Mixaj ntre HTML si PHP if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { ?> <h3>Functia strpos() a intors valoarea ADEVARAT</h3> <p>Utilizati MS-Internet Explorer pentru navigare </p> <?php } else { ?> <h3> Functia strpos() a intors valoarea FALSE</h3> <p> NU utilizati MS-Internet Explorer pentru navigare </p> <?php } ?>

Rspunsul va fi: - 19 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Functia strpos() a intors valoarea ADEVARAT

Utilizati MS-Internet Explorer pentru navigare

1.2.

Elemente de sintax ale limbajului PHP

Marcaje de delimitare. Scripturile PHP pot fi incluse n paginile Web n diferite moduri, uzual folosindu-se construcia: < ?php ... ? > Comentariile pot fi scrise n stilul comentariilor din limbajele C/C++ ori Perl /* ... */ sau //. . . sau #. . .

Caracterul terminal Declaraiile i instruciunile se separ prin ;"ca i n C, Perl ori Java ; Funcionarea analizorului (motorului) PHP este urmtoarea: preprocesorul PHP va detecta construciile PHP delimitate ntre tag-urile <?php i ?> i le va interpreta, ignornd restul coninutului documentului pe care l va trimite, la ieirea standard, nealterat. Astfel, putem privi analizorul PHP ca un script CGI care efectueaz o preprocesare special nainte ca datele s fie expediate clientului Web. PHP se bazeaz pe motorul de scripting Zend.

1.3.

Tipurile de date

Tipurile de date simple suportate sunt cele scalare: 1. Valori logice (boolean), 2. Numere ntregi (integer), 3. Numere reale n virgul mobil (float, double, real) 4. ir de caractere (string). Tipurile de date structurate sunt reprezentate de: 1. Tipul tablou (array) - indexat i asociativ 2. Tipul obiect (object) Tipurile de date speciale sunt reprezentate de: 1. Tipul resurs (resource) 2. Tipul nul (NULL)

- 20 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 irurile de caractere se pot delimita ntre ghilimele ( ) sau caracterele apostrof (...), n acest ultim caz inhibndu-se evaluarea variabilelor din interiorul irului respectiv (exact ca la script-urile bash ori Perl), Variabilele n PHP se reprezint prin intermediul unui identificator prefixat de caracter $. Numele variabilei este case-sensitive (i.e. variabila $PHP este diferit de $php) i este compus din caractere alfa-numerice i simbolul _". Tipul unei variabile se determin funcie de valoarea pe care o stocheaz. Variabilele se pot folosi fr a trebui s fie declarate n prealabil. Exist, de asemenea, i diverse variabile predefinite, mai ales cele specifice serverului Web. Tot ca variabile sunt transmise unui script PHP cmpurile formularelor HTML dintr-o pagin sau cookie-urile. Un tip special sunt variabilele globale (globals) care stocheaz diverse categorii de variabile externe (de exemplu $_GET, $_POST, $_COOKIES, $_ENV etc.). Observaii: Din motive de lizibilitate, au fost introduse trei pseudo-tipuri: mixed, number i callback. Tipul double are aceeai semnificaie cu cea a tipului float. Cele dou denumiri coexist doar din motive "istorice". n PHP, de obicei, tipul unei variabile nu este specificat de ctre programator, ci este stabilit n timpul execuiei n funcie de contextul n care este folosit variabila. Tipul boolean Variabilele de acest tip pot avea doar dou valori: TRUE sau FALSE. Aceste valori sunt indicate prin cuvintele cheie TRUE sau FALSE (pentru ambele nu se face distincie ntre literele mari i literele mici). Exist posibilitatea de a converti o variabil de orice tip la tipul boolean. n momentul efecturii unei conversii, sunt convertite la valoarea FALSE urmtoarele valori: numrul ntreg 0; numrul real 0.0; irul vid; irul "0"; un vector fr nici un element; un obiect fr nici o variabil membru; o variabil de tipul NULL; o variabil nedefinit. Orice alt valoare este convertit la valoarea TRUE (inclusiv resursele). Acest tip se poate folosi, de exemplu, pentru verificarea logrii ntr-o pagin de administrare. Dup ce se fac verificrile, dac utilizatorul este logat ca administrator, funcia noastr pentru verificarea logrii poate returna valoarea de adevr (TRUE), dac este logat sau valoarea contrar (FALSE) dac nu este logat, i astfel vom ti dac s i acordm sau nu acces utilizatorului n seciunea de administrare.

- 21 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Tipul integer O variabil de tip integer reprezint o valoare din mulimea numerelor ntregi. Aceste numere pot fi specificate n baza 10, n baza 16 sau n baza 8, conveniile fiind aceleai ca i n limbajele C/C++ sau Java. Modul de reprezentare depinde de platforma utilizat; de obicei se folosete reprezentarea pe 32 de bii. Interpretorul PHP nu ofer suport pentru numerele ntregi fr semn. Trebuie remarcat faptul c n PHP nu exist nici un operator pentru efectuarea de mpriri ntregi. De exemplu, rezultatul operaiei 3/2 nu va fi numrul ntreg 1 (ca n C/C++ sau Java), ci numrul real (float) 1.5 i pentru numerele ntregi exist posibilitatea efecturii de conversii:

Valoarea logic TRUE este convertit la valoarea ntreag 1; Valoarea logic FALSE este convertit la valoarea ntreag 0; Un numr real este convertit prin "rotunjire nspre 0". Aadar, valoarea real 2.5 va fi convertit la valoarea ntreag 2, n timp ce valoarea real -2.5 va fi convertit la valoarea ntreag -2; Un ir de caractere este convertit lund n considerare doar primele caractere care conin informaii numerice. Aadar irul "10" va fi convertit la valoarea ntreag 10. De asemenea irul "10 ani" va fi convertit tot la valoarea 10; daca primele caractere nu conin informaii numerice, rezultatul conversiei va fi valoarea 0.

Tipul float O variabil de tip float poate fi specificat folosind fie forma zecimal, fie cea tiinific (cu exponent). La fel ca i n cazul tipului integer, precizia variabilelor de tipul float este dependent de platforma utilizat. De obicei se folosete standardul IEEE 64. Exist posibilitatea de a converti o variabil de orice tip la tipul float. Pentru numerele reale se pot efectua urmtoarele conversii: Un ir de caractere este convertit lund n considerare doar primele caractere care conin informaii numerice; aadar irul "10.2" va fi convertit la valoarea real 10.2; irul "1.23E1 ani" va fi convertit la valoarea 12.3; n toate celelalte cazuri se realizeaz conversii la numere ntregi care apoi sunt convertite la valorile reale corespunztoare.

Tipul string O variabil de tip string reprezint un ir de caractere. Un caracter se reprezint pe un octet, deci sunt 256 de caractere distincte. Acest lucru implic faptul c interpretorul PHP nu ofer suport nativ pentru setul de caractere Unicode. Lungimea variabilelor de tip string nu este limitat de ctre interpretor. - 22 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Literalii de tip ir de caractere pot fi specificai n trei moduri diferite: Prin folosirea ghilimelelor simple (apostrofelor) ' (Exemplu: $a='acesta este un sir de caractere'). Pentru a avea n cadrul irului simbolul apostrof " ' ", atunci naintea acestuia trebuie scris caracterul "\", iar pentru a putea specifica simbolul "\" acesta trebuie dublat. Prin folosirea ghilimelelor duble ". Folosind aceast notaie, pot fi specificate mai multe caractere speciale, pe lng caracterele de la varianta anterioar, printre care:

a) sfrit de linie ("\r") b) rnd nou ("\n") c) tab orizontal ("\t") d) semnul dolar ("\$") e) ghilimelele duble ("\"") f) secvene de caractere pentru specificarea expresiilor regulate n notaie octal
("\[0-7]{1,3}")

g) secvene de caractere pentru expresiile regulate n notaie hexazecimal


("\x[0-9A-Fa-f]{1,2}"). Cel mai important lucru este acela c, folosind acest mod de specificare a literalilor de acest tip, numerele de variabile care apar n interior vor fi transformate n valoarea lor. De exemplu, dac $a este o variabil de tipul integer i are valoarea 2, atunci irul de caractere "Variabila a are valoarea $a." va fi transformat n irul "Variabila a are valoarea 2". Notaia heredoc. Acest tip de notaie a fost introdus la versiunea 4 a interpretorului PHP. Pentru a specifica un ir de caractere folosind aceast notaie, trebuie utilizat operatorul "<<<" urmat de un identificator ales de utilizator. Toate caracterele care se afl ntre operatorul "<<<", urmat de un identificator pe o singur linie, i acelai identificator pe o alt linie, vor constitui valoarea irului de caractere. De exemplu, instruciunea: $str=<<<SF. Acesta este un exemplu de utilizare a sintaxei heredoc SF; va avea ca rezultat un ir de caractere format din trei linii de text. Pentru a accesa un anumit caracter din irul de caractere, se folosete, dup numele variabilei de tip string, indicele caracterului care trebuie accesat scris ntre acolade. De exemplu, $str{0} returneaz primul caracter din irul de caractere $str. n cazul n care dorim s concatenm dou iruri de caractere, vom folosi operatorul "." Folosirea operatorului "+" nu va concatena cele dou iruri. Exist posibilitatea de a converti o variabil de orice tip la tipul string. Pentru irurile de caractere, se pot efectua urmtoarele conversii: Valoarea logic TRUE va fi convertit la irul "1", iar valoarea logic FALSE va fi convertita la irul vid (""); Un numr ntreg va fi convertit la un ir de caractere care reprezint valoarea numrului n baza 10; - 23 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Un numr real va fi convertit la un ir de caractere care reprezint notaia tiinific a acestuia; Obiectele sunt ntotdeauna convertite la irul "Object"; Variabilele de tipul resource sunt convertite la irul "Resource id #n", unde n reprezint un numr unic ataat resursei respective de ctre interpretorul PHP; Valoarea NULL este convertit la irul vid (""). 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. Tipul array Vectorii n PHP sunt mulimi formate din chei. Fiecrei chei din vector i se ataeaz o valoare. Acest tip de date este optimizat astfel nct s poat fi folosit n locul urmtoarelor structuri de date: liste, tabele de dispersie, dicionare, colecii, stive, cozi i altele. Datorit faptului c o valoare poate fi chiar un alt vector, se pot simula foarte uor arborii ndimensionali sau tablourile n-dimensionale. Valoarea unei variabile de tip vector se poate specifica folosind construcia: array (cheie => valoare, cheie => valoare, ...) De exemplu, urmtoarea instruciune PHP va construi un vector cu dou elemente, dintre care unul este de tip string, iar cellalt de tip boolean: $a = array('ch' => 'string', 12 => TRUE); Variabila $a reprezint un vector, $a["ch"] are valoarea string, iar $a[12] are valoarea TRUE. n cazul n care nu se specific o cheie pentru o valoare, atunci acea valoare va fi ataat unei chei care

- 24 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 va fi cheia maxim de tip integer folosit anterior, la care se adaug valoarea 1. Cheile pot avea i valori negative. Dac nu exist chei de tip integer, atunci valoarea va fi ataat cheii 0. De exemplu, urmtoarele dou instruciuni sunt echivalente: array(5 => 43, 32, 56, 'b' => 12); array(5 => 43, 6 => 32, 7 => 56, 'b' => 12);

Dac se folosete valoarea logic TRUE ca i cheie, atunci aceasta va fi convertit la cheia de tip ntreg 1, iar valoarea FALSE va fi convertit la numrul ntreg 0. Nu se pot folosi pentru chei variabile de tipul array sau object. O variabil de tip array se poate modifica prin setarea explicit de valori. De exemplu instruciunea: $a["x"] = 42; adaug n vectorul $a valoarea 42 ataat cheii "x". Dac se folosete un vector care nu a fost definit anterior, atunci acesta este creat automat. Aadar printr-o instruciune de forma $a[5] = 42, n cazul n care vectorul $a nu exist, atunci se va crea un vector cu un singur element. Cheia acestuia va fi numrul ntreg 5, iar valoarea sa va fi 42. De asemenea, exist posibilitatea de a crea un element nou fr a-i preciza cheia. Sintaxa are forma : $vector[] = valoare; Aceasta instruciune are ca efect adugarea unui element a crui cheie este un numr ntreg mai mare cu 1 dect cel mai mare numr ntreg care este cheie a unui alt element al vectorului. Dac nu exist nici o astfel de cheie, atunci noul element va avea cheia 0. De exemplu, urmtoarele dou secvene sunt echivalente: $a[5] = 1; ............................ $a[5] = 1; $a[6] = 2; ............................ $a[] = 2; Prin conversia la un vector a unei variabile de tip scalar (boolean, integer, float, string) sau resource se creeaz un vector cu un singur element; cheia acestui element este numrul ntreg 0, iar valoarea este cea a variabilei convertite. Dac se convertete un obiect (variabil de tip object), atunci vectorul rezultat va conine cte un element pentru fiecare variabil membru a obiectului. Cheile elementelor vor fi date de denumirile proprietilor obiectului (variabilele membru ale obiectului), iar valorile elementelor vor fi valorile proprietilor obiectului. Dac realizm o conversie a unei variabile de tip NULL, atunci rezultatul va fi un vector vid (care nu conine nici un element). - 25 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 n continuare sunt prezentate cteva exemple care descriu mai detaliat posibilitile oferite de folosirea vectorilor n PHP. Pentru nceput, iat un vector ale crui elemente reprezint caracteristicile unei portocale:
<?php $a = array ('denumire' => 'portocala', 'familie' => 'citrice', 'culoare' => 'portocaliu', 'forma' => 'rotunda', 'gust' => 'dulce'); echo $a['denumire'].' <br> '.$a['familie']; ?>

Putem aduga i alte elemente care s reprezinte diferite alte proprieti. De exemplu, am putea avea nevoie de o valoare suplimentar creia nu dorim s i atribuim nici un nume de identificare (cheie). Pentru ca vectorul s conin un element suplimentar cu valoarea 4, vom putea defini vectorul astfel:
<?php $v = array ('denumire' => 'portocala', 'familie' => 'citrice', 'culoare' => 'portocaliu','forma' => 'rotunda', 'gust' => 'dulce',4); echo 'Denumirea: '.$v['denumire']. '<br/>'.'Familia: '.$v['familie'].'<br/>'. 'Pretul: '.$v[0]; ?>

Scriptul 1.1. array1.php - Cheia elementului cu valoarea 4 va fi numrul ntreg 0 deoarece nu exist nici o alt cheie care este numr ntreg.
<?php $v['denumire'] = 'portocala'; $v['familie'] = 'citrice'; $v['culoare'] = 'portocaliu'; $v['forma'] = 'rotunda'; $v['gust'] = 'dulce'; $v[] = 4; echo $v['denumire'].' <br> '.$v['familie']; ?>

- 26 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Scriptul 1.2. array2.php - O alternativa de construire a aceluiai vector v cu acelai rezultat n browser.

<?php $fructe = array ( 'denumire' => array('p' => 'portocala', 'a' => 'ananas', 'm' => 'mar'), 'numere' => array(1, 2, 3, 4, 5, 6), 'ordine' => array('prima', 5 => 'a II-a', 'a III-a') ); echo 'Denumire: '.$fructe['denumire']['p'].' - '.$fructe['denumire']['a']. '<br>'; echo 'Numere: '.$fructe['numere'][0].' - '.$fructe['numere'][1].' <br>'; echo 'Ordine: '.$fructe['ordine'][0].' - '.$fructe['ordine'][5].' <br>'; ?>

Scriptul 1.3. array3.php - Folosirea unor array-uri ale cror elemente sunt alte array-uri. Tipul object Pentru a defini un obiect care poate fi folosit pentru afiarea mesajului Salutare lume!, se scrie urmtoarea secven:
<?php class Salutare { function AfiseazaSalutare() { echo 'Salutare lume!'; }

- 27 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


} $a = new Salutare; echo $a -> AfiseazaSalutare(); ?>

Scriptul 1.4. clasa.php Definirea unui obiect elementar cu o singur metod Se observ faptul c AfiseazaSalutare(). este afiat textul Salutare lume!, text ce l-am introdus n funcia

Pentru a utiliza o variabila de tip obiect, va trebui s realizm o instaniere a obiectului prin intermediul instruciunii new. Sintaxa ei este: $a = new Salutare Astfel, variabila $a devine un obiect ale crui metode pot fi utilizate. Pentru afiarea propriu-zis a mesajului va trebui s executm metoda AfiseazaSalutare() printr-o instruciune de tipul: $a-> AfiseazaSalutare(); Orice variabil de un anumit tip poate fi convertit ntr-un obiect : Dac variabila respectiv este un obiect, atunci ea nu va fi modificat. n caz contrar, efectul conversiei este crearea unei noi instane a clasei stdClass. Dac variabila are tipul NULL, atunci noua instan va fi vid. n toate celelalte cazuri, instana va conine o variabil membru numit scalar a crei valoare va fi cea a variabilei convertite. Pentru conversii se folosesc instruciuni de tipul $obiect = (object) "Salutare lume!". Dup realizarea conversiei, se poate tipri mesajul Salutare lume! folosind instruciunea echo $obiect->scalar; Tipul resource Variabilele de tip resource sunt folosite pentru pstrarea unor referine ctre anumite resurse externe cum ar fi conexiuni la baze de date, fiiere, etc. Resursele sunt create i utilizate de anumite funcii speciale. Datorit specificului acestui tip de date, valoarea nici unei variabile de alt tip nu poate fi convertit la tipul resource.

- 28 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Tipul NULL Valoarea special NULL este atribuit oricrei variabile care nu a fost nc iniializat. Aceast valoare este singura pe care o pot avea variabilele de tip NULL. Se consider c o variabil are tipul NULL dac: i s-a atribuit constanta NULL; nu a fost iniializat; a fost deziniializat (prin intermediul funciei unset () ). Constantele pot fi considerate variabile ale cror valori sunt fixate i nu mai pot fi alterate pe parcursul programului. O constant stocheaz o valoare, precum face i o variabil, dar aceast valoare nu mai poate fi modificat n script, dup ce a fost stabilit (i.e. constanta a fost definit). Pentru a defini o constant se va folosi construcia sau funcia define( ). Numele constantelor va fi scris, de obicei cu majuscule. Aceasta opiune nu este obligatorie, ns este recomandabil deoarece va face codul mai frumos i mai lizibil. O diferen important ntre constante i variabile, este faptul c o constant nu are n faa ei semnul $. Exemplul 1.5. Definirea constantelor

<?php define('AUTOR', 'Eugen ZAHARESCU'); define('VARSTA', '50 de ani'); echo "<u>Autorul manualului este:</u> <b>".AUTOR.'</b> <br> '.'<u>Initializat in urma cu:</u> <b>' .VARSTA."</b>"; ?>

Ca exemple de constante predefinite se pot da PHP_VERSION, PHP_OS sau CHAR_MAX.

1.4.

Operatorii

PHP pune la dispoziie un set impresionant de operatori. Aceti operatori sunt cei disponibili n limbaje precum C sau Perl. Categoriile importante de operatori sunt: Operatorii aritmetici (+, -, *, /, %) sunt cei cunoscui din clasicele limbaje C/C++, Java, etc. Operatorii aritmetici Exemple Nume - 29 Rezultat

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Operatorii aritmetici Exemple $a + $b $a - $b $a * $b $a / $b $a % $b Nume Adunare Scdere nmulire mprire Modulo Rezultat Suma lui $a cu $b. Diferena dintre $a i $b. Produsul lui $a cu $b. Ctul mpririi lui $a la $b. Restul mpririi lui $a la $b.

Operatorii de asignare (= sau +=") Exemplul 1.6. Utilizarea operatorilor de asignare = , +=" i concatenare .=

<?php //Operatori de asignare "=" sau "+=" $a = ($b = 4) + 5; // $a este egal cu 9 si $b a fost setat la 4. echo "a=",$a,"<br />","b=",$b; $a = 3; $a += 5; // seteaza $a la 8, ca si in expresia: $a = $a + 5; $b = "Salut "; $b .= "PHP!"; // seteaza $b la "Salut PHP!", ca si in $b = $b . "PHP!"; echo "a=",$a,"<br />","b=",$b; ?>

Operatorii la nivel de bit (&,|,^, ~, <<, >>)


,

Operatorii la nivel de bit Exemple $a & $b $a | $b $a ^ $b ~ $a $a << $b $a >> $b Nume And Or Xor Not Shift left Shift right Rezultat Biii setai la 1 n $a i n $b vor fi setai la 1. (i bit cu bit) Biii setai la 1 fie $a, fie n $b vor fi setai la 1. (sau bit cu bit) Biii setai 1 fie $a, fie n $b dar nu simultan vor fi setai 1. (sau exclusiv) Biii setai la 1 n $a, vor fi resetai la 0, i vice versa. (not bit cu bit) Deplaseaz $b poziii spre stnga biii lui $a. Deplaseaz $b poziii spre dreapta biii lui $a.

Operatorii relaionali (ca noutate se poate meniona aici ===" care are ca rezultat constanta TRUE dac operanzii au valori identice i n plus sunt de acelai tip) Operatorii relaionali Exemple $a == $b Nume Egalitate Rezultat
TRUE dac $a este egal cu $b.

- 30 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Operatorii relaionali Exemple $a === $b $a != $b $a <> $b $a !== $b $a < $b $a > $b $a <= $b $a >= $b Nume Identitate Diferit Diferit Non-identitate Mai mic dect Mai mare dect Mai mic sau egal cu Mai mare sau egal cu Rezultat TRUE dac $a este egal cu $b i sunt de acelai tip. (PHP 4) 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. (PHP 4) TRUE dac $a este strict mai mic dect $b. TRUE dac $a este strict mai mare dect $b. TRUE dac $a este mai mic sau egal cu $b. TRUE dac $a este mai mare sau egal cu $b.

Un alt operator condiional este operatorul teriar "? :". Expresia (expr1) ? (expr2) : (expr3) se evalueaz la expr2 dac expr1 este evaluat la valoarea TRUE i la expr3 dac expr1 este evaluat la valoarea FALSE.

Exemplul 1.7.

Utilizarea operatorului condiional teriar "?:". Structura (expr1) ? (expr2) : (expr3)

<?php //Operator condiional tertiar "?:". Structura (expr1) ? (expr2) : (expr3) $variabila = "CORECTA"; echo $variabila == "CORECTA" ? "Variabila are valoarea CORECTA" : "Variabila nu are valoarea CORECTA"; ?>

Operatori de control al erorilor (@ )(exist un singur operator @ care inhib erorile ce pot aprea n cadrul expresiei pe care o prefixeaz), Operatori de incrementare / decrementare (++ i ) Exemple ++$a $a++ --$a $a-Operatori de incrementare / decrementare Nume Rezultat Pre-increment Incrementeaz $a cu 1, apoi ntoarce $a. Post-increment ntoarce $a, apoi incrementeaz $a cu 1. Pre-decrement Decrementeaz $a cu 1, apoi ntoarce $a. Post-decrement ntoarce $a, apoi decrementeaz $a cu 1.

Operatori logici (and sau &&", or sau | |", xor, !") Operatori logici Exemple Nume - 31 Rezultat

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Operatori logici Exemple $a and $b $a && $b $a or $b $a || $b $a xor $b ! $a Nume And And Or Or Xor Not Rezultat TRUE dac ambele $a i $b sunt TRUE. TRUE dac ambele $a i $b sunt TRUE. TRUE dac fie $a sau $b sunt TRUE. TRUE dac fie $a sau $b sunt TRUE. TRUE dac fie $a, fie $b sunt TRUE, dar nu ambele simultan. TRUE dac $a nu este TRUE.

Operatori pentru iruri de caractere Se definete operatorul de concatenare . similar celui din Perl. Poate fi folosit, de asemenea i operatorul de test ? :" i operatorul de concatenare (.=), care adaug argumentului din partea stng, argumentul din partea dreapt. Exemplul 1.8. Utilizarea operatorului de concatenare "." pentru iruri de caractere

<?php //operatorul de concatenare "." pentru siruri de caractere $a = "Hello "; $b = $a . "World!"; // $b contine "Hello World!" $a = "Hello "; $a .= "World!"; ?> // $a contine de asemenea "Hello World!"

1.5.

Instruciunile limbajului PHP

Instruciunile limbajului PHP sunt cele uzuale din alte limbaje de programare. Sunt disponibile instruciuni de atribuire (de forma $variabil = expresie), instruciuni de test (if i switch), instruciuni repetitive (while, do, for, foreach) i instruciuni de control (break, continue, return).

1.5.1. Structurile condiionale


1.5.1.1. Instruciunea

if

if (expresie) instruciune

- 32 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Mai nti, expresie (de tipul boolean) este evaluat la valoarea ei logic. Dac expresie este evaluat la valoarea TRUE, atunci PHP va executa instruciune iar dac expresie este evaluat la valoarea FALSE atunci PHP va ignora instruciune. 1.5.1.2. Instruciunea

else

Instruciunea else este executat dac expresia logic dup if este evaluat la valoarea FALSE ca i toate expresiile logice elseif succesoare (dac exist). Altfel spus, toate expresiile logice predecesoare trebuie sa fie evaluate la valoarea FALSE.
<?php $a=1;$b=2; if ($a > $b) { echo "a mai mare decat b";} else { echo "a NU este mai mare decat b";} ?>

1.5.1.3.

Instruciunea

elseif

Instruciunea elseif este o combinaie de if and else. Precum else, extinde o instruciune if pentru a executa o alta instruciune diferit n cazul n care expresia logic original if este evaluat la FALSE. Totui, spre deosebire de else, ramura alternativ va fi executat dac i numai dac expresia condiional elseif este evaluat la TRUE. Pot fi mai multe elseif n aceeai instruciune if. Prima alternativ elseif pentru care expresia logic este evaluat la TRUE va fi executat. n PHP, se poate scrie 'else if' (n 2 cuvinte) cu acelai comportament, identic ca i n cazul lui 'elseif' (ntr-un singur cuvnt). Exemplul 1.9. Utilizarea structurii condiionale if..elseif..else

<?php //Structura conditionala if..elseif..else $a=1;$b=2; if ($a > $b) {echo "a mai mare decat b";} elseif ($a == $b) {echo "a este egal cu b";} else {echo "a mai mic decat b";} ?>

1.5.1.4.

Instruciunea

switch

Instruciunea switch este asemntoare cu o serie de instruciuni if cu aceeai expresie logic. n multe situaii, se dorete compararea aceleiai variabile (sau expresii) cu mai multe valori diferite i s se execute secvene diferite de cod depinznd de valoarea ei la un moment dat. Instruciunea structurat switch a fost proiectat tocmai pentru acest lucru.

- 33 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Not: Spre deosebire de alte limbaje de programare, instruciunea continue se aplic i acioneaz similar cu break. Dac exist un switch n interiorul unui ciclu i se dorete s se continue cu urmtoarea iteraie a ciclului exterior, se va utiliza continue 2. Urmtoarele 2 exemple ilustreaz dou modaliti de a scrie acelai lucru: una prin utilizarea unei cascade de instruciuni if i elseif, i alta prin utilizarea instruciunii switch: Exemplul 1.10. Utilizarea structurii condiionale if..elseif i echivalentul ei switch..case

<?php //Structura conditionala if..elseif si echivalentul ei switch..case $i=0; echo "STRUCTURA CONDITIONALA if..elseif<br />"; if ($i == 0) { echo "i este egal cu 0"; } elseif ($i == 1) { echo "i este egal cu 1"; } elseif ($i == 2) { echo "i este egal cu 2"; } echo "<br /><br />STRUCTURA CONDITIONALA switch..case<br />"; switch ($i) { case 0: echo "i este egal cu 0"; break; case 1: echo "i este egal cu 1"; break; case 2: echo "i este egal cu 2"; break; } ?>

Pentru a evita greelile este important de neles cum este executat instruciunea switch. Instruciunea switch se execut linie cu linie (de fapt, instruciune cu instruciune). La nceput, nu se execut nici un cod. Numai cnd se ntlnete o instruciune case cu o valoare care se potrivete valorii expresiei switch atunci PHP ncepe ntr-adevr s execute instruciunile alternativei respective. PHP va continua s execute instruciunile pn la sfritul blocului switch, sau pn la prima apariie a instruciunii break. Dac nu se adaug o instruciune break la sfritul listei de instruciuni case, PHP va continua s execute instruciunile urmtoarei alternative case. Exemplul 1.11. Utilizarea structurii condiionale switch..case fr break

<?php //Fara break la sfrsitul listei de instructiuni case... //...PHP va continua sa execute instructiunile urmatoarei alternative case $i=0; switch ($i) { case 0: echo "i este egal cu 0<br />";

- 34 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


case 1: echo "i este egal cu case 2: echo "i este egal cu } ?>

1<br />"; 2<br />";

n acest exemplu, dac $i este egal cu 0, PHP ar executa toate instruciunile echo. Dac $i este egal cu 1, PHP ar executa ultimele 2 instruciuni echo. Comportamentul dorit se obine numai dac $i este egal cu 2 (i.e. va fi afiat textul 'i este egal cu 2'). De aceea este important s nu se uite inserarea instruciunilor break n structura de ramificare multipl switch. ntr-o instruciune switch, condiia este evaluat numai o dat i rezultatul este comparat cu fiecare instruciune case. ntr-o instruciune elseif, condiia este evaluat din nou. Dac condiia este mai complicat dect o simpl comparaie i/sau se afl ntr-un ciclu foarte strns, o instruciune switch poate fi mai rapid. Lista de instruciuni pentru un case poate fi de asemenea vid, ceea ce face s treac controlul spre lista de instruciuni a urmtorului case. Exemplul 1.12. Utilizarea structurii condiionale switch..case cu alternative vide

<?php //Structura case cu alternative vide... $i=0; switch ($i) { case 0: case 1: case 2: echo "i este mai mic decat 3 dar nu negativ"; break; case 3: echo "i este 3"; } ?>

O situaie special o reprezint alternativa case denumit default. Aceast alternativ corespunde oricror altor cazuri care nu s-au potrivit celorlalte alternative case i trebuie s fie ultima instruciune (alternativ) case. Exemplul 1.13. Utilizarea structurii condiionale switch..case cu alternativa default

<?php //Structura case cu alternativa default... $i=3; switch ($i) { case 0: echo "i este egal cu 0";

- 35 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


break; case 1: echo "i este egal cu 1"; break; case 2: echo "i este egal cu 2"; break; default: echo "i nu este egal cu 0, 1 sau 2"; } ?>

Expresia case poate fi orice expresie care poate fi evaluat la un tip simplu de dat: integer, floating-point numbers sau strings. Arrays sau objects nu pot fi utilizate dect dac ele sunt redefinite ca tipuri simple. Se pot utiliza i alte sintaxe, alternative, pentru structurile de control ale ramurilor instruciunii structurate switch: Exemplul 1.14. Utilizarea structurii condiionale switch..case cu sintaxa alternativ ":" + endswitch

<?php //Structura case cu sintaxe alternative ":" + endswitch; $i=3; switch ($i): case 0: echo "i este egal cu 0"; break; case 1: echo "i este egal cu 1"; break; case 2: echo "i este egal cu 2"; break; default: echo "i nu este egal cu 0, 1 sau 2"; endswitch; ?>

1.5.2. Structurile repetitive


1.5.2.1. Instruciunea

while

Ciclurile while reprezint cele mai simple cicluri n PHP. Ele se comport exact precum structurile similare din limbajul C. Structura de baz a sintaxei unei instruciuni while este:
while (expresie) instruciune;

- 36 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Instruciunea while determin PHP s execute instruciunile incluse n mod repetat, atta timp ct expresia while este evaluat la valoarea TRUE. Valoarea expresiei este verificat de fiecare dat la nceputul ciclului, astfel nct chiar dac aceast valoare se modific n timpul execuiei instruciunilor incluse, execuia nu se va opri pn la sfritul iteraiei (rularea tuturor instruciunilor din cadrul ciclului). Atunci cnd expresia while este evaluat la valoarea FALSE de la nceput, instruciunile din cadrul ciclului nu vor fi executate nici mcar o dat. Ca i n cazul instruciunii if, se pot grupa mai multe instruciuni n cadrul aceleiai instruciuni repetitive while prin ncadrarea lor cu paranteze acolad {} sau prin utilizarea sintaxei alternative:
while (expr): instruciune ... endwhile;

Exemplele urmtoare sunt identice i ambele afieaz numerele de la 1 la 10: Exemplul 1.15. Utilizarea structurii repetitive while

<?php /* exemplul 1 */ $i = 1; while ($i <= 10) { echo $i++, ;/*(post-increment) se afiseaza $i inainte de incrementare*/ } /* exemplul 2 */ echo <br/>; $i = 1; while ($i <= 10): echo $i, ; $i++; endwhile; ?>

1.5.2.2.

Instruciunea

do..while

Ciclurile do..while sunt foarte asemntoare ciclurilor while, cu excepia faptului c expresia logic este verificat la sfritul fiecrei iteraii i nu la nceputul ei. Principala diferen fa de ciclurile while obinuite este c prima iteraie a ciclului do..while se execut ntotdeauna (pentru c expresia logic este verificat de abia la sfritul ciclului). Acest comportament nu se ntlnete i la ciclurile while obinuite (pentru c expresia logic este verificat la nceputul fiecrei iteraii iar dac este evaluat la valoarea FALSE atunci execuia ciclului se ncheie imediat). Structura sintactic a unui ciclu do..while este:
do instruciune while (expresie) ;

- 37 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

<?php $i = 0; do { echo $i; } while ($i > 0); ?>

Ciclul de mai sus este executat o singur dat deoarece dup prima iteraie, expresia logic este evaluat la valoarea FALSE ($i nu este mai mare dect 0). Programatorii n C experimentai utilizeaz uneori n mod diferit ciclul do..while, permind ntreruperea execuiei n mijlocul blocului de instruciuni, prin construirea unui ciclu infinit do..while i includerea instruciunii break precum n exemplul urmtor: Exemplul 1.16. Utilizarea structurii repetitive do..while(1) ca un ciclu infinit
<?php // ciclu infinit do..while (1) $factor=2; $limita_minima=100; $i=5; //Se termina la a doua structura if //$i=0; // Se termina la prima structura if $i=5; do { if ($i < 5) { echo "Variabila i nu este suficient de mare"; break; } $i *= $factor; if ($i > $limita_minima) { echo "<br/>i=",$i," i este prea mare!.. >",$limita_minima; break; } echo "<br/>i=",$i," Variabila i este O.K.!"; /* proceseaza i */ } while (1); ?>

1.5.2.3.

Instruciunea

for

Ciclurile for sunt cele mai complexe cicluri n PHP. Se comport precum ciclul corespunztor din C. Sintaxa ciclului for este:
for (expr1; expr2; expr3) {instruciune};

Prima expresie (expr1) este evaluat (executat) cel puin o dat n mod necondiionat la nceputul ciclului. La nceputul fiecrei iteraii, expr2 este evaluat. Dac este evaluat la TRUE, ciclul continu i instruciunile incluse sunt executate. Dac n schimb este evaluat la FALSE, execuia ciclului se termin. La sfritul fiecrei iteraii, expr3 este evaluat (executat). Fiecare din expresii - 38 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 poate fi vid. Dac expr2 este vid aceasta nseamn c ciclul ar trebui s se execute la infinit (PHP implicit consider c este TRUE, precum n C). Aceasta poate fi uneori util atunci cnd se dorete terminarea ciclului prin utilizarea unei instruciuni condiionate break n locul expresiei logice a lui for. Toate exemplele urmtoare vor afia numerele de la 1 la 10: Exemplul 1.17. Utilizarea structurii repetitive for. Generarea/afiarea secvenei de numere 1..10.

<?php // Generarea/afiarea secvenei de numere 1..10 echo <br/> Exemplul 1 : ; for ($i = 1; $i <= 10; $i++) { echo <br/> Exemplul 2 : ; for ($i = 1; ; $i++) { if ($i > 10) { break; echo $i, ; } echo <br/> Exemplul 3 : ; $i = 1; for (; ; ) { if ($i > 10) { break; echo $i, ; $i++; } echo $i, ; }

echo <br/> Exemplul 4 : ; for ($i = 1; $i <= 10; prin $i, prin , $i++); ?>

- 39 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Scriptul 1.5. fibonacci.php- Utilizarea structurii for pentru calculul elementelor sirului lui Fibonacci i Raportul De Aur. PHP permite, de asemenea, varianta alternativ a ciclului for prin utilizarea sintaxei speciale asociate caracterului ":"
for (expr1; expr2; expr3): instructiune; ...; endfor;

Scriptul 1.6. for_alternativ.php Tabel de culori alternative.

- 40 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 1.5.2.4. Instruciunea

foreach

PHP 4 sau 5 (nu i PHP 3) includ o construcie foreach, foarte asemntoare cu cea din Perl sau alte limbaje. Aceast structur permite iterarea n interiorul unor tablouri de elemente (arrays). Ciclul foreach lucreaz numai cu arrays i va genera o eroare atunci cnd se va ncerca utilizarea unei variabile de un alt tip de dat sau a unei variabile neiniializate. Exist 2 sintaxe ale acestui ciclu:
foreach (expresie_array as $value) instruciune foreach (expresie_array as $key => $value) instruciune

Prima form itereaz peste array-ul desemnat de <expresie_array>. La fiecare ciclu, valoarea elementului curent este asignat variabilei $value pointerul intern al array-ului este incrementat cu o unitate (astfel nct n urmtorul ciclu se va face referire la urmtorul element al array-ului). A doua form se comport similar, doar c indexul elementului curent se va asocia variabilei $key la fiecare ciclu. Observaii: Cnd foreach ncepe execuia primului ciclu, pointerul intern al array-ului este automat resetat la indexul primului element al array-ului. Aceasta nseamn c nu este nevoie s se apeleze reset() naintea execuiei niciunui ciclu foreach. Ciclul foreach lucreaz pe o copie a array-ului specificat i nu pe array-ul nsui. De aceea, pointerul array-ului nu este modificat precum n construcia each() i orice modificare efectuat asupra elementelor din array nu se reflect n array-ul originar. Totui, pointerul intern al arrayului originar este incrementat pe parcursul procesrii array-ului. La sfritul unei procesri complete pointerul intern al array-ului va indica ultimul element din tablou. Ciclul foreach nu poate suprima mesajele de eroare prin utilizarea lui '@'. Urmtoarele structuri funcioneaz identic: Exemplul 1.18. Utilizarea structurii repetitive foreach. Prima sintax i echivalentul ei while.
<?php // Utiliz. structurii repetitive foreach-s1 i echivalentul ei $arr = array("one", "two", "three"); reset ($arr); while (list(, $value) = each ($arr)) { echo "Valoare cu while: $value<br />"; } foreach ($arr as $value) { echo "Valoare cu foreach: $value<br />"; } ?> while

- 41 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Urmtoarele structuri funcioneaz, de asemenea, identic: Exemplul 1.19. Utilizarea structurii repetitive foreach. A doua sintax i echivalentul ei while.

<?php // Utilizarea structurii repetitive foreach-s2 i echivalentul ei while $arr = array("one", "two", "three"); reset($arr); while (list($key, $value) = each ($arr)) { echo "Index-while: $key; Valoare-while: $value<br />"; } foreach ($arr as $key => $value) { echo "Index-foreach: $key; Valoare-foreach: $value<br />; } ?>

Alte exemple de procesare a tablourilor de elemente: Exemplul 1.20. Utilizarea structurii repetitive foreach n diferite ipostaze de procesare a array-urilor.

<?php /* foreach exemplul 1: numai value */ echo "<br/>Exemplul-1<br/>"; $a = array(2, 4, 6, 8); foreach ($a as $v) { echo "Valoarea curenta a lui $a: $v <br/>"; } /* foreach exemplul 2: value (cu afisarea key pentru ilustrare) */ echo "<br/>Exemplul-2<br/>"; $a = array(20, 40, 60, 80); $i = 0; /* numai pentru ilustrare */ foreach ($a as $v) { echo "$a[$i] => $v<br/>"; $i++; } /* foreach exemplul 3: key si value */ echo "<br/>Exemplul-3<br/>"; $a = array( "one" => 200, "two" => 400, "three" => 600, "seventeen" => 800 ); foreach ($a as $k => $v) { echo "$a[$k] => $v<br/>";

- 42 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


} /* foreach exemplul 4: array multi-dimensional */ echo "<br/>Exemplul-4<br/>"; $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2<br/>"; } } /* foreach exemplul 5: array-uri dinamice */ echo "<br/>Exemplul-5<br/>"; foreach (array(10, 20, 30, 40, 50) as $v) { echo "$v<br/>"; } ?>

1.5.2.5.

Instruciunea

break

Instruciunea break termin execuia structurii curente din cadrul instruciunilor structurate for, foreach, while, do..while sau switch. Instruciunea break accept i un argument numeric opional care comunic cte structuri incluse, imbricate, vor fi anulate sau desfcute prin terminarea execuiei lor. Exemplul 1.21. Utilizarea break n diferite structuri repetitive.
<?php $arr = array('one', 'two', 'three', 'four', 'stop', 'five'); echo "<br />Exemplu break pentru while<br />"; while (list (, $val) = each ($arr)) { if ($val == 'stop') { break; /* Se poate scrie de asemenea si 'break 1;' aici. */ } echo "$val<br />"; } /* Utilizarea argumentului optional. */ echo "<br />Exemplu break pentru switch<br />"; $i = 0; while (++$i) { switch ($i) { case 5: echo "Break la 5<br />"; break 1; /* Iesirea numai din switch. */ case 10: echo "Break la 10; Abandonare!<br />"; break 2; /* Iesirea si din switch si din while. */ default:

- 43 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


break;

} } ?>

1.5.2.6.

Instruciunea

continue

Aceasta 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 nr_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 afieaz elementele unui ir de numere ntregi care sunt mai mari dect 1000:
<?php /* Utilizarea instructiunii continue*/ $a = array(2000, 400, 6000, 80, 999, 1001); foreach($a as $k=>$v) { if($v <= 1000) continue; echo "Pret/articol depaseste valoarea de prag (1000): [$k]=$v <br/>"; } ?>

Scriptul 1.7. continue1.php Afiarea selectiv a elementelor care depesc pragul de 1000.

- 44 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Scriptul 1.8. continue.php efectul folosirii argumentelor pentru instruciunea continue.

1.5.3. Sintaxa alternativ pentru structurile de control


PHP ofer sintaxe alternative pentru unele din structurile sale de control cum ar fi if, while, for, foreach i switch. n fiecare caz, forma de baz a sintaxei alternative va nlocui { cu : i } cu cuvintele terminale, respectiv endif;, endwhile;, endfor;, endforeach;, sau endswitch;

<?php if ($a == 5): ?> A este egal cu 5 <?php endif; ?>

n exemplul de mai sus, blocul HTML "A este egal cu 5" este imbricat n interiorul unei nstruciuni if scris cu sintaxa alternativ. Blocul HTML va fi afiat numai dac $a este egal cu 5. Sintaxa alternativ se aplic i structurii else and elseif n egal msur. n exemplul urmtor structurile if, elseif i else sunt n formatul alternativ: Exemplul 1.22. Utilizarea sintaxei alternative pentru structura de control if..elseif..else..endif.
<?php $a=10; if ($a == 5): echo "a este egal cu 5"; echo "..."; elseif ($a == 6): echo "a este egal cu 6"; echo "!!!"; else: echo "a nu este nici 5 nici 6"; endif; ?>

- 45 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Iat n continuare un exemplu de afiare a sumei valorilor unui tablou unidimensional (vector), prin utilizarea variabilelor de tip ntreg i tablou indexat, a instruciunilor for i foreach a operatorilor relaionali, de asignare i de incrementare (funcia predefinit echo( ) afieaz la ieirea standard - aici fereastra navigatorului Web - codul HTML generat): Exemplul 1.23. Generarea unui tablou de valori.
<?php // Umplem un tablou cu valori de la 1 la 10 $n=20; for ($contor =1; $contor <= $n; $contor++) { $valori[$contor] = $contor; } $suma = 0; foreach ($valori as $element) // realizam suma valorilor, utiliznd foreach $suma += $element; // afisam suma obtinuta; valoarea este trimisa browserului cu echo() echo (" <p>Suma numerelor de la 1 la ".$n." este: <b>". $suma . "</b></p>"); ?>

1.6.

Funciile definite de utilizator

O funcie poate fi definit prin utilizarea urmtoarei sintaxe: Exemplul 1.24. Pseudo-cod care ilustreaz definirea i utilizarea funciilor.
<?php function functie($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Exemplu functie.\n"; return $retval; } ?>

Orice cod PHP valid poate fi inclus n interiorul unei funcii, chiar i alte funcii i definiii de obiecte (class). n PHP 3, funciile trebuiau s fi definite nainte de apelul lor. Aceste restricii au fost eliminate pentru PHP 4 i PHP 5. Face excepie cazul n care o funcie este definit condiional ca n exemplul de mai jos. Cnd o funcie este definit ntr-o manier condiional definiia sa trebuie s fie procesat naintea apelului su. Exemplul 1.25. Funcii definite condiional.
<?php $creeaza = true; /* Nu se poate apela nu_exita_func()aici deoarece ea inca nu exista .. ...dar se poate apela exita_func() */ exita_func(); if ($creeaza) {

- 46 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


function nu_exita_func() {echo "Eu NU exist pana cand executia programului nu ajunge la mine<br>"; } } /* Acum se poate apela nu_exita_func() deoarece... ...$creeaza a fost evaluata la true */ if ($creeaza) nu_exita_func(); function exita_func() {echo "DA! Eu exist imediat dupa startul programului<br>"; } ?>

Exemplul 1.26. Funcii imbricate n interiorul altor funcii.


<?php function exita_func() { function nu_exita_func() { echo " Eu NU exist pana cand exita_func() nu este apelata.\n"; } } /* Nu se poate apela nu_exita_func() inca deoarece ea nu exista. */ exita_func(); /* Acum se poate apela nu_exita_func(), deoarece procesarea exita_func() a facut-o accessibila*/ nu_exita_func(); ?>

1.7.

Valorile returnate de funcii

Valorile sunt returnate prin utilizarea instruciunii opionale return. Orice tip de date poate fi returnat, incluznd liste i obiecte. Aceast instruciune determin funcia s-i termine execuia sa imediat i s cedeze controlul napoi liniei de program de unde ea a fost apelat. Exemplul 1.27. Utilizarea instruciunii return()

<?php function patrat($num) {return $num * $num; } $num=35; echo "Patratul lui $num este= ".patrat($num);// Afiseaz '1225'. ?>

- 47 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Exemplul 1.28. Funcie definit recursiv pentru calculul elementelor irului lui Fibonacci i a raportului de aur.

Nu se pot returna valori multiple dintr-o funcie, dar rezultate similare pot fi obinute prin returnarea unei liste. Exemplul 1.29. Returnarea unui array pentru a obine valori multiple.

<?php function articole() { return array ('CAFEA', 100, 20); } list ($den_art, $pret, $cant) = articole(); echo "Valoarea total/articolul $den_art este = ".$pret*$cant." RON"; ?>

- 48 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Constructorul list() este utilizat pentru a atribui valori unei liste de variabile printr-o singur instruciune ca i cnd ar fi elementele unui vector. list() lucreaz numai asupra vectorilor indexai numeric i se consider c indecii numerici pornesc de la 0, n mod implicit. Pentru a returna o referin(adres) dintr-o funcie, trebuie s se utilizeze operatorul referenial & att n antetul de declarare a funciei ct i atunci cnd se asociaz valorile returnate unei variabile: Exemplul 1.30. Returnarea unei referine dintr-o funcie.

<?php function &returneaza_referinta() { return $referinta; } $referinta_noua = &returneaza_referinta(); ?>

1.8.

Variabile funcii

PHP implementeaz conceptul de variabile funcii. Aceasta nseamn c dac numele unei variabile este ncadrat de paranteze, PHP va cuta o funcie cu acelai nume ori de cte ori variabila va fi evaluat i se va ncerca executarea ei. Aceasta poate fi utilizat pentru implementarea tabelelor de funcii, a tehnicilor de autentificare prin apelul emitentului etc. Variabilele funcii nu vor lucra cu construciile limbajului precum echo(), print(), unset(), isset(), empty(), include(), require() etc. Exemplul 1.31. Variabile funcii.

<?php function functia1() { echo "Se executa functia1()<br/>"; } function functia2($arg = '') { echo "Se executa functia2(); Argumentul era '$arg'.<br/>\n"; } // Aceasta este o functie bazata pe echo: repeta valoarea argumentului function ecou($string) { echo $string; } $func = 'functia1'; $func(); // Aceasta apeleaza functia1() $func = 'functia2'; $func('valoare'); // Aceasta apeleaza functia2() $func = 'ecou'; $func('Ecoul argumentului!'); // Aceasta apeleaza ecou()

- 49 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


?>

Se poate, de asemenea, apela metoda unui obiect prin utilizarea variabilelor funcii. Exemplul 1.32. Exemplu de metode variabile.
<?php class Obiect { function Variabila_functie() { $nume = 'Metoda'; $this->$nume(); // Aceasta apeleaza metoda Metoda() } function Metoda() { echo "Se executa functia Metoda!"; } } $obiect = new Obiect(); $nume_func = "Variabila_functie"; $ obiect ->$ nume_func (); // Apeleaza metoda $obiect->Variabila_functie() ?>

1.9.

Programarea orientat spre obiecte n PHP

1.9.1. Clase i obiecte


O clas este o colecie de variabile i funcii care lucreaz cu aceste variabile. O clas este definit prin utilizarea sintaxei urmtoare: Exemplul 1.33. Sintaxa de definire a unei clase.
<?php class Catalog { var $items; // Articole din catalogul magazinul nostru // Aduna $num articole la $artnr din catalogul nostru function add_item($artnr, $num) { $this->items[$artnr] += $num; } // Extrage $num articole din $artnr din catalogul nostru function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } }

- 50 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


?>

n scriptul de mai sus se definete o clas denumit Catalog care conine un array asociativ de articole din catalog i 2 funcii care adun i respectiv extrag articole din acest catalog. Avertisment Nu se poate despri definiia unei clase n mai multe fiiere sau blocuri PHP multiple. O astfel de definiie este greit i nu va fi acceptat: Contra-Exemplu
<?php class test { ?> <?php function test() { prin 'OK'; } } ?>

Observaie: PHP4 rezerv toate numele de funcii care ncep cu __ ca nume magice. Este recomandat s nu se utilizeze nume de funcii cu __ n PHP4 pentru a se evita unele efecte ale funciilor magice. n PHP 4, numai iniializri constante sunt permise pentru variabilele var. Pentru a iniializa variabile cu valori non-constante, este necesar iniializarea unei funcii care este apelat automat cnd un obiect este construit din acea clas. O astfel de funcie este numit un constructor (vezi mai jos): Exemplul 1.34. Utilizarea funciei constructor.
<?php class Catalog { /* Nici una din acestea nu vor functiona in PHP 4. */ var $data_curenta = date("Y-m-d"); var $nume = $prenume; var $proprietar = 'Ion ' . 'Georgescu '; /* Array-uri care contin valori constant vor merge totusi. */ var $items = array("VCR", "TV"); } /* Acesta este modul corect de definire in PHP 4. */ class Catalog { var $data_curenta; var $nume; var $proprietar; var $items = array("VCR", "TV");

- 51 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


function Catalog () { $this->data_curenta = date("Y-m-d"); $this->nume = $GLOBALS['prenume']; /* etc. . . */ } } ?>

Clasele sunt tipuri de date, adic sunt schie sau abloane ale adevratelor variabile. O variabil din tipul dorit se va crea cu operatorul new. Exemplul 1.35. Generare unei clase cu operatorul new.
<?php $catalog = new Catalog; $catalog ->add_item("10", 1); $alt_catalog = new Catalog; $alt_catalog ->add_item("0815", 3); ?>

Aceste declaraii creeaz obiectele $catalog i $alt_catalog, ambele din clasa Catalog. Funcia add_item() a obiectului $catalog este apelat pentru a aduga un exemplar la articolul cu numrul de catalog 10 din clasa $catalog. Trei exemplare din articolul cu numrul de catalog 0815 sunt adugate la $alt_catalog. Ambele, $catalog and $alt_catalog, au funcii add_item(), remove_item() i o variabil exemplar (item). Acestea sunt funcii i variabile distincte. Obiectele pot fi reprezentate mental ca fiind similare directoarelor dintr-un sistem de fiiere. ntr-un sistem de fiiere pot exista dou fiiere diferite README.TXT, atta timp ct ele sunt n directoare diferite. Aa cum, n cazul structurii arborescente a sistemelor de fiiere, trebuie precizat calea complet de acces pentru fiecare fiier ncepnd de la directorul rdcin (i.e. de la nivelul superior), tot aa trebuie specificat numele complet al unei funcii ce urmeaz a fi apelat. n limbajul PHP, directorul rdcin (de la nivelul superior) va fi numele spaiului global, iar separatorul cilor de acces va fi ->. Astfel, numele $catalog->items i $alt_catalog->items sunt dou nume de variabile diferite. A se observa c variabila se numete $catalog->items, i nu $catalog->$items, deoarece un nume de variabil n PHP este precedat de un singur $ (simbolul dolar). Exemplul 1.36. Utilizarea corect a identificatorilor de variabile din interiorul claselor.

<?php // corect, se utilizeaz un singur $ $catalog->items = array("10" => 1); // invalid, deoarece $catalog->$items devine $catalog->"" $ catalog ->$items = array("10" => 1);

- 52 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


// corect, dar s-ar putea sa nu se obtina ceea ce s-a dorit: // $catalog->$myvar devine $catalog->items $myvar = 'items'; $catalog->$myvar = array("10" => 1); ?>

n cadrul definiiei unei clase, nu se va tii numele sub care obiectul va fi accesibil n program (e.g. n momentul n care clasa Catalog a fost definit, nu se tia c obiectul de va numi mai trziu $catalog sau $alt_catalog). Astfel, nu se poate scrie $catalog->items chiar n interiorul clasei Catalog. n schimb, n scopul de a accesa propriile sale funcii i variabile din cadrul unei clase, se poate utiliza pseudo-variabila $this care poate fi citit ca proprietatea mea sau obiectul_curent'. Astfel, $this->items[$artnr] += $num' poate fi citit ca adun $num la contorul $artnr al array-ului meu de exemplare (items) sau adun $num la contorul de exemplare $artnr ale array-ului din cadrul obiectului curent.

1.9.2. Interfee
PHP folosete aceast categorie special de clase ca o alternativ la motenirea multipl. O interfa este declarat similar unei clase dar include numai prototipuri de funcii (fr implementare) i constante. Sintaxa de implementare a unei interfee este urmtoarea:
class A implements B, C, ... { ... }

Clasele care implementeaz o interfa au o legtur instanceof cu interfaa. De exemplu, dac clasa A implementeaz interfaa myInterface, atunci se va tipri mesajul '$obj is-A myInterface':
$obj = new A(); if ($obj instanceof myInterface) { print '$obj is-A myInterface'; }

Exemplul urmtor definete o interfa numit Loggable, ale crei clase pot fi implementate s defineasc care informaii vor fi nregistrate de funcia MyLog(). Obiectele claselor care nu implementeaz aceast interfa i sunt transmise spre funcia MyLog() vor genera un mesaj de eroare:
interface Loggable { function logString();} class Client implements Loggable { private $nume, $adresa, $idNumber, $varsta; function logString() { return "class Client: nume = $this->nume, ID = $this->idNumber\n";} } class Produs implements Loggable { private $nume, $pret, $DataExpirare; function logString() { return "class Produs: nume = $this->nume, pret = $this->pret\n";} } function MyLog($obj) { if ($obj instanceof Loggable) { print $obj->logString();} else {print "Eroare: Obiect nu implementeaz interfata Loggable \n";} } $client = new Client(); // ... $produs = new Produs(); MyLog($client); MyLog($produs);

- 53 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

CAPITOLUL II Preluarea i procesarea datelor cu ajutorul formularelor


1.10. Sintaxa HTML pentru crearea unui formular
Un formular este delimitat de marcajul FORM care conine cteva elemente numite controale, Ce permit preluarea informaiilor printr-o varietate de metode i modaliti. Fiecare element din formular are un nume i o valoare, astfel nct datele transferate pentru procesare s reprezentate sub forma unor perechi nume/valoare. Elementul FORM
<form [action=url] [method=get/post] [enctype=MIMEType] [onsubmit=script] [onreset=script] [acceptcharset=set_caractere] [core] [international] [events]> Elementele formularului </form>

Elementul SELECT Acest element este folosit pentru crearea unei liste de opiuni, fie sub forma unui meniu care se desfoar (list derulant), fie sub forma unei casete cu list derulant. Fiecare din opiunile din list reprezint un element OPTION.
<select [name=nume] [size=latime] [multiple] [disabled] [tabindex=numar] [onblur=script] [onchange=script] [core] [international] [events]> Elementele din select </select> <option [selected] [disabled] [value=valoare] [core] [international] [events]>Nume</option> [onfocus=script]

Exemplu SELECT:
<select name=test> <option value=val_optiune1>DenOptiune_1</option> <option value=val_optiune2>DenOptiune_2</option> <option value=val_optiune3>DenOptiune_3</option> <option value=val_optiune4>DenOptiune_4</option> </select>

- 54 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


<select name=test multiple size=3> <option value=val_optiune1>DenOptiune_1</option> <option value=val_optiune2>DenOptiune_2</option> <option value=val_optiune3>DenOptiune_3</option> <option value=val_optiune4>DenOptiune_4</option> <option value=val_optiune5>DenOptiune_5</option> </select>

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 n preluarea datelor de la utilizator prin intermediul formularelor. Explicitarea valorilor Type ale elementului INPUT button checkbox file hidden image password radio reset submit text Butoane personale Casete de validare Fiiere incluse Elemente ascunse Imagini Casete de introducere a parolei Butoane radio Buton reset Buton trimite Caseta text Exemplu: <input type=submit name=Buton value=Buton> Exemplu: <input type=checkbox name=nume value=valoare> Exemplu: <input type=file name=nume value=valoare> Exemplu: <input type=hidden name=nume value=valoare> Exemplu: <input type=image name=Buton src=poza_buton.gif> Exemplu: <input type=password name=nume value=valoare> Exemplu: <input type=radio name=nume value=valoare> Exemplu: <input type=reset name=Reseteaza value=Reseteaza> Exemplu: <input type=button name=Trimite value=Trimite> Exemplu: <input type=text name=nume value=valoare>

- 55 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Imaginile i exemplele asociate valorilor Type ale elementului INPUT Elementul TEXTAREA Acest element este asemntor cu cel text numai c aici se poate tasta ntr-o seciune mult mai mare dect n cazul text.
<textarea [name=nume] [rows=nr_randuri] [cols=nr_coloane] [disabled] [readonly] [tabindex=numar] [onfocus=script] [onblur=script] [onselect=script] [onchange=script] [core] [international] [events] </textarea>

- 56 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Exemplu TEXTAREA: <textarea name="nume" cols="20" rows="5"> Control pentru introducerea textului </textarea> Exemplu de formular: <form action="formular.php" method="post"> Prenume: <input type="text" name="prenume" value=""> <br><br> Nume: <input type="text" name="nume" value="" size=50 maxLength=15> <br><br> Selectati varsta: <br><br> sub 16 <input type="radio" name="varsta" value="sub16"> | peste 16 <input type="radio" name="varsta" value="peste16"> <br><br> Introduceti parola : <input type="password" name="parola" value=""> <br><br> <input type="submit" name="Trimite" value="Trimite"> <input type="reset" name="Reseteaza" value="Reseteaza"> </form>

1.11. Preluarea datelor din formular 2.2.1. Transmiterea datelor scriptului de prelucrare
n interiorul marcajului <form> exist elementul action i method (care pot fi POST sau GET). n elementul action se pune calea ctre scriptul PHP care prelucreaz datele iar n method se pune metoda prin care se vor prelucra datele atunci cnd butonul Trimite este apsat. - 57 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 POST Aceasta metod face ca datele trimise prin formular s nu fie vizibile utilizatorului adic sunt trimise prin spatele paginii de Web i nu sunt afiate n caseta Address a browserului. GET Prin aceasta metod, datele trimise prin formular sunt vizibile n URL-ul afiat n caseta Address a browserului (adic n pagina de Web asociat i afiat n browser) 1.Transmiterea datelor spre server prin metoda POST Urmtorul exemplu creeaz pagina prin care se afieaz datele trimise prin formular: <?php echo $_POST['nume']; ?> Dup salvare se acceseaz din browser http://localhost/formular.html. Se va completa caseta Nume i apoi se apas butonul Trimite. n pagina formular.php invocat de formular.html se va afia numele introdus n caseta Nume din pagina anterioar (formular.html). Dup adugarea variabilelor $_POST corespunztoare formularului exemplul arat astfel: <?php echo 'Nume: '.$_POST['nume'].' <br> Prenume: '.$_POST['prenume'].' <br> Varsta: '.$_POST['varsta'].' <br> Parola: '.$_POST['parola'].' <br>'; ?>

Folosind variabila $_POST datele nu sunt afiate dect dac le definim $_POST[nume] n pagina formular.php. Numele din interiorul variabilei $_POST trebuie s fie acelai cu numele din interiorul elementelor din formular.html. De exemplu, n formular.html avem input-ul de la numele clientului potenial astfel: <input type="text" name="nume" value="" size=60 maxLength=15> Valoarea cmpului name al acestui element INPUT este nume. Acestuia i se va asocia n variabila $_POST, respectiv $_POST[nume] n continuare pentru prenumele clientului asocierea este previzibil. Urmtorului element din fiierul formular.html : <input type="text" name="prenume" value=""> i corespunde n fiierul formular.php elementul $_POST[prenume] . . . .a.m.d. - 58 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Transmiterea datelor spre server prin metoda POST- versiunea I-a

2.2.2. Transmiterea datelor spre server prin metoda GET


n acelai formular din pagina formular.html, se va substitui n cadrul marcajului <form>, vechea metoda method=post, cu noua metod method=get. Apoi n pagina formular.php, n loc de variabilele $_POST, se vor pune variabile $_GET . n formular.html se modific linia din forma iniial: <form action="formular.php" method="post"> n forma final: <form action="formular.php" method="get"> Pagina formular.html se modific dupa cum urmeaz: <?php echo 'Nume: ' .$_GET['nume'].' <br> Prenume: '.$_GET['prenume'].' <br> Varsta: ' .$_GET['varsta'].' <br> Parola: ' .$_GET['parola'].' <br>'; ?> - 59 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Rezultatul obinut este acelai n pagina Web, numai c informaiile formularului sunt postate i n adresa din browser(URL) sub forma unui ir n care elementele sunt separate de caracterul &:

Metoda POST dezvluie valorile transmise, ns este recomandabil pentru sigurana transmiterii. Transmiterea datelor spre server prin metoda GET- versiunea a II-a

2.2.3. Verificarea datelor trimise prin formular


Verificarea coninutului trimis prin formular se face tot prin utilizarea acelorai metode POST sau GET i a structurii if..else pentru validarea datelor conforma condiiilor impuse ca n exemplul urmtor: - 60 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Fiierul formular_POST_VERIF.html
<?php if(($_POST[nume] == ) || (is_numeric($_POST[nume])) || (strlen($_POST[nume]) < 5)) {echo Campul nume nu a fost completat corect. <br> <a href=formular_POST_VERIF.html>Apasati aici</a> pentru a va intoarce la formularul initial.; } else {echo Nume: .$_POST[nume]. <br> Prenume: .$_POST[prenume]. <br> Varsta: .$_POST[varsta]. <br> Parola: .$_POST[parola]. <br>; } ?>

Fiierul formular_POST_VERIF.php i mesajul de eroare afiat atunci cnd se completeaz greit. Condiia verificat este: dac variabila cu numele $_POST[nume] este goal, ori dac este numeric, ori dac numrul de caractere este mai mic de 5, atunci se va afia mesajul de eroare i se va propune ntoarcerea la formularul iniial. Dac toate condiiile sunt ndeplinite, atunci se va executa ramura else.

2.2.4. Preluarea i validarea datelor printr-un formular cu liste derulante


n formularul care urmeaz se vor genera controale cu liste derulante, care faciliteaz introducerea datelor i delimiteaz, n acelai timp, domeniul de definiie al datelor acceptabile. Validarea datelor introduse se refer la dimensiunea numelui i la maturitatea apelantului, dedus din vrsta declarat. De asemenea, rspunsul serverului este difereniat i adaptat la genul apelantului.

- 61 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

2.2.5. Preluarea comenzilor unui magazin electronic printr-un formular


n exemplul care urmeaz, un e-magazin virtual va prelua comenzile primite de la clieni prin intermediul unui formular electronic. Clienii trebuie numai s selecteze produsele dorite i s transmit comanda. Rspunsul serverului de comer electronic va reproduce coninutul comenzii printr-un mesaj de feedback, care permite clientului s verifice exactitatea datelor transmise. - 62 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Fiierul FORMULAR2_met_POST.php gestioneaz formularul i activeaz scriptul actiune2_POST.php la acionarea butonului Trimite comanda. Elementele de control utilizate sunt de tipul checkbox

Fiierul actiune2_POST.php afieaz i verific existena datelor trimise prin metoda POST de fiierul FORMULAR2_met_POST.php. Elementele de control utilizate, de tipul checkbox, pot s nu iniializeze indecii i valorile asociate n variabila $_POST dac nu sunt selectai. Atunci pentru a evita mesajele de eroare generate n acest caz, se va verifica existena lor prin funcia boolean isset(). Fiierul actiune2_POST.php este activat de butonul "Trimite comanda". - 63 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

CAPITOLUL IV Utilizarea variabilelor de sesiune Cookie


1.12. Crearea variabilelor de sesiune cookie
Valorile celor mai multe variabile PHP se pierd la ncheierea execuiei scriptului. Acesta reprezint un dezavantaj major, deoarece valorile unor variabile ar trebui pstrate, astfel nct, atunci cnd utilizatorul revine la o pagin deschis anterior sau deschide alte pagini a cror accesare necesit valoarea unei variabile precizate deja, aceasta s nu-i mai fie solicitat. Definiie: Sesiunea reprezint succesiunea de accesri ale unor pagini componente ale unui site Web de ctre un utilizator, n aceeai fereastr a navigatorului. O sesiune se ncheie n situaia n care utilizatorul nchide browserul Web. Problema pstrrii valorilor unor variabile ntre dou accesri succesive ale paginilor componente ale unui site (n cadrul aceleiai sesiuni) poate fi rezolvat n trei moduri diferite: 1. 2. 3. Transmiterea unor parametri adugai la URL-ul scriptului curent. Aceasta soluie nu este des utilizat din cauza limitrii numrului i dimensiunilor valorilor transmise; Utilizarea variabilelor cookie; Utilizarea variabilelor sesiune.

Protocolul http, care este utilizat n WWW, este lipsit de stri, adic nu introduce nici o posibilitate de memorare a unui utilizator i a aciunilor acestuia (i.e., serverul Web nu memoreaz cererile clientului). Utilizarea variabilelor cookie reprezint una dintre soluiile implementate n PHP (ca i n alte limbaje/platforme de programare) pentru pstrarea strii sesiunii. Rezolvarea problemei pstrrii valorilor unor variabile se face prin memorarea lor pe calculatorul utilizatorului i prin folosirea acestor valori atunci cnd este nevoie de ele. Ele sunt valori ale unor variabile PHP speciale, numite variabile cookie. Acestea sunt utilizate n diverse scopuri, de exemplu: pstrarea unor informaii privitoare la preferinele utilizatorilor (e. g., tema cromatic a site-ului); pstrarea unor date volatile (e.g., comenzile de produse n cadrul unui co de cumprturi). Pentru pstrarea informaiilor confideniale (aa cum sunt parolele) se utilizeaz variabilele sesiune (ale cror valori sunt pstrate la loc sigur, pe server). Pentru pstrarea diverselor variabile de stare privitoare la un anumit vizitator al unui site Web se pot utiliza variabilele cookie. Implementarea acestui mecanism de conservare temporar a informaiilor se realizeaz prin activarea n browser a posibilitii/opiunii de utilizare a variabilelor cookie. Aceasta este condiia sine qua non pentru funcionarea corect a exemplelor prezentate n continuare. Pentru a crea o variabil cookie n PHP, se folosete funcia predefinit setcookie al crei prototip este prezentat n continuare: int setcookie (string nume [, string valoare [, int moment_expirare [, string cale [, string domeniu [, int sigurana] ] ] ] ] ) - 64 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Explicitarea argumentelor funciei setcookie(): 1. nume este singurul argument obligatoriu al funciei; acest argument specific numele variabilei cookie. Dac este prezent numai argumentul nume, variabila cu numele nume va fi tears de pe calculatorul client; 2. valoare indic valoarea variabilei cookie; 3. moment_expirare indic momentul expirrii", dup care variabila cookie nu mai este accesibil; este un ntreg de tip timp UNIX, ntors de funciile PHP time() sau mktime (). a. Dac moment_expirare nu este precizat, este creat un cookie nepersistent (stocat n browserul utilizatorului, dar nu i pe hard-diskul acestuia) sau temporar. b. Dac moment_expirare este precizat n viitor, atunci este creat un cookie persistent (stocat ntr-un fiier situat pe hard-diskul utilizatorului i n browser). c. Dac moment_expirare este precizat n trecut, variabila cookie corespunztoare este tears (inclusiv de pe hard-diskul utilizatorului, n cazul cookie-urilor persistente). Cnd terge o variabil cookie, programatorul trebuie s asigure ca moment_expirare s fie n trecut, pentru a asigura declanarea mecanismului de eliminare a variabilei (mecanism asigurat de browser); 4. sigurana indic faptul c variabila cookie va fi trimis folosind o conexiune sigur (HTTPS). Valoarea 1 indic serverului s nu transmit variabila cookie n cazul n care conexiunea nu este sigur, iar valoarea 0 permite transmiterea variabilei cookie i prin conexiuni HTTP nesigure; 5. cale specific un URL asociat variabilei cookie. n mod obinuit (i.e., n absena acestui argument), variabila cookie poate fi utilizat numai de scripturile aflate n acelai director cu scriptul n care a fost definit variabila, precum i n subdirectoarele acestuia. Dac se dorete ca variabila cookie s poat fi folosit n scripturile altui director i ale subdirectoarelor acestuia, acest director trebuie s fie indicat n mod explicit prin specificarea cii sale; 6. domeniu permite specificarea unui nume de domeniu, astfel nct variabila cookie va putea fi utilizat numai n scripturile care aparin unui site din domeniul respectiv. n mod implicit, o variabil cookie poate fi folosit numai de scripturile aflate n acelai site Web n care se afl scriptul care a generat variabila respectiv; Observaii: Funcia setcookie() definete o variabil cookie care va fi trimis ca o parte a antetului HTTP. Prin urmare, apelul funciei setcookie() trebuie plasat nainte de marcajul <html> sau de o instruciune echo. Pentru evitarea acestei restricii se utilizeaz mecanismul output buffering. Utilizarea acestui mecanism presupune activarea, n prealabil, a directivei output_buffering (=On) n fiierul de configurare php.ini; Variabilele cookie vor deveni vizibile n pagina n care sunt definite numai la urmtoarea ncrcare a acesteia; O variabil cookie trebuie tears cu aceiai parametri utilizai la crearea ei (variabila va fi tears, oricum, la expirarea termenului, dac un astfel de termen este precizat); Argumentele se pot nlocui cu irul vid (), pentru a le omite; argumentele moment_expirare i sigurana sunt ntregi care nu pot fi nlocuii cu iruri vide (n schimb, poate fi folosit valoarea 0- zero). Numele tuturor variabilelor cookie (persistente i nepersistente) definite la un moment dat, precum i valorile acestora pot fi obinute utiliznd tabloul global asociativ HTTP_COOKIE_VARS sau tabloul $_COOKIE (acesta din urm ncepnd cu versiunea 4.1.0 a limbajului PHP). n cazul n care se utilizeaz IIS (Microsoft Internet Information Server) trebuie fcut o modificare n fiierul de configurare .\PHP\php.ini cu rolul de a dezactiva variabila cgi.force_redirect fr a afecta securitatea serverului de Web. Fiierul de configurare - 65 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 .\PHP\php.ini poate fi adaptat dupa sursa php.ini-recommended aflat tot n folder-ul PHP:
; cgi.force_redirect is necessary to provide security running PHP as a CGI under ; most web servers. Left undefined, PHP turns this on by default. You can ; turn it off here AT YOUR OWN RISK ; **You CAN safely turn this off for IIS, in fact, you MUST.** cgi.force_redirect = 0

Deoarece variabilele cookie persistente sunt pstrate pe hard-disk-ul utilizatorului, acestea pot fi citite de persoane ruvoitoare. De aceea, se impune criptarea acestora prin intermediul funciilor Mcrypt, din biblioteca libmcrypt. Aceast bibliotec nu face parte din distribuia standard PHP. De asemenea, se poate utiliza criptarea PHP prin intermediul funciilor md5() i crypt(), incluse n distribuia standard PHP. Crearea i utilizarea variabilelor cookie n acest exemplu sunt create dou variabile cookie persistente ($var1cookie i $var2cookie) i o variabil cookie nepersistent ($var3cookie).

Valorile variabilelor cookie definite n scriptul prezentat anterior sunt stocate n 3 elemente ale tabloului superglobal $_COOKIE: $_COOKIE ['var1cookie'] , $_COOKIE['var2cookie'] i $_COOKIE ['var3cookie']. Ele vor fi afiate la a doua execuie a scriptului (dup operaia de Refresh/Reload). Ca o msur de securitate sporit, browserul poate fi setat astfel nct i cookie-urile s ntrebe utilizatorul dac le accept sau nu. Locul de pe hard-disk-ul utilizatorului n care se stocheaz cookie-urile persistente depinde de navigatorul utilizat. Informaiile prezentate n continuare se refer 1a navigatorul Internet Explorer-6.0. n cazul sistemului de operare Windows XP, fiierele acestea se gsesc n directorul c:\Documents and Settings\Administrator\Cookies\ (dac suntei logat ca Administrator) sau n directorul c:\Documents and Settings\Utilizator\Cookies (dac suntei logat n contul utilizatorului Utilizator). Coninutul fiierului administrator@COOKIE[1].txt de pe aceast cale poate fi examinat prin editare cu un editor ASCII obinuit(Notepad sau Wordpad). Variabilele cookie persistente pot fi terse astfel: Automat, n momentul expirrii lor; n mod explicit, de ctre serverul care le-a produs (prin intermediul navigatorului, nainte de momentul expirrii lor); n mod explicit, de ctre utilizator (prin intermediul navigatorului); n mod explicit, de ctre utilizator, prin tergea de pe hard-disk a fiierului n care sunt stocate variabilele persistente (nainte de momentul expirrii lor). - 66 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Variabilele cookie nepersistente pot fi terse astfel: Automat, la nchiderea instanei navigatorului care le posed; n mod explicit, de ctre serverul care le-a produs (prin intermediul navigatorului, nainte de nchiderea instanei navigatorului). tergerea variabilelor cookie (persistente i nepersistente)

1.13. Conservarea preferinelor utilizatorului


Aplicaia urmtoare este alctuit din trei fiiere (schimba_culoarea.php, seciunea_1.php i seciunea_2.php). Ea permite stabilirea culorii de fundal a ferestrei n care sunt afiate paginile sale componente, n funcie de preferinele utilizatorului. A se observa apelul recursiv al scriptului schimba_culoarea.php (i.e. aciunea asociat formularului definiti aici este tot schimba_culoarea.php <form action= schimba_culoarea.php>). Aceasta rezolv problema regenerrii paginii Web cu nou culoare de fundal selectat din controlul select (<body bgcolor="<?php echo $culoare; ?>">). n directorul cookie, se creaz subdirectorul culori, n care se vor salva fiierele aplicaiei.

Aplicaia preferine: coninutul fiierului seciunea_1.php

- 67 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Aplicaia preferine: coninutul fiierului seciunea_2.php

Aplicaia preferine: coninutul fiierului schimba_culoarea.php

1.14. Aplicaie. Coul electronic de cumprturi virtuale


n aceast subcapitol este prezentat o aplicaie n care se realizeaz un co de cumprturi pentru o librrie virtual. Aplicaia include patru scripturi n fiierele conectare.php, index.php, oferta.php i operatii.php, n subdirectorul librrie, creat n prealabil. - 68 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Comenzile inserate n interfaa CGI a serverului MySQL. # Mai nti se creeaz baza de date librrie i tabelele carti i reviste incluse n ea: mysql> create database librarie; mysql> use librarie; mysql> create table carti (titlu VARCHAR(100) PRIMARY KEY, ->autor VARCHAR(50)); mysql> create table reviste(nume VARCHAR(100) UNIQUE);

Interogarea CREATE TABLE n sintaxa acceptat de MySQL Query Browser CREATE TABLE `librarie`.`carti` ( `Titlu` VARCHAR(100), `Autor` VARCHAR(50), PRIMARY KEY(`Titlu`)) TYPE = InnoDB;

- 69 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Interogarea CREATE TABLE n sintaxa acceptat de MySQL Query Browser CREATE TABLE `librarie`.`reviste` ( `Nume` VARCHAR(100) NOT NULL, PRIMARY KEY(`Nume`)) TYPE = InnoDB;

Comenzile inserate n interfaa CGI a serverului MySQL. # Se introduc nregistrri n cele dou tabele carti i reviste: mysql> INSERT INTO carti VALUES ('carte_1','autor_1'); .................................................................................................................. mysql> INSERT INTO carti VALUES ('carte_10','autor_10'); mysql> INSERT INTO reviste VALUES ('revista_1') ; .................................................................................................................. mysql> INSERT INTO reviste VALUES (' revista__10 ' ) ;

- 70 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Scriptul complet care realizeaz secvena complet de operaii: 1. 2. 3. 4. Crearea bazei de date librarie Crearea tabelelor carti i reviste Completarea structurii tabelelor carti i revistecu cmpul suplimentar pret Introducerea a cte 10 nregistrri generice n tabelele carti i reviste

- 71 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Crearea Data Source Name oferta_carti_dsn pentru baza de date librarie

n continuare este prezentat codul-surs PHP inclus n cele trei fiiere componente ale aplicaiei co_de_cumprturi: 1. index.php- Include celelate 2 fiiere. Genereaz formularul iniial pentru apelul a 5 operaii: a. Adaug produse n coul virtual de cumprturi electronice b. Afieaz produsele din coul virtual de cumprturi electronice c. Adaug datele personale ale clientului d. Afieaz variabilele COOKIE generate n timpul sesiunii e. Finalizeaz cumprturile prin efectuarea calculelor preului total al coului

- 72 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 2. oferta.php- Conine 2 funcii de afiare a ofertei de produse: a. carti() #funcia pentru afiarea produselor (cri) disponibile b. reviste() #funcia pentru afiarea produselor (reviste) disponibile operatii.php- Conine 7 funcii de gestionare a operaiilor de comer electronic: a. adauga_carte($carte,$nr_carti) #permite adugarea crii selectate n co. b. adauga_revista($revista,$nr_reviste) #permite adugarea revistei select. n co. c. afiseaza() #determin afiarea coninutului coului de cumprturi d. cumpara() #functia care permite efectuarea operaiei de cumprare a produselor e. adauga_date() # afieaz un formular pentru datele personale ale utilizatorului f. stocheaza_date() #stocheaz datele personale ale utilizatorului n var. cookie date g. afiseaza_var_cookie()#afieaz toate variabilele cookie generate n sesiune

3.

Formularul iniial generat de scriptul fiierului index.php

Formularul generat de scriptul fiierului oferta.php funcia carti()

- 73 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Formularul generat de scriptul fiierului oferta.php funcia reviste()

- 74 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Aplicaia co_de_cumprturi: coninutul fiierului index.php

- 75 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Aplicaia co_de_cumprturi: coninutul fiierului oferta.php

- 76 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

Aplicaia co_de_cumprturi: coninutul fiierului operatii.php

- 77 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

- 78 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

- 79 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

CAPITOLUL X Metalimbajul XML (eXtensible Markup Language)


1.15. Introducere
XML, acronim pentru eXtensible Markup Language, reprezint un set de reguli (sau convenii) pentru crearea formatelor text ce permit structurarea informaiilor. XML este un limbaj de marcare precum HTML. Dar spre deosebire de HTML care a fost proiectat pentru formatarea afirii datelor, XML a fost proiectat pentru transportul i stocarea informaiilor. XML nu este un limbaj de programare. Cu XML se asigur numai corectitudinea structurii datelor. XML evit problemele obinuite ale limbajelor de programare: este extensibil, independent de platform i permite att diseminarea internaional ct i particularitile regionale. XML este complet compatibil cu Unicode (Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language).
Document XML Procesor XSL Document HTML

Document XML

Documente structurate Document XSL de formatare stil

Figura 1.2.

Procesarea XSL a documentelor XML i tipurile de documente rezultate n urma procesrii lor.

Caracteristici XML: XML a fost proiectat pentru transportul datelor i nu pentru formatarea afirii lor; Marcajele XML nu sunt predefinite ci se definesc ad-hoc de utilizator; XML a fost proiectat s fie auto-descriptiv; XML este o recomandare a Consoriului W3C

1.16. Scurt istoric ale specificaiilor fundamentale


XML (eXtensible Markup Language), descendent al SGML (Standard Generalized Markup Language) este un meta-limbaj utilizat n marcarea structurat a documentelor, a crui specificaie a fost dezvoltat ncepnd cu 1996 n cadrul Consoriului World Wide Web (W3C), de un grup de cercetare condus de Jon Bosak de la Sun Microsystems, la care au aderat ulterior o serie de grupuri de experi din comunitile academice (Text Encoding Initiative, NCSA, James Clark) precum i industriale (SUN, IBM, Netscape, Oracle, Adobe etc.). Prima versiune de XML a fost standardizat

- 80 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 n februarie 1998, ulterior acest standard a mai fost revizuit de dou ori n octombrie 2000 i respectiv n februarie 2004. Scopurile urmrite n proiectarea lui XML sunt: 1. XML trebuie s fie simplu de utilizat pe Internet. 2. XML trebuie s suporte o mare varietate de aplicaii. 3. XML trebuie s fie compatibil cu SGML. 4. Trebuie s fie uor de scris programele ce vor procesa documente XML. 5. Numrul facilitilor opionale din XML sunt reduse la minimum, ideal, la zero. 6. Documentele XML trebuie s fie citibile de ctre utilizatori i clare ntr-un mod rezonabil. 7. Designul XML ar trebui s fie pregtit rapid. 8. Designul XML trebuie s fie formal i concis. 9. Documentele XML trebuie s fie uor de creat. 10. Caracterul lapidar din marcajele XML s fie de o importan minim. Diferenele dintre XML i HTML: XML nu nlocuiete HTML, ci este o completare a sa. XML i HTML au fost proiectate pentru scopuri diferite: XML a fost proiectat pentru transportul i stocarea datelor i este focalizat pe coninutul lor; HTML a fost proiectat pentru afiarea datelor i este focalizat pe formatarea aspectului lor.

1.17. Definiia documentelor XML


Documentele XML sunt realizate din uniti de stocare numite entiti, ce conin date analizate i/sau neanalizate. Datele analizate sunt realizate din caractere, unele dintre ele formnd date caracter iar altele alctuiesc marcaje. Marcajele codific o descriere a schemei de stocare a documentului i structura sa logic. XML furnizeaz un mecanism pentru a impune constrngeri asupra schemei de stocare i a structurii logice. XML a fost elaborat i proiectat pentru: separarea sintaxei de semantic i pentru a furniza unui cadru comun de structurare a informaiei construirea de limbaje de marcare pentru aplicaii din orice domeniu structurarea informaiei pentru utilizarea ei n viitor asigurarea independenei de platform i suport i pentru diseminarea internaional a informaiei. Un document XML are o structur arborescent etichetat ordonat: datele caracter reprezint nodurile frunz ale arborelui i conin informaiile utile transportate de document nodurile elemente pot conine unu sau mai muli descendeni i sunt etichetate cu: un nume (adesea numit i tipul elementului) i o mulime de atribute, fiecare din ele avnd un nume i o valoare Toate documentele XML trebuie s conin un element rdcin (root). Acest element este "printele" tuturor celorlalte elemente. - 81 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Elementele unui document XML alctuiesc un arbore. Toate elementele pot avea sub-elemente (elemente fiu sau descendente): <root> <fiu> <sub-fiu>.....</sub-fiu> </fiu> </root> Toate elementele pot avea un coninut text i atribute precum n HTML.
Elementul root: <librarie>
Parinte
(ascendent)

Fiu
(descendent)

Atribut: limba

Element: <carte>

Atribut: categorie

Element: <titlu>

Element: <autor>

Element: <an>

Element: <pret>

Text: Learning XML

Text: Erik T. Ray

Text: 2003

Text: 39.95

Figura 1.3.

Reprezentarea structurii arborescente a unui document XML

<librarie> <carte categorie="SCIENCE FICTION"> <titlu limba="en">2001. A Space Odissey</titlu> <autor>Arthur C. Clarke</autor> <an>1972</an> <pret>30.00</pret> </carte> <carte categorie="AVENTURI"> <titlu limba="en">Harry Potter</titlu> <autor>J K. Rowling</autor> <an>2005</an> <pret>29.99</pret> </carte>

- 82 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


<carte categorie="WEB"> <titlu limba="en">Learning XML</titlu> <autor>Erik T. Ray</autor> <an>2003</an> <pret>39.95</pret> </carte> </librarie>

Un alt exemplu de reprezentare a unui document XML destinat transmiterii si stocrii potei electronice este urmtorul:

Figura 1.4.

Reprezentarea unui document XML destinat transmiterii si stocrii potei electronice

1.18. Structura documentelor XML


Un document XML este format din marcaje (tag-uri) i date caracter (Character Data). Un marcaj (tag) este un ir de caractere delimitat de caracterele "<" i ">". Datele caracter reprezint coninutul informaional al documentului ncadrat de marcaje. n XML, marcajele nu sunt folosite pentru afiarea datelor coninute, ci au alte scopuri printre care: asigur o sintaxa simpl i standardizat pe care analizoarele XML o pot folosi pentru a utiliza informaia stocat asigur o metod de a descrie structura ierarhic a coninutului prin mprirea informaiei (datele caracter) n pri numite elemente care mai departe sunt descrise prin atribute. Structura ierarhic a ntregului document este pus n eviden prin utilizarea marcajelor. Un fiier XML cuprinde urmtoarele seciuni: 1. 2. 3. Prolog Definiia tipului de document (opional) Elementul rdcin - 83 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Exemplul 10.1. Fiierul mail.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MAIL SYSTEM "MAIL.DTD"> <MAIL id="10" date="23-03-2008"> <FROM>ezaharescu@univ-ovidius.ro</FROM> <TO>admin@@univ-ovidius.ro</TO> <SUBJECT>Anunt</SUBJECT> <BODY> Informaii </BODY> </MAIL>

Prologul:
<?xml version="1.0" encoding="UTF-8"?>

Este o instruciune de procesare. Ea informeaz ca urmeaz descrierea unui fiier XML ce respect versiunea de specificaie 1.0 iar setul de caractere utilizat este codat UTF-8 (8-bit Unicode Transformation Format) Definiia tipului de document:
<!DOCTYPE MAIL SYSTEM "MAIL.DTD">

Precizeaz c fiierul MAIL.DTD conine declaraia tipului de document (DTD=Document Type Definition), document ce are ca rdcin tag-ul MAIL. Acesta este un set de reguli ce definesc structura unui fiier XML. Elementul rdcin:
<MAIL id="10" date="23-03-2008"> <FROM>ezaharescu@univ-ovidius.ro</FROM> <TO> admin@@univ-ovidius.ro</TO> <SUBJECT>Anunt</SUBJECT> <BODY> Informaii </BODY> </MAIL>

1.19. Sintaxa unui document XML


Un document XML poate s conin urmtoarele tipuri de marcaje:

- 84 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Elemente Atribute Comentarii Entiti Seciuni CDATA Instruciuni de procesare Declaraia tipului de document

10.5.1.

Elementele

Elementele sunt blocurile de baz ale unui document XML. Pot fi folosite att pentru a reine informaii, ct i pentru definirea structurii documentului. Un element ncepe cu un marcaj de start si se termina cu corespunztorul marcaj de sfrit:
<nume_marcaj > ........ </nume_marcaj >

marcajul de start marcajul de sfrit Un element poate fi vid, adic poate s nu conin nimic. Sintaxa pentru un element vid este urmtoarea:
<nume_marcaj/>

Observaie: Marcajele sunt case sesitive, adic se face distincia ntre literele majuscule i literele minuscule. Astfel, urmtoarele exemple de marcaje sunt greite:
<Student>Popescu</STUDENT> <StudenT>Popescu</student>

Numele unui marcaj este o succesiune de caractere alfa-numerice ce ncepe obligatoriu cu o liter. Astfel <7nume> este eronat. Elementele sunt utilizate nu numai pentru a reine informaii, ele se utilizeaz i pentru a defini structura documentului: Exemplul 10.2. Biblioteca.XML

<?xml version="1.0"?> <BIBLIOTECA> <CARTE> <TITLU>XML Bible</TITLU> <AUTOR>Elliotte Rusty Harold</AUTOR> <EDITURA>IDG Books Worldwide</EDITURA> <AN_APARITIE>2002</AN_APARITIE> </CARTE> </BIBLIOTECA>

n acest exemplu, observm c elementele <TITLU>, <AUTOR>, <EDITURA>, <AN_APARITIE> conin informaii, n timp ce elementele <BIBLIOTECA>, <CARTE> sunt

- 85 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 folosite doar pentru a defini structura datelor. Prin folosirea lor, datele sunt mai bine organizate, facilitnd eventualele operaii de cutare, afiare sau sortare a datelor.

10.5.2.

Atributele

Atributele au rolul de a descrie elementele. Atributele n XML sunt aceleai cu atributele din HTML. De exemplu, un atribut al elementului <table> ar fi align="center". Atributele sunt localizate n marcajul de start al unui element, imediat dup numele elementului i sunt urmate de semnul = i de valoarea atributului delimitat de ghilimele (aici se gsete i explicaia regulii care interzice apariia spaiilor albe n numele unui element). Daca valoarea unui atribut nu este delimitat de ghilimele va fi semnalat o eroare de ctre analizorul XML, la fel ca i n cazul n care pentru un atribut nu ar apare i valoarea acestuia. Astfel, sintaxa general este urmtoarea:
<nume_marcaj numeAtribut1="valoare1"... numeAtributN="valoareN">...</nume_marcaj>

Pentru un element pot exista oricte atribute, att timp ct sunt declarate corect. Exemplul 10.3. Atributele elementelor XML

<?xml version="1.0"?> <BIBLIOTECA> <CARTE cota="12345" limba="engleza" > <TITLU>XML Bible</TITLU> <AUTOR>Elliotte Rusty Harold</AUTOR> <EDITURA> IDG Books Worldwide</EDITURA> <AN_APARITIE>2002</AN_APARITIE> </CARTE> </BIBLIOTECA>

10.5.3.

Comentariile

Comentariile sunt secvene de caractere ce pot aprea oriunde n document n afara altor marcaje ce sunt utilizate pentru a descrie anumite detalii legate de coninutul i structura documentului programatorului. Ele nu fac parte din datele caracter ale documentului. Un procesor XML poate s dea un acces aplicaiilor la comentarii, fr a fi ns obligatoriu. Un comentariu ncepe cu secvena <!-- si se ncheie cu -->.
<!-- comentariu -->

Comentariile pot fi orict de lungi, nu exist limite n ceea ce privete lungimea lor. De asemenea, un comentariu nu poate s conin secvena de caractere "--".

- 86 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Exemplul 10.4. Comentariile n XML

<?xml version="1.0"?> <!-- Documentul contine cartile dintr-o biblioteca --> <BIBLIOTECA> <CARTE cota="12345" limba="engleza" > <!-- titlul cartii --> <TITLU>XML Bible</TITLU> <!-- Autorul Cartii --> <AUTOR>Elliotte Rusty Harold</AUTOR> <!-- Editura in care a aparut cartea --> <EDITURA> IDG Books Worldwide</EDITURA> <!-- Anul de aparitie a cartii --> <AN_APARITIE>2002</AN_APARITIE> </CARTE> </BIBLIOTECA>

10.5.4.

Referinele la entiti

Referinele la entiti sunt de fapt pointeri ctre entiti. n XML, entitile sunt uniti de text, unde o unitate poate fi orice, de la un singur caracter la un ntreg document sau chiar o referin la un alt document. Sintaxa referinelor la entiti este &, urmat de numele entitii, urmat de ;:
&nume_entitate;

Una dintre cele mai frecvente utilizri ale referinelor la entiti este atunci cnd se dorete folosirea unor caractere care ar duce la apariia unor confuzii pentru analizorul XML i deci care nu ar trebui s apar n forma lor normal n text. n acest caz exist cinci entiti predefinite n XML: Tabelul 10.1. Entitate < > & ' Entiti definite in XML Referina la entitate &lt; &gt; &amp; &apos;

" &quote; n momentul n care analizorul XML ntlnete referina la o entitate n document, el o va substitui cu datele la care aceasta se refer i va returna documentul cu toate nlocuirile realizate. Exemplul 10.5. Entitile n XML

<TITLE>Romulus &amp; Remus</TITLE>

dup analizarea textului de ctre analizorul XML, va rezulta:


Romulus & Remus

- 87 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 O alt utilizare frecvent a referinelor la entiti apare n cazul documentelor XML ce conin fragmente de text care se repet. Pentru a nu repeta scrierea acestor poriuni de text de mai multe ori se va defini o entitate care va avea ca valoare acea poriune de text i de fiecare dat cnd fragmentul respectiv apare n document vom folosi numai referina la entitate. Prin folosirea referinelor la entiti se vor obine documente mai scurte i se va scurta timpul de redactare.

10.5.5.

Instruciunile de prelucrare

Instruciunile de prelucrare sunt un tip special de marcaj care conin informaii despre anumite aplicaii ce urmeaz a fi executate. Sintaxa general a unei instruciuni de procesare ar fi urmtoarea:
<?aplicatie instructiune="valoare" ?>

Instruciunile de prelucrare ncep cu <?, urmat de numele aplicaiei i de specificarea unor elemente ce in de acea aplicaie i se ncheie cu ?>. Numele aplicaiei trebuie s fie diferit de xml sau XML, sau alte moduri de scriere a acestui cuvnt, deoarece cuvintele de acest tip sunt rezervate, urmnd a fi standardizate ntr-o versiune ulterioar.

10.5.6.

Seciunile CDATA

Seciunile CDATA sunt utilizate pentru a include blocuri de text coninnd caractere care altfel ar fi recunoscute ca marcaje. Seciunile CDATA ncep cu irul <![CDATA[ i se termin cu irul ]]>. Seciunile CDATA sunt folosite n general atunci cnd se dorete ca datele incluse n interiorul lor s nu fie interpretate de ctre analizor, ci s fie considerate date caracter. Astfel de situaii se ntlnesc cnd dorim s includem caractere ca <, >, & etc. care ar putea crea confuzii analizorului XML i folosirea lor ar putea duce chiar la generarea de erori sau cnd dorim s includem marcaje care s fie considerate drept date caracter i s fie expuse utilizatorului ca atare. Spre exemplificare, considerm un fragment de document XML care conine informaii despre cum se poate crea un tabel n HTML:

<?xml version="1.0" encoding="UTF-8"?> <exemplu> Un exemplu de creare a unui tabel in HTML: <![CDATA[ <table align=center> <tr> <td>Coloana 1</td> <td>Coloana 2</td> </tr> </table> ]]>; </exemplu>

- 88 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 Folosind seciunea CDATA, analizorul va ignora coninutul acesteia i datele vor fi expuse utilizatorului exact n forma n care sunt. Datele, deci, nu vor fi interpretate drept marcaje, ci drept date caracter. O restricie de sintax este faptul ca n interiorul seciunilor CDATA nu poate s apar irul ']]'. nc un lucru de reinut este c seciunile CDATA nu pot fi incluse unele in altele.

10.5.7.

Declaraia tipului de document

Declaraia tipului de document este un marcaj special ce poate fi inclus n documentele XML cu rolul de a specifica existena i locaia definiiei tipului de document (DTD Document Type Definition). Declaraia tipului de document i definiia tipului de document sunt noiuni diferite. DTD-ul este un set de reguli care definesc structura unui document XML, spre deosebire de declaraia tipului de document care are rolul de a transmite analizorului XML informaia despre definiia DTD ce trebuie s o foloseasc pentru verificare i validare. Sintaxa declaraiei tipului de document difer n funcie de tipul DTD-ului: intern sau extern. Considernd c avem un document XML numit doc.xml, modul de asociere dintre structura sa i setul de reguli specificate n reguli.dtd se realizeaz prin inserarea in documentul XML, imediat dup declaraia XML, a urmtoarei declaraii referitoare la tipul documentului:
<!DOCTYPE root SYSTEM "reguli.dtd">

unde root este elementul rdcin al documentului XML, iar reguli.dtd este numele DTD-ului asociat documentului. n cazul n care DTD-ul este intern, declaraia tipului de document va avea urmtoarea form:
<!DOCTYPE element_rdcin [ <!-- Setul de reguli--> ]>

1.20. Regulile sintactice ale documentelor bine alctuite(Well-Formed Documents)


Un document XML este un document bine alctuit dac satisface urmtoarele condiii sintactice: Documentul are exact un singur element rdcin (root element) Fiecare element are un marcaj de nceput i unul de sfrit Marcajele sunt nchise corect, adic nu sunt de forma:
<autor><nume>Elliotte Rusty Harold</autor></nume>

Primul marcaj deschis trebuie sa fie ultimul care este nchis. Marcajele trebuie nchise exact n ordinea invers a deschiderii lor, altfel va fi semnalat eroare. Numele atributelor sunt unice n cadrul unui element Cu alte cuvinte un document XML este bine alctuit dac respect regulile sintactice descrise de standardul XML.

- 89 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

ANEXA A Instalarea serverelor Apache, MySQL i PHP


A.1. Instalarea pachetului EasyPHP pe o platform Windows XP
Pachetul EasyPHP, distribuit n regim open source, cuprinde urmtoarele produse program : Server Apache Server de aplicaii PHP Server de baze de date MySQL Instrumente de administrare phpMyAdmin Pachetul EasyPHP necesit doar o instalare simpl (ca a oricrui program open source) i se poate descrca de la adresa: Versiunea 2.0 beta1: http://www.easyphp.org/telechargements/dn.php?F=easyphp2-0b1 Versiunea final 1.8: http://www.easyphp.org/telechargements/dn.php?F=easyphp1-8 Pachetul se va instala n C:\Program Files\EasyPHP-1.8\ iar directorul unde trebuie inute i de unde se vor accesa paginile i scripturile PHP va fi www.

A.2. Instalarea manual a serverului Apache


1. Dup ce se descarc serverul Apache de la adresa: http://apache.idilis.ro/httpd/binaries/win32/apache 2.0.54-win32-x86-no ssl.msi, se lanseaz n execuie asistentul pentru instalare:

- 90 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 2. Se apas Next, apoi (dup ce se citete textul) se selecteaz opiunea "I accept the terms in the license agreement" -aceasta opiune nseamn c s-au citit i s-au citit acceptat termenii din licen i c se poate trece mai departe la instalare (se apas Next). Va apare o fereastr n care se completeaz cmpurile, exemplu:

3.

Se apas Next > Next > Next > Install i se ateapt s se efectueze instalarea. n final se apas Finish pentru a termina. Daca serverul s-a instalat cu succes se analizeaz zona trailer a sistemului de operare (Taskbar). Se poate observa dac serverul ruleaz

sau nu a putut s porneasc..

4.

Se acceseaz http://localhost/ . Daca pagina arat ca cea de mai jos, nseamn c serverul Apache a pornit i funcioneaz.

- 91 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 5. Fiecare server/pachet instalat are cte un fiier de configurare. Fiierul de configurare al serverului Apache este httpd.conf care se poate gsi n folderul din C:\Program Files\Apache Group\Apache2\conf\. Se intr n C:\Program Files\Apache Group\Apache2\htdocs\, se terge tot de acolo i se creeaz un fiier test.html n care se introduce codul: <html> <head> <title>Primul HTML</title> </head> <body> Acesta este un test HTML </body> </html> Se salveaz i se acceseaz n browser URL-ul: http://localhost/test.html Se observ dac serverul Apache ruleaz HTML-ul.

6.

A.3. Instalarea manual a serverului de aplicaii PHP


Modificrile necesare n fiierul php.ini 1. Se intr n C:\Program Files\Apache Group\ i se creeaz un folder cu numele php apoi se dezarhiveaz i se copiaz coninutul directorului php-5.2.0-Win32. 2. n continuare, trebuie editat fiierul de configurare al PHP-ului, i anume php.ini. Pentru aceasta se intr n C:\Program Files\Apache Group\php, se copiaz fiierul php.inirecommended i se redenumete n php.ini. 3. Apoi se deschide ntr-un editor i se efectueaz modificrile: 3.1. Se caut: doc_root = i se schimb cu: doc_root = C:\Program Files\Apache Group\Apache2\htdocs (Aceast operaiune se face pentru a seta calea ctre folderul unde sunt inute scripturile, documentele i paginile de Web). 3.2. Se caut: extension_dir = i se schimb cu: extension_dir = C:\Program Files\Apache Group\php\extensions (Aceast operaiune se face pentru a seta calea ctre folderul unde sunt inute extensiile/bibliotecile dinamice ale limbajului PHP)

- 92 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 3.3. Se caut: display_errors = Off i se schimb cu: display_errors = On (Aceast operaiune se face pentru a seta ON afiarea erorilor) 3.4. Se caut : session.save_path = /tmp i se schimb cu: session.save_path = C:\Program Files\Apache Group\php\sesiuni. Se intr apoi n folderul cu php (C:\Program Files\Apache Group\php) i se creeaz un folder cu numele sesiuni. (Aceast operaiune se face pentru a seta calea ctre sesiunile temporare de pe server)

Modificrile necesare n fiierul httpd.conf Se deschide fiierul de configurare al serverului Apache, aflat n C:\Program Files\Apache Group\Apache2\conf sub numele de httpd.conf i se efectueaz urmtoarele modificri: 1. Se adaug la sfritul fiierului, urmtoarele 3 linii : ScriptAlias /php/ "C:/Program Files/Apache Group/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe" 2. Se caut linia: DirectoryIndex index.html i se schimb cu: DirectoryIndex index.html index.php. n final se salveaz i se repornete serverul Apache. Se intr n C:\Program Files\Apache Group\Apache2\htdocs i se creeaz un fiier cu numele test.php n care se introduce codul de mai jos : <?php echo 'Primul script PHP'; ?> 4. Se salveaz i se acceseaz n browser: http://localhost/test.php. Internet browser-ul ar trebui s afieze urmtoarea imagine/text:

3.

- 93 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 5. Pentru a putea vedea configuraia PHP, se realizeaz un fiier cu numele phpinfo.php, n care se pune codul: <?php phpinfo(); ?> Se salveaz i se acceseaz n browser: http://localhost/phpinfo.php. Internet browser-ul ar trebui s afieze urmtoarea imagine/text:

Modificrile n fiierul php.ini necesare activrii extensiilor/bibliotecilor dinamice PHP n continuare, se activeaz extensiile necesare tergnd ; din faa extensiei i verificnd dac extensia activat se afl n directorul C:\Program Files\Apache Group\php\extensions. De exemplu pentru activarea bibliotecii dinamice grafice ar trebui fcut urmtoarea modificare: ;extension=php_gd2.dll .. Se terge ; i va apare: extension=php_gd2.dll Pentru activarea extensiei/bibliotecii dinamice MySQL linia corespunztoare este: extension=.\EXT\php_mysql.dll Instalarea unui mediu integrat de dezvoltare a aplicaiilor PHP (e.g. DzSoft PHP Editor) 1. Pentru editarea i testarea scripturilor php i a paginilor HTML este recomandabil utilizarea unui mediu integrat de dezvoltare cum ar fi DzSoft PHP Editor al crui kit este accesibil la adresa http://www.dzsoft.com/dzphp.htm:

- 94 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

2.

Dac dup instalare se recepioneaz o astfel de eroare referitoare la imposibilitatea pornirii serverului HTTP deoarece portul TCP 80 (declarat implicit de DzSoft PHP Editor) este blocat de o alt aplicaie:

Atunci se va efectua urmtoarea reconfigurare a portului TCP pentru serverului HTTP al lui DzSoft PHP Editor (valoarea propus 8080 este, de cele mai multe ori, valabil):

- 95 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 3. Reconfigurarea portului TCP pentru serverului HTTP al lui DzSoft PHP Editor (cu valoarea propus 8080) n fereastra de configurare (Run Options | HTTP Server Options) :

4.

Ceilali parametri de configurare sunt setai la valori implicite corecte, care nu creaz probleme de la prima rulare. Totui ei sunt disponibili spre a fi, eventual, modificai n a doua fi a ferestrei de configurare (Run Options | Parameters) :

A.4. Instalarea manual a serverului de baze de date MySQL


1. Se descarc mysql-essential-4.1.13a-win32.msi, i se ruleaz. Se apas Next i se selecteaz opiunea Custom, apoi se apas Next i Change pentru selectarea cii de acces ctre C:\Program Files\Apache Group\ unde se creeaz un folder cu numele MySQL. Apoi se apas Next i Install pentru a porni instalarea.

- 96 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 2.

3.

4.

n timpul instalrii va apare o fereastr unde se va cere s se creeze un cont sau sa v autentificai la www.MySQL.com . Se selecteaz Skip Sing-Up i apoi se finalizeaz prin apsarea butonului Next apoi Finish. Dup instalare, se va deschide o fereastr pentru configurarea serverului mysql. Se apas Next, apoi se selecteaz opiunea Standard Configuration. Se continu cu Next > Next i setarea parolei, cu care se va face autentificarea la serverul mysql. Se apas Next > Execute > Finish pentru a ncheia procedura de configurare.

5. 6.

- 97 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

A.5. Instalarea manual a instrumentului administrator phpMyAdmin


1. Se descarc scriptul phpMyAdmin, se dezarhiveaz i se copiaz folderul n directorul de unde vor rula scripturile i anume: htdocs din C:\Program Files\Apache Group\Apache2 . Se redenumete folderul n phpmyadmin i se acceseaz apoi http://localhost/phpmyadmin . Dac se observ o eroare aceasta nseamn c trebuie editat fiierul de configurare al scriptului phpMyAdmin pentru setarea parolei (pe care ai ales-o la nregistrarea MySQLului).

2.

Atunci, se intr n C:\Program Files\Apache Group\Apache2\htdocs\phpmyadmin i se deschide fiierul config.inc.php. Apoi se caut linia: ($cfg['Servers'][$i]['password'] = '';) i se scrie parola aleas: (de exemplu: $cfg['Servers'][$i]['password'] = 'parolamysql';) Se salveaz i apoi se efectueaz un refresh la pagina http://localhost/phpmyadmin Dac rezultatul va fi ca cel prezentat mai jos nseamn c trebuie s actualizm parola mysql:

3.

4.

Se apas pe butonul Start de la Windows (jos, stnga) apoi n caseta run se scrie cmd, i se apas butonul OK. Se tasteaz comanda cd ../../Program Files/Apache Group/MySQL/bin apoi mysql -u root p. Se observ c se cere parola de mysql. Introducei parola pe care ai setat-o n momentul instalrii serverului MySQL apoi apsai Enter. 5. Dup ce v autentificai, se observ intrarea n consola MySQL: C:\Program Files\Apache Group\MySQL\bin>mysql -u root -p Enter password: ********* Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 4.1.13a-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Se tasteaz comanda: SET PASSWORD FOR root@localhost=OLD_PASSWORD('parolaDvs'); apoi apsai Enter Se tasteaz comanda FLUSH PRIVILEGES; i se apas din nou Enter. - 98 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1 6. Se nchide fereastra apoi se efectueaz refresh la pagina http://localhost/phpmyadmin/ i scriptul se va ncrca. Dac nc se vor observa nite erori: The $cfg['PmaAbsoluteUri'] directive MUST be set in your configuration file! The mbstring PHP extension was not found and you seem to be using a multibyte charset. Without the mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results. Atunci se caut linia $cfg['PmaAbsoluteUri'] n config.inc.php i se modific din : $cfg['PmaAbsoluteUri'] = ''; n $cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin'; Se efectueaz Refresh la pagin i se observ c a rmas doar eroarea legat de extensia mbstring deoarece acea extensie nu a fost activat din php.ini: Se intr n C:\Program Files\Apache Group\php i se deschide fiierul php.ini. Se caut linia ;extension=php_mbstring.dll i se activeaz eliminnd ; din faa ei astfel nct rezultatul s fie extension=php_mbstring.dll Se salveaz i apoi se efectueaz Refresh din nou la pagin. Se va observa c erorile au disprut, iar scriptul phpMyAdmin ruleaz fr probleme.

7.

Observaie: Pentru a da posibilitatea i altor persoane s acceseze scripturile PHP, ele trebuie incluse ntr-un domeniu gzduit pe un server ce s suporte PHP i MySQL. n reeaua Internet sunt foarte multe site-uri ce ofer n mod gratuit aceste servicii cu unele incoveniene (limitarea accesului la funciile PHP, introducerea reclamelor n pagin, etc.) http://www.3x.ro; http://www.as.ro/, http://site.ro/nume_user. Exist ns i alte site-uri (de exemplu: http://www.mxhost.ro/ ) care permit cumprarea unui domeniu .com, .org sau .net, cu posibilitatea crerii a 100 adrese de email @domeniul_dumneavoastra.com, 3 baze de date MySQL, scripturi deja realizate i o gzduire bun la un pre foarte accesibil.

- 99 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

ANEXA B Instalarea serverelor IIS, MySQL i PHP pe o platform Windows XP


n aceast seciune se prezint operaiile necesare pentru instalarea serverului de Web Microsoft IIS (Internet Information Services), a serverului de baze de date MySQL i a serverului de aplicaii PHP pe o platform Windows XP. Avantajul acestei soluii fa de alternativa Apache, const n faptul c IIS este inclus n kit-ul sistemului de operare Windows XP Professional, trebuind doar s fie pornit ca serviciu de sistem. Pentru instalare vor trebui urmai paii de mai jos:

B.1. Instalarea serverului IIS i a extensiilor FrontPage


1.1. 1.2. 1.3. 1.4.

Se deschide Control Panel (Start> Control Panel); Se deschide Add or Remove Programs; Se selectez Add/Remove Windows Components din partea stng a ferestrei; Se selectez apoi Internet Information Services (IIS);

- 100 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


1.5. 1.6. 1.7. 1.8.

Se apas pe Details i se verific selecia opiunii FrontPage < version > Server Extension Avnd kit-ul sistemului de operare Windows XP la ndemn se apas OK, apoi Next; Se indic locaia exact a kit-ului de Windows XP n fereastr (implicit unitatea de CD) Se apas butonul Finish.

O alt variant de instalare este utilizarea opiunii Install optional Windows components din meniul CD-ului de instalare a sistemului de operare Windows XP

- 101 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

B.2. Configurarea extensiilor FrontPage (FrontPage Server Extensions)


Se deschide Control Panel (Start> Control Panel); Se deschide Administrative Tools; Se selectez Computer Management; Se extinde ramura Services and Applications n fereastra care se va deschide; Se extinde ramura Internet Information Services; Se extinde ramura Web Sites; Se apas click dreapta pe Default Web Site, iar din meniul care se deschide se selectez apoi All Tasks > Configure Server Extensions; 2.8. Se apas butonul Next, apoi YES, Next i Finish n fereastra care se deschide. Instalarea serverului Web s-a terminat
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.

Pentru a testa dac tot ce am fcut pn acum funcioneaz, vom deschide navigatorul Web preferat i vom introduce ca adres localhost. Dac totul funcioneaz, se vor deschide dou ferestre una dintre ele avnd ca titlu Welcome to Windows XP Server Internet Services, iar cealalt coninnd un manual pentru el. Dac nu se deschide nici o fereastr i apare mesajul The page cannot be displayed atuncii repetai paii descrii mai sus, ncepnd de la punctul 1.

B.3. Instalarea serverului de baze de date MySQL


Dac pn acum nu am avut nevoie de nici o resurs suplimentar (exceptnd kit-ul Windows XP), pentru instalarea MySQL trebuie procurat kit-ul de instalare. Fiind disponibil gratuit, se poate gsi la adresa www.mysql.com, seciunea Download. Varianta curent are aproximativ 45Mb. Dup ce se dezarhiveaz programul de instalare de la MySQL se ruleaz Setup.exe i se instaleaz serverul. n mod uzual, MySQL se va instala n directorul c:\mysql dar aceast cale nu este obligatorie.
3.1. Se descarc kit-ul de instalare MySQL de la adresa http://dev.mysql.com/downloads/ :

- 102 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


3.2. Pentru toate sistemele de operare este aceeai pagin de start accesibil de la adresa:

http://dev.mysql.com/downloads/mysql/5.1.html#win32
3.3. Pentru toate versiunile sistemului de operare WINDOWS sunt disponibile urmtoarele

variante desccare:

1. Arhiva de tip msi Essentials (mysql-essential-5.1.17-beta-win32.msi): http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-essential-5.1.17-betawin32.msi/from/pick 2. 3.


Arhiv zip cu program i procedur de instalare(mysql-5.1.17-beta-win32.zip): http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.17-beta-win32.zip/from/pick

Arhiv zip fr procedur de instalare doar prin dezarhivare n calea de accessrdcina discului C:\ (mysql-noinstall-5.1.17-beta-win32.zip): http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-noinstall-5.1.17-betawin32.zip/from/pick

3.4. Pentru o administrare elegant a serverului MySQL i o gestionare facil a bazelor de date

este recomandabil folosirea utilitarelor MySQL Administrator i MySQL Query Browser disponibile pentru descrcat n dou versiuni de la adresele:

1.

Cu program i procedur de instalare(mysql-gui-tools-5.0-r11a-win32.msi): http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r11awin32.msi/from/pick Fr procedur de instalare doar prin dezarhivare n calea de access-rdcina discului C:\ (mysql-gui-tools-noinstall-5.0-r11a-win32.zip): http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-noinstall-5.0-r11awin32.zip/from/pick

2.

- 103 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

3.5. Se descarc i se instaleaz driverele MySQL Connector/ODBC (Open Data Base

Connectivity) http://dev.mysql.com/downloads/connector/odbc/5.0.html. Pentru toate versiunile sistemului de operare WINDOWS sunt disponibile urmtoarele variante desccare 1. Arhiva de tip msi Installer (mysql-connector-odbc-5.00.11-beta-gplwin32.msi) sau http://dev.mysql.com/downloads/connector/odbc/5.1.html#win32

http://dev.mysql.com/get/Downloads/Connector-ODBC/mysql-connector-odbc-5.00.11beta-gpl-win32.msi/from/pick

2.

Arhiv zip cu program i procedur de instalare (mysql-connector-odbc-5.00.11-

beta-gpl-win32.msi.zip):

http://dev.mysql.com/get/Downloads/Connector-ODBC/mysql-connector-odbc-5.00.11beta-gpl-win32.zip/from/pick

3.

Arhiv zip fr procedur de instalare doar prin dezarhivare n calea de accessrdcina discului C:\ (mysql-connector-odbc-noinstall-5.00.11-beta-win32.zip): http://dev.mysql.com/get/Downloads/Connector-ODBC/mysql-connector-odbc-noinstall5.00.11-beta-win32.zip/from/pick

- 104 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


3.6.

3.7. Se verfic instalarea corect n sistemul de operare a driverelor MySQL Connector/ODBC

(Open Data Base Connectivity) printr-o operaie de definire a unui descriptor de surs de date ODBC (Data Source Name):

- 105 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1

B.4. Instalarea serverului de aplicaii PHP


Este necesar kit-ul de instalare care se poate descrca de la adresa www.php.net, seciunea Downloads. Dup ce programul de instalare s-a transferat pe calculatorul gazd, se lanseaz n execuie. Se alege ntre instalarea Standard i instalarea Advanced. Se selecteaz a doua opiune, Advanced. Civa pai mai ncolo se alege tipul serverului Web (n cazul de fa Microsoft IIS 4 or higher). Va aprea o fereastr Scriptmap Node Selection n care se bifeaz toate csuele apsnd pe Select All. Astfel se termin i instalarea serverului PHP. Pentru a verifica dac instalarea s-a efectuat corect, se editeaz un fiier text cu ajutorul oricrui editor de texte (Notepad, de exemplu). n acest fiier se scrie urmtorul script minimal: <?php ?> phpinfo(); // afieaz informaii despre PHP

Se salvez fiierul cu numele test.php i se copiaz n directorul c:\Inetpub\wwwroot. Se deschide un navigator i se introduce adresa http://localhost/test.php. Dac totul a fost instalat n bune condiii, atunci ar trebui s apar o pagin de Web cu informaii referitoare la PHP, generat de funcia predefmit phpinfo(). Printre informaiile afiate se numr versiunea curent a serverului PHP, extensiile disponibile, suportul pentru procesarea diverselor tipuri de documente etc. Alt alternativ de instalare o constituie aplicaia PHPTriad de la adresa urmtoare: http://sourceforge.net/projects/phptriad
4.1.

- 106 -

Eugen ZAHARESCU Programare Web - CURS InfoDida-1


4.2.

4.3.

- 107 -