Você está na página 1de 95

PROGRAMUL DE FORMARE PROFESIONALA- CALIFICARE - PENTRU OCUPATIA -

WEB DESIGNER

SUPORT DE CURS

BUCURETI 2010

CUPRINS

1. Analiza si proiectarea structurii site-ului 2. Limbajul HTML 3. Limbajul PHP

I ANALIZA SI PROIECTAREA STRUCTURII SITE-ULUI 1. Noiuni introductive

Pentru a lucra pe internet este necesar s nelegei notiunile de client i server. Majoritatea informaiilor pe care le vei accesa pe Internet sunt stocate n calculatoare numite servere. Orice tip de calculator poate fi server, ce l face server este rolul pe care l joac: depoziteaz informaii pentru a fi folosite de ctre clieni. Un client este un computer sau un program specific de computer care tie s comunice cu un anumit server pentru a folosi informaiile existente pe server sau pentru a stoca informaii pe acesta. Un exemplu de client este browserul Web pe care l folosii cnd comunicai cu un computer pe care sunt stocate paginile Web - serverul Web. Internetul nu inseamn doar pagini Web. Pentru a folosi pota electronic este necesar un client de mail pentru a comunica cu un server de mail. Aceast tehnologie arat ce este de fapt Internetul - un mediu de comunicare. Diferitele tipuri de clienti i servere i nu Netul n sine sunt cele care permit executarea unor activiti variate Termenul Web este folosit att de des de media pentru a descrie i ilustra Internetul, nct multe persoane cred c Web-ul i Internetul sunt identice. Dar nu sunt. Web-ul este doar o parte a Internetului i este cel mai captivant deoarece are evoluia cea mai rapid i este partea cea mai uor de folosit a Internetului. World Wide Web este alctuit din site-uri web. Acestea sunt locaii care grupeaz pagini web (fiier HTML) la care se adaug sau nu fiiere de alt tip. Un site web se compune dintr-o pagin principal ("home page") la care se adaug un numr variabil de pagini i eventual de fiiere (multimedia, executabile, etc.), toate fiind interconectate prin hiperlegturi (hiperlink). Fiecare site are o adres precis care este n general adresa paginii principale. Fiecare pagin i fiecare fiier prezente pe site au de asemenea cte o adres care este format pornind de la adresa site-ului. Adresa unui fiier (pagina web sau alt fel de fiier) prezent pe internet este numit URL (Uniform Resource Locator) i este unic pentru fiierul respectiv n aa fel nct acesta s poat fi gsit cu uurina i s nu fie confundat cu un alt fiier. Site Web i pagin Web sunt termeni folosii flexibil, dar un site Web este n general un server Web sau o parte dintr-un server Web unde este stocat o colecie de pagini Web despre un anumit subiect. 2. Glossar de termeni i acronime Browser

CGI

CSS

Flash FTP GET

hiperlink

HTML HTTP JavaSript MySQL PHP

Este un program care ofer o interfa ntre utilizator i serverul de web de pe Internet. Browserul contacteaz serverul i transmite cererea de informaie apoi primete informaia i o afieaz pe calculatotul clientului Common Gateway Interface - standard care definete o modalitate prin care serverele Web comunic cu programe externe i vice-versa, astfel nct programele externe pot produce cod HTML sau imagini, iar serverul le trateaz la fel ca orice cod HTML sau imagini care nu sunt generate de programe externe. Cascading Style Sheet Stilurile pun la dispoziia creatorilor de site-uri web noi posibiliti de personalizare a paginilor HTML. Un stil reprezint un mod de formatare exact a unui bloc de text (spre exemplu anumite caracteristici pentru font, mrime, culoare, aranjare n pagin, distanare fa de margini etc). Flash este un instrument cu ajutorul cruia se pot construi pagini web animate sau interactive File Transfer Protocol, cel mai simplu mod de a transmite fiiere ntre calculatoare pe Internet Metod n protocolul HTTP, prin care datele dintr-un formular sunt trimise adugnd la sfrsitul URL-ului un semn de ntrebare i coninutul formularului. Se creeaz un URL extins coninnd adresa paginii i parametrii care trebuie trimii scriptului (de exemplu http://www.domeniu.dom/cgi-bin/script.pl?name=John& tel=1274). Legturile (link-urile) reprezint partea cea mai important a unei pagini Web. Ele transform un text obinuit n hipertext s au hiperlegtur, care permite trecerea rapid de la o informaie aflat pe un anumit server la alt informaie memorat pe un alt server aflat oriunde n lume. (HyperText Markup Language) Limbaj folosit pentru crearea paginilor Web Hypertext Transfer Protocol, protocol folosit de browserele de web pentru a transmite text, sunete, imagini video pe Internet JavaScript este un limbaj de scripting pentru client dezvoltat la origine de Netscape, permind scrierea de secvene de program care se execut la apariia unui eveniment utilizator. Cel mai cunoscut i folosit limbaj pentru bazele de date Hypertext Preprocessor - PHP este un limbaj de scripting pentru

Plug-in

POST URL www XML

server, asemntor javascript, n sensul c amndou permit introducerea unor programe (scripturi) n paginile web Aplicaiile de tip plug-in sunt similare celor de tip helper (Se folosesc pentru executarea fiierelor audio sau video sau pentru a afia diverse formate grafice necunoscute de browser.), dar, spre deosebire de acestea, ele lucreaz direct n interiorul browserelor Metod din protocolul HTTP prin care datele din formular nu sunt trimise ca parte a URL-ului, ci sub forma unui fiier codat cu standardul MIME nglobat n corpul mesajului trimis ctre server. Uniform Resouce Locator - reprezint unui site World Wide Web este un univers de informaie disponibil prin protocol HTTP eXtensible Markup Language - Xml este un limbaj creat pentru a structura, stoca i transmite informaiile. Spre deosebire de HTML, care a fost creat pentru a afia datele, XML a fost proiectat pentru a descrie datele

3.Tipuri de site-uri n funcie de rolul pe care si+l propun siteurile web, acestea sunt de mai multe tipuri.

Site-uri de prezentare de companie Site-uri care ofer informaii despre o companie, incluznd profilul, istoricul, portofoliul, produsele i serviciile, locaia i alte informaii. Site-uri de prezentare de produs / eveniment Site-uri care ofer informaii despre un produs, o gam unitar de produse sau un eveniment. Portaluri generaliste Acestea sunt site-uri care intesc publicul larg. Este vorba despre portaluri "orizontale" care ofer linkuri sau directoare c tre alte site-uri, reunesc coninut intern i extern i ofer servicii diverse pentru utilizatori, de tipul conturilor de e-mail. Magazine online Site-uri care vnd online produse sau servicii i faciliteaz tranzaciile. Comuniti virtuale Site-uri care faciliteaz interaciunea i comunicarea. Accentul este pus pe instrumente i elemente care ntresc sentimentul de apartenen precum tirile comunitii, chat-uri, forumuri. Servicii i tranzacii online Site-uri care ofer servicii de recrutare, de vnzare a spaiilor publicitare, servicii matrimoniale, servicii de trimitere a felicitrilor, albume foto online, agende, servicii de e-mail, calendare online, arhivarea fiierelor, download-uri, nregistrarea domeniului, etc. Mass-media Versiuni online ale publicaiilor, televiziunilor sau radio-urilor care ofer tiri, inclusiv site-uri de tiri care au doar versiune online. Divertisment Site-uri dedicate jocurilor, hobby-urilor, sportului, muzicii sau umorului. Activism social Site-uri care promoveaz o cauz social i au ca obiectiv mobilizarea sau obinerea sprijinului unor categorii de public. Celebriti i personaliti Site-uri care prezint personaliti publice, punnd accentul pe rezultate deosebite, pe interese sau pe biografia complet etc. Site-uri dedicate unor muzicieni, actori sau actrie, simboluri ale culturii, echipe de sport, personaliti de televiziune, politicieni. E-guvernare Site-uri care au legtur cu serviciile guvernamentale, incluznd siteurile care ofer acces la serviciile online ale instituiilor guvernamentale i site-uri care disemineaz informaii

despre decizii guvernamentale. Art i cultur Site-uri de arte vizuale i expresie artistic, teatru, literatur, muzic clasic, arhitectur. Siteurile includ elemente de coninut precum cronici, recenzii, expoziii, galerii, portofolii, etc. Pentru site-uri al cror obiectiv principal este vnzarea online a unor produse, inclusiv artistice, este recomandat seciunea "Magazine online". Portaluri tematice Site-uri care acoper ct mai mult un domeniu anume al cunoaterii. Ofer referine i informaii pe o tem bine conturat. Site-uri ale instituiilor Site-uri de prezentare a unor instituii, primrii, coli, licee, universiti, care cuprind informaii, istoric etc. Site-uri personale Site de prezentare; conine CV, fotografii, date de contact, etc. 4.Structura unei pagini Web n afar de unele pri opionale, majoritatea paginilor Web conin urmtoarele elemente. Aceste elemente trebuie cunoscute deoarece diversele browsere interpreteaz n mod diferit aceste pri. Elementele prezentate sunt de obicei vizibile prin intermediul browserului: 1. Titlu - este afiat pe bara de titlu a ferestrei n care apare pagina. 2. Text - trasmite scopul i coninutul paginii 3. Semntura - este afiat n partea de jos a paginii, identific autorul paginii i adesea include i o adres de e-mail a autorului (webmaster). 4. Linii orizontale - decoreaz pagina i o mpart n seciuni logice. 5. Imagini - ofer mai multe informaii n pagin. 6. Culoare sau model de fundal - reprezint o culoare solid sau o imagine integrat care este afiat n spatele textului. 7. Animaii - text sau imagini care se mic ntr-un anumit fel. 8. Legturi - conduc vizitatorul ctre alte locaii (alte pagini Web, adrese de e-mail, fiiere tip document, videoclipuri, etc) 9. Hri de imagini - imagini 10. Formulare - locaii unde vizitatorii pot rspunde la un chestionar online. Exist i alte elemente care aparin paginii Web, dar care nu sunt vizibile: 1. Elementele de identificare - numele sau adresa de e-mail a autorului, un sistem special de codare, care ajut motoarele de cutare s descopere subiectul i coninutul paginii. 2. Comentarii - textul pe care autorul dorete s l fac vizibil doar atunci cnd este citit direct codul HTML, nu atunci cnd pagina este vizualizat cu un browser. 3. HTML - formatul de fiier n care paginile Web sunt stocate pe un computer. 4. Codul JavaScript - adaug elemente dinamice paginii Web 5. Applet-uri Java - mbuntesc interaciunea dintre browser i server. 5. Structura unui site Modul de structurare a site-ului se refer la navigarea n cadrul acestuia. O navigare uoar ntre pagini presupune prezena unei bare de navigare n care s fie prezente alturi de pagina gazd i paginile cele mai importante. Toate seciunile unui site trebuie s se mbine armonios n structura acestuia perminduse astfel trecerea uoar de la o seciune la alta. O structur bun se aseamn cu structura unui arbore care ar avea i nite conexiuni ntre ramurile sale cele mai mari. Pe Web se ntlnesc mai multe moduri de organizare logic a informiei ntr-un site: 1. Structura de tip panou de prezentare - o singur pagin simpl care descrie o person, o afacere sau un produs. Multe pagini personale sunt realizate n acest mod: conin legturi ctre resurse

preferate pe Internet, dar nu i ctre pagini din cadrul aceluiai document. 2. Structura liniar de o pagin - o pagin Web creat pentru a fi citit de sus pn jos. Poate fi utilizat un cuprins pentru a-i ajuta pe vizitatori s fac salturi rapide ctre orice seciune. 3. Structura liniar pe mai multe pagini - aceeai structur ca mai sus, numai c paginile curg una dup alta. Vizitatorii sunt ghidai prin plasarea n josul fiecarei pagini a unei legturi care conduce ctre pagina precedent i cea urmtoare. 4. Structura ierarhic - structura clasic ntlnit pe Web. Pagina gazd (sau o pagina special) trebuie sa conin un fel de "cuprins" al site-ului, cu legturi ctre paginile cele mai importante. Acestea din urm sunt practic nite pori de intrare ctre seciuni specializate ale site-ului, coninnd i ele table de materii cu adresele paginilor web subordonate. 5. . Structura de tip reea - este o structur ierarhic fr ierarhie. Orice pagin poate conine o legtur ctre alt pagin. Exist o pagin principal, dar apoi vizitatorii se pot plimba prin acea reea fr o cale anume. Se pot realiza site-uri web, pornind de la cel de prezentare i pn la dezvoltarea de module dinamice i soluii pentru comerul electronic i vnzarea online. Tehnicile folosite sunt: HTML, Javascript, CSS, PHP, MySQL, Flash, XML, WML, WAP etc. Dac dorim s crem singuri site-ul va trebui s nvm limbajul HTML i s nvm s folosim un program de editare HTML. Exist i opiunea (recomandat pentru nceptori) s folosim un program de editare HTML de tipul VIZINT (vizual-intuitiv) care ne permite s crem pagini web i s adugam elemente HTML la ele fr sa cunoatem limbajul HTML. Programele de tip vizit sunt numite n limba engleza WYSIWYG ("what you see is what you get" - ceea ce vezi este ceea ce vei obine) i ele necesit din partea utilizatorului doar pricepere n aranjarea n pagina a coninutului acesteia. Exist foarte multe programe de editare HTML, dintre care o parte sunt gratuite. Un program de tipul VIZINT este "FrontPage" produs de compania Microsoft. Alte programe de editare HTML de tipul VIZINT sunt "OpenOffice.org HTML Editor" care este disponibil n suita gratuit OpenOffice.org (prezenta n mod periodic pe CD-urile unor reviste cu specific IT) i "Trellian WebPage" (necesit nregistrare gratuit pe site-ul productorului). 6. Criterii In realizarea proiectelor, un webdesigner se poate baza pe urmtoarele criterii: 6.1. Coninut - obiectul declarat este uor de recunoscut; - coninutul este relevant, folositor i captivant pentru vizitatori; - informaia este clar i concis. - evitai folosirea unui limbaj strict tehnic, care nu poate fi ineres pe deplin de toat audiena Un site trebuie s aib un coninut original, bogat, interesant i actualizat periodic pentru a deveni popular n rndul utilizatorilor. Un astfel de site va fi vizitat frecvent chiar dac aspectul su grafic nu este la cel mai nalt nivel. Un rol important l are alturi de coninutul n informaie i modul de scriere al materialelor. Acestea trebuie s fie redactate ntr-un stil uor de citit, fr fraze excesiv de lungi i complicate. Toate materialele trebuie s fie verificate pentru a nu conine greeli de ortografie. 6.2. Uurin n folosire - textul este lizibil, iar imaginile i celelalte elemente multimedia sunt optimizate pentru specificul publicului int;

- organizarea informaiilor este intuitiv; - folosii CSS (Cascading Style Sheets). Folosii fiiere css pentru formatarea textului. Putei schimba astfel foarte uor formatarea ntregului site iar dimensiunea paginilor se micoreaz. - informaiile importante sunt uor de gsit. - adugai o nota la paginile web prin care s reamintii vizitatorilor s fac un bookmark (semn de carte). Acest lucru va duce la creterea anselor ca vizitatorii s se ntoarc. 6.3. Design - designul este potrivit obiectului site-ului i este adecvat utilizatorilor; - conceptul creativ este uor de identificat i coerent; - designul nu atrage atenia de la coninut; - folosii aceleai fonturi, dimensiune a textului i culoare a fundalului pentru tot site-ul - folosii acelai aliniament (stnga, dreapta sau centru) pentru machetarea paginilor - designul este suficient de diversificat pentru a pstra atenia utilizatorilor. Aspectul grafic al unui site se refer la aezarea n pagin a materialelor i la gama de culori folosite. Materialele de pe site trebuie s fie uor de citit, adic trebuie s aib un corp de liter adecvat, s fie scrise pe un fundal plcut i odihnitor pentru ochi i s fie formatate (mprite n paragrafe, etc.) special pentru o citire uoar. De asemenea trebuie luat n calcul adugarea de imagini i tabele dac este necesar acest lucru. Trebuie evitat cu orice pre suprancrcarea cu elemente grafice inutile a site-ului pentru c n caz contrar afiarea paginilor devine greoaie. Utilizatorii din toata lumea au drept caracteristic lipsa de rbdare i ca urmare este foarte probabil s nu atepte pn la capt descrcarea paginii i s prefere mai degrab vizitarea unui alt site. Elementele grafice cu dimensiuni n KB importante (de tipul animaiilor Flash sau a imaginilor mari) trebuie folosite cu moderaie i doar dac este necesar. Pe web mrimea conteaz. Pe de alt parte autorul unui site specializat n grafic web poate s pun pe site-ul su oricte animaii Flash i imagini dorete pentru c site-ul este cartea sa de vizit i i pune n eviden talentul. 6.4. Funcionaliti - site-ul este compatibil cu mai multe platforme; - timpul de ncrcare al paginii este sczut; - toate link-urile i formularele funcioneaz corect; Accesibilitatea reprezint una dintre cerinele de baz atunci cnd se proiecteaz o pagina web. Aceasta nseamn c orice netsurfer poate s aib acces la site-ul pe care l-ai realizat, indiferent de browserul pe care-l folosete (inclusiv browsere text ca Lynx), rezoluia sau dimensiunile ecranului, setrile calculatorului sau eventualele disfuncii ale vederii. Din aceste motive, nu trebuie s proiectai un sit web pentru un browser specific sau pentru o anumit rezoluie a monitorului. Cutai s evitai inserarea n pagina principal a unor anunuri de forma: "Acest site se vede cel mai bine cu Internet Explorer 5.5 " sau "Folosii o rezoluie de 768 x 1024" n acest fel nu facei dect s ndeprtai cititorii care folosesc un alt browser sau o alt rezoluie. Este puin probabil ca acetia s ncarce browserul IE 5.5 sau s schimbe rezoluia monitorului numai pentru a vedea n cele mai bune condiii paginile dvs. Prin accesibilitate se nelege i oferirea unor informaii necesare unui alt tip de vizitatori ai siteurilor web. Acetia sunt roboii motoarelor de cutare. Pentru ei trebuie s completai cu atenie etichetele META corespunztoare (TITLE, DESCRIPTION, KEYWORDS etc). Foile de stiluri (style sheets), scripturile, appleturile Java i tehnologia Flash sunt noi apariii n arsenalul webdesignerilor. Toate acestea trebuiesc ns folosite cu maxim atenie deoarece nu toate browserele le pot suporta, iar unii utilizatori au dezactivate opiunile respective. De asemenea, nu uitai s folosii atributele ALT, WIDTH i HEIGHT asociate etichetei IMG. Realizarea unui site accesibil unor categorii ct mai largi de utilizatori implic imaginaie i mult munc, dar rezultatele vor fi pe msura efortului depus. 6.5. Culori Culoarea, pentru un designer grafic reprezent o simpl noutate, fiind destinat doar pentru proiectele de anvergur i pentru designul ambalajelor. Dei anterior a fost considerat prea scump pentru a fi folosit fr rost, acum ea este ceva obinuit. Alb-negrul a devenit avangardist i artistic. Au trecut de asemenea zilele n care culoarea era folosit doar pentru a ne bucura de ea. Culorile au o semnificaie cultural. Dumneavoastr, ca designer, avei responsabilitatea de a cunoate semnificaia lor dar i de a fi n pas cu tendinele coloristice. Folosii culori pastelate pe fonduri albe. Identitatea voastr, dar nu n mod necesar sigla, poate fi asociat cu orice culoare pe care o dicteaz tendinele actuale. Alte influene asupra preferinelor coloristice le reprezint problemele sociale i stilul de via. Dac cineva este interesat de o problem sau de o cauz, persoanele respective pot s prefere

culorile asociate acelei cauze. De exemplu, un ecologist poate fi subiectiv n faa unor culori cum ar fi brunul sau verdele. Un militant al homosexualilor poate prefera culori mai vii i mai vibrante, deoarece curcubeul este folosit foarte des pentru imaginea cauzei acestora. Un cretin conservator se va nclina spre culori conservatoare cum ar fi bleu-marin i gri. Ar fi indicai s avei n vedere asemenea factori, cnd v adresai unui anumit public-int. Interesul culorilor Culorile au n general anumite implicaii sociale. n timp ce nici o semnificaie preconceput nu poate fi considerat universal, cercettorii consider c urmtoarele nelesuri sunt oarecum precise: Negru: Semnificaie: Autoritate sau putere i, uneori, rutate. Darth Vader era negru din toate aceste motive. Alb: Semnificaie: Puritate, sterilitate sau inocen. Miresele poarta alb pentru a sugera puritatea i inocena. Rou: Semnificaie: Furie, avertizare, conflict i dragoste. Culoarea roie poate chiar s provoace puls ridicat i respiraie accelerat. Folosit n anumite contexte, poate avea un efect negativ, pe cnd n altele poate avea un efect benefic. Albastru: Semnificaie: Calm, pace - dar rece i deprimant -, nobilitate, loialitate. Costumele pentru afaceri sunt de multe ori bleu-marin pentru c aceasta implic loialitate; n acelai timp, slile de clas sunt deseori zugrvite n albastru deschis, datorit efectului calmant al albastrului. n limbaj muzical, se vorbete deseori de blues (n englez, blue = albastru), deoarece att acest stil muzical ct i culoarea pot avea un efect deprimant. Verde: Semnificaie: Naturalee, prospeime i fertilitate. Legtura clar cu verdele este natura, dar folosirea acestei culori n spitale este similar cu efectul albastrului, verdele fiind i el o culoare care calmeaz. Galben: Semnificaie: Fericire, optimism i concentrare. Galbenul mbuntete capacitatea de concentrare i ea poate contrasta cu aproape toate culorile. Violet: Semnificaie: Regalitate, lux i romantism. De-a lungul istoriei, familiile regale au fost asociate cu violetul datorit faptului c se ntlnete rareori n natur i trebuiau cheltuite sume mari pentru a putea crea vopsea de aceast culoare. Maro: Semnificaie: solid, de ncredere i terestru.

7. Publicarea i promovarea unui site Orice webmaster vrea, fie c o recunoate deschis sau nu, ca site-ul su s fie vizitat de ct mai muli utilizatori i dac se poate, ct mai des. Aceast dorin (care ine de considerente financiare sau de ego) nu este ns realizabil dect dac webmasterul i toi ceilali implicai n administrarea siteului depun un efort constant pentru a menine coninutul i aspectul site-ului ct mai aproape de cerinele utilizatorilor. Succesul unui site, ca de altfel al oricrui produs, se datoreaz n mare msur i modului n care este promovat, cu alte cuvinte marketingul este aproape la fel de important ca i calitatea unui produs. n aceast lume a internetului nc foarte tnr, experii n crearea de site-uri Web sau redactorii de articole interesante nu sunt de obicei i experi n marketing. Tocmai din aceast cauz promovarea eficient a unui site web este fcut de cele mai multe ori de ctre profesioniti. Acetia i ofer serviciile contra cost i la ei apeleaz companiile care vor s-i construiasc o prezen important pe Web. Sumele investite n marketingul profesional sunt impresionante i n permanent cretere. O caracteristic a Internetului este ca acesta, n calitatea sa de spaiu virtual permite oricrui utilizator s-i construiasc un site Web, existnd, spre deosebire de spaiul real, destul loc pentru toat lumea. Mai mult, utilizatorul respectiv nu trebuie s aib cunotine avansate de limbaj HTML sau s plteasc vreun ban pentru locul de pe Internet unde vrea s-i construiasc site-ul (se exclud bineneles cheltuielile legate de conectare). Exist n momentul de fa poate zeci de milioane de site-uri Web n toat lumea, cele mai multe dintre ele aparinnd unor utilizatori obinuii i nu unor companii sau instituii. Site-urile mici sunt ns poteniale surse de ctig material pentru proprietari, pentru c exist

companii interesate s cumpere spaiu publicitar chiar i pe site-urile mici, cu condiia ca acestea s fie vizitate des. Un site bine fcut i care i-a dobndit deja o "clientel" de utilizatori constant, poate fi la un moment dat cumprat pentru o sum important de ctre o companie mult mai mare, existnd n plus posibilitatea ca administratorii site-ului s-i pstreze locurile de munc pentru a continua s menin i s mbunteasc site-ul. innd cont de faptul ca utilizatorii romni care sunt n acelai timp i webmasteri vor s le fie vizitate siteurile, ei trebuie s nvee s-i fac singuri activitatea de marketing, pentru c nu au mijloacele financiare necesare pentru apelarea la specialiti. Multe firme romneti care vor sa aib site-uri web de succes sunt n aceeai situaie, din cauza dificultilor financiare neputnd fi luat n discuie cumprarea de spaiu publicitar pe Internet sau angajarea unor specialiti n marketing. Greul promovrii site-ului cade astfel pe umerii webmasterului, transformat peste noapte i n responsabil cu marketingul. n cele ce urmeaz vor fi prezentate metodele prin care orice utilizator poate s-i promoveze site-ul fr a fi nevoit s apeleze la profesioniti. Metodele cele mai eficiente de promovare a unui site sunt urmtoarele: 1) Optimizarea site-ului web pentru indexarea adecvat de ctre motoarele de cutare 2) nscrierea site-ului n cataloagele de adrese ale portalurilor internaionale i romneti 3) Promovarea site-ului pe forumurile on-line sau n grupurile de discuii 4) Participarea la clasamentele site-urilor care fac topuri Primul pas este s alegem un domeniu pentru site-ul organizaiei. Numele unui domeniu nu trebuie s conin spaii de aceea dac vom folosi un cuvnt compus trebuie s folosim o liniua pentru a lega prile sale componente. Al doilea pas care trebuie fcut este sa gzduim site-ul pe un server. Spre exemplu exist servere care permit gzduire gratis cum ar fi : www.home.ro , www.3x.ro etc., iar la altele trebuie pltit gzduirea: www.myx.ro , www.elite.ro/web-hosting/ , www.apis.ro/domeniu.html . Dup ce am creat site-ul trebuie sa-l ncrcm pe serverul care l gzduiete. Acest lucru se realizeaz foarte simplu dac suntem familiarizai cu programele de tip client FTP. Tot cu ajutorul programelor de acest tip se realizeaz i actualizarea site-ului (tergerea unor pagini, adugarea unora noi, nlocuirea unor pagini cu versiuni mai noi). Aa cum am mai spus, putem s scriem singuri coninutul unui site i s-l punem n pagin sau putem apela la serviciile unor specialiti. Este recomandat s ne compunem singuri materialele pentru c astfel putem s le revizuim ulterior introducnd (fr a afecta stilul expunerii) anumite informaii care nu erau disponibile la momentul scrierii iniiale. Cu ct vom scrie mai mult cu att vom progresa n domeniul expunerii clare a propriilor idei. Dac socotim c "nu ne pricepem la scris" sau pur i simplu nu avem timp pentru a scrie i revizui materialele de pe site putem s apelm la serviciile unor specialiti (de ex. studeni la filologie sau jurnalistic). Noi putem s le dictm acestora materialele iar ei se vor ngriji de partea stilistic a textelor. Pentru a cunoate ct de vizitat este site-ul pe care l-ai realizat i pentru a afla mai multe date despre numrul i statistica vizitatorilor, informaii care v vor ajuta n realizarea unei campanii de marketing online eficiente, este bine s folosii contoare de pagin. Site-ul trebuie promovat. Muli manageri consider c odat ce site-ul este finalizat i postat pe Internet, lucrurile sunt ncheiate. Din acest moment organizaia este prezent pe Internet iar utilizatorii interesai de serviciile i produsele organizaiei vor veni de la sine. Din pcate nu se ntmpla deloc aa. Cel mai probabil, potenialii dumneavoastr utilizatori / clieni nu cunosc i nu caut organizaia dumneavoastr. Ei sunt n cutarea serviciilor sau produselor pe care le oferii, att dumneavostr ct i concurena. Dac atunci cnd un utilizator caut produsele dumneavoastr, site-ul nu va fi printre primele afiate, cel mai probabil acea persoan va deveni clientul concurenilor dumneavoastr. Un site nepromovat este la fel ca un magazin strlucitor i plin de mrfuri plasat pe o strdu ntunecoas, pe unde nu trece nimeni. Magazinul va da faliment n cteva luni. Site-ul va rmne un obiect inutil care nu aduce organizaiei dumneavostr nici un beneficiu. Un sistem de promovare a site-ului este i banner exchange-ul. Banner Exchange nseamn publicitate reciproc n cadrul unei reele de site-uri: n schimbul reclamelor (bannerelor) pe care le publicai pe site-ul dumneavoastr, site-urile partenere public reclamele (bannerele) dumneavoastr. O astfel de publicitate reciproc prin schimb de bannere se poate realiza ntre oricare dou

sau mai multe site-uri, cu condiia ca schimbul s fie echitabil. Un sistem centralizat de publicitate reciproc (banner exchange / link exchange) asigur: echitatea schimbului n reele cu un numar mare de participani, numeroase dimensiuni i formate de banner, selecia i monitorizarea site-urilor participante, statistici ale campaniilor publicitare derulate etc. Site-ul trebuie actualizat. Ca i promovarea, ntreinerea i actualizarea site-ului sunt nite operaii foarte adesea neglijate. Nu odat am vzut pe Internet site-uri cu informaii vechi, cu date de contact neactualizate, cu oferte care nu mai sunt valabile, cu rubrici de Noutai al cror coninut nu a mai fost schimbat de la lansarea site-ului. Pentru un potenial client care viziteaz frecvent site-ul, o asemenea situaie este un motiv puternic de a pune la ndoial seriozitatea organizaiei dumneavoastr. Nu trebuie s uitai nici o clip c, pe Internet, site-ul organizaiei este nsi organizaia. Iar un site neactualizat este la fel ca un magazin cu mrfuri prfuite i cu termenul de garanie expirat. Dumneavoastr ai cumpra ceva dintr-un asemenea magazin? Site-ul trebuie sa funcioneze corect Dei buna funcionare a site-ului pare o condiie de la sine neleas, destul de des pot fi gsite site-uri cu pagini care nu se deschid, cu baze de date care dau erori, cu formulare care funcioneaz incorect. Un site care d erori la funcionare i va ndeprta definitiv pe potenialii vizitatori care nu vor mai reveni pe site i nici la organizaia dumneavostr. i, fr ndoial, justificat. Nici dumneavoastr nu ai mai reveni ntr-un magazin n care liftul s-a blocat ntre etaje sau casa de marcat s-a defectat tocmai cnd, dup o ateptare de jumtate de or, ai ajuns s pltii. Aa nct, la finalizarea proiectului, rezervai-v o or pentru a vizita site-ul n ntregime i asigurai-v c totul funcioneaz fr gre.

8. Optimizare site Optimizarea paginilor web este o strategie aplicat de toi specialitii n marketingul site-urilor web i se refer la "cosmetizarea" paginilor, n aa fel nct ele s se afle n fruntea listei de pagini care este generat de un motor de cutare atunci cnd un utilizator caut paginile care conin un anumit cuvnt sau o anumit sintagm. Optimizarea unui site web pentru a fi indexat adecvat de ctre motoarele de cutare este un procedeu foarte simplu, ns n acelai timp destul de laborios n cazul n care avem un site cu multe pagini. Ea se refer la alegerea titlului paginilor, la alegerea unor cuvinte-cheie legate de coninutul fiecrei pagini n parte i la aranjarea textului n pagin. n general se spune despre orice pagin web c are o anumit tem i conine anumite cuvinte-cheie. Tema paginii este subiectul luat n discuie iar cuvintele-cheie sunt cuvintele foarte importante (pentru nelegerea temei dezbtute) care apar n text. Orice pagin web are o parte vizibil, care este afiat de explorator ("browser") i pe care o vedem noi cnd o vizitm. De asemenea, orice pagin web are i o parte "invizibil" pentru explorator, care este n fapt vizibil doar dac se deschide pagina respectiv cu un editor HTML sau cu un editor de text (de ex. Notepad). Aceast parte "invizibil" conine codul HTML al paginii i unele marcaje ("tags") folosite n scopul unei indexri adecvate a paginii respective de ctre motoarele de cutare. Codul HTML al unei pagini poate fi vzut atunci cnd avem pagina afiat n explorator dac facem clic pe meniul "View" i apoi pe opiunea "Source". Va fi lansat automat programul Notepad n care vom vedea codul HTML.

8.1. Optimizarea coninutului paginii Web Motoarele de cutare sunt programate s utilizeze n mod optim baza de date obinut de roboii trtori care indexeaz paginile de pe internet. Scopul lor este s prezinte foarte rapid utilizatorilor liste cu pagini web n care primele locuri s fie ocupate de pagini cu un coninut informativ, util. Deci algoritmul de sortare a paginilor trebuie s fie foarte bine conceput pentru c el are rolul de a sorta mii sau zeci de mii de pagini ntrun timp foarte scurt i cu un rezultat care s fie pe placul utilizatorilor. Un robot trtor nu vede paginile web aa cum le vd oamenii, el acord o importan covritoare textului unei pagini, fr a fi impresionat deloc de aspectul ei grafic. Ca urmare bazele de date ale motoarelor de cutare conin pagini indexate dup coninutul lor scris i nu dup cel grafic. Acest coninut scris este cel care d 70% din relevana unei pagini web, restul de 30% fiind dat de optimizarea ("cosmetizarea") paginii web. Sarcina lingvitilor i a matematicienilor implicai n dezvoltarea motoarelor de cutare a stat tocmai n crearea i optimizarea unui algoritm care s poat s ordoneze un numr mare de pagini web n funcie de utilitatea coninutului lor scris. n mod evident, unele din caracteristicile algoritmului nu sunt uor de sesizat de ctre persoanele care nu au lucrat la el. Alte caracteristici pot fi ns deduse analiznd paginile web care apar n mod constant pe primele locuri ale listelor generate de motoarele

de cutare. Este uor de intuit faptul c algoritmul favorizeaz paginile web care au un coninut de text important, pentru c se consider c aceste pagini conin mult informaie, iar utilizatorii caut n mod special aceast caracteristic a paginilor web. Nu se tie precis cum este evaluat de ctre algoritm coninutul de text al unei pagini dar este foarte posibil s fie luat n calcul numrul de caractere (litere) din pagin aa cum a fost calculat de robotul trtor care a indexat pagina. Asta nu nseamn c pentru ca paginile noastre s aib succes suntem obligai s le umplem cu text pn la refuz, fr s inem cont i de alte aspecte, cum este de exemplu calitatea expunerii informaiilor din textul respectiv. Paginile cu mult text sunt pe placul algoritmilor dar oamenii sunt mai rafinai, ei prefer de cele mai multe ori o cantitate rezonabil de text i care n plus trebuie s fie interesant, util, bine scris i formatat n aa fel nct s fie plcut de citit. Un alt aspect care nu trebuie neglijat este actualizarea periodic a conintului site-ului i adugarea de noi materiale. Atunci cnd scriem textul dintr-o pagin trebuie s ne asigurm c folosim i sinonime pentru cuvintelecheie i de asemenea c folosim i variante mai puin folosite ale acestora. De exemplu ntr-o pagin web care trateaz un subiect despre site-urile web (gzduire de ex.) trebuie folosit n principal cuvntul "site" dar trebuie pus n parantez i varianta "sit". n acest fel dac un utilizator va cuta paginile care conin sintagma "gzduire site web" avem toate ansele ca i pagina noastr care trateaz acest subiect s fie luat n seam de motorul de cutare pentru includere pe lista rezulatelor cutrii.

8.2. nregistrarea site-ului la motoarele de cutare n general se consider c nu este nevoie s ne nregistrm site-ul la motoarele de cutare pentru c acestea l vor indexa atunci cnd robotul trtor l va ntlni n "plimbrile" sale periodice pe internet. Muli webmasteri prefer ns s fie siguri c site-ul va fi indexat ct mai repede i atunci apeleaz la serviciul de propunere de site-uri prezent la toate motoarele de cutare. Acest serviciu este fie gratuit fie cu plat ( Looksmart , Lycos). Dac site-ul nostru apare n listele generate de un robot de cutare nu mai trebuie s l nregistrm, este evident c paginile sale au fost deja indexate. Fiecare motor de cutare are o pagin special numit "Add URL" (adaug adresa unui site) sau cu un titlu asemntor ("Submit a Site"). n pagina respectiv scriem ntr-o caset de text adresa site-ului (de exemplu http://www.masinidespalat.home.ro) i n alt caset un mic comentariu (descrierea site-ului sau nite cuvintecheie) i apsm butonul "Add URL". Nu este nevoie s nregistrm dect adresa paginii gazd a site-ului. Robotul motorului de cutare va indexa toate paginile site-ului pornind de la aceasta. n final, am cutat cteva modaliti de urmrire a traficului pe site-ul web. Am setat dou contoare de trafic. Unul romnesc (www.trafic.ro) i unul strin (www.sitemeter.com). Ambele sunt gratuite i ofer o mulime de informaii utile despre numrul de vizitatori i pagini web (page views) accesate, mprite pe ani, luni, sptmni. n plus, mai sunt precizate tipul de browser folosit, IP-ul, prima i ultima pagin accesat etc. Dup ce v nscriei la aceste site-uri web, vei primi un cod HTML pe care trebuie s-l inserai (fr nici un fel de modificare) n pagina web, acolo unde dorii ca el s apar. La Trafic trebuie s alegei categoria n care se ncadreaz site-ul dvs. Apoi, vei putea urmri n fiecare sptmn evoluia site-ului dvs. (nr. de vizitatori, creterea fa de sptmna ncheiat, poziia obinut n cadrul seciunii respective etc.). 9. Protejarea coninutului unui site Termenul de copyright este specific american, dar se folosete i n Europa sau pe alte continente, cu aceeai semnificaie: drept de autor. n Romnia, dreptul de autor este reglementat juridic prin Legea nr. 8 / 1996. n conformitate cu prevederile acestei legi, opera de creaie intelectual este recunoscut i protejat, independent de aducerea la cunotin public, prin simplul fapt al realizrii ei, chiar neterminat (Art. 1, Alin. 2). Dreptul de autor este legat de persoana autorului i comport atribute de ordin moral i patrimonial (Art. 1, Alin.1). Aadar, un site web reprezint o oper de creaie intelectual i poate constitui obiect al dreptului de autor. Aceasta nseamn c informaiile pe care le introducei ntr-o pagin personal v aparin i dreptul de autor v revine n ntregime asupra textului respectiv. Dac ns lucrai ntr-o echip sau suntei angajat al unei firme de webdesign atunci suntei co-autor i vei fi protejat prin drepturi de autor asupra imaginilor pe care le-ai creat, machetrii paginii sau programelor pe care le-ai realizat. Muli oameni consider, n mod eronat, c se pot copia fr a cere acordul nimnui diverse materiale disponibile online (texte, imagini, sunete, fiiere video etc.) Exist ntr-adevr site-uri de unde se pot copia astfel de fiiere sau de unde se poate ncrca software gratuit. Pe aceste site-uri vei gsi o not explicit care v permite utilizarea acestora. Dac nu gsii o not n acest sens, este indicat s cerei prin e-mail acordul webmasterului site-ului web de la care vrei s copiai materialele respective. n majoritatea cazurilor vi

se va rspunde afirmativ. De asemenea, este bine s includei o noti de copyright n subsolul fiecrei pagini n care se vor preciza simbolul de copyright (), autorul i anul n care a fost fcut public pagina respectiv. Dac considerai necesar, putei s trecei i alte meniuni specifice. Pe lng protejarea coninutului unui site, i aspectul acestuia, modul tehnic de realizare, interaciunea ntre componentele acestuia pot fi obiectul proteciei. Sunt numeroase situaiile n care un site poate fi protejat n sine, ca oper independent, fr ca protejarea coninutului acestuia s fie impus sau s existe. n egal msur, coninutul unui site poate constitui obiectul proteciei n timp ce elementele grafice i funcionale ale acestuia s fie libere. 10. Feedback (interaciunea cu vizitatorii) Pn acum, principala form de comunicare ntre comerciani i clienii lor era publicitatea. Dar aceast comunicare nu oferea o oportunitate de interaciune ntre cele dou pri sau feedback. Odat cu rspndirea Internetului se poate realiza foarte uor o comunicare n ambele sensuri. mbuntirea metodelor prin care utilizatorii interacioneaz cu paginile unui site web este esenial pentru crearea unui site bun. Folosirea feedback-ului este foarte important pentru creterea numrului de vizitatori i ofer posibilitatea ca acetia s-i exprime opiniile, sugestiile i comentariile n legtur cu un site web. Emailul este cea mai important i mai uoar cale de a recepiona mesaje de la cititori. V recomand s nu scriei nici o adres de e-mail n clar, ci s o inserai ca imagine, pentru a evita spamul. O alt variant este prezentat n imagine: De aceea, este obligatorie furnizarea adresei e-mail pe fiecare pagin. Pe de alt parte, un webmaster trebuie s fie capabil s rspund n timp scurt pentru a menine o relaie de ncredere reciproc. Exist pe Internet mii de site-uri web care v ofer posibilitatea s v creai gratuit unul sau mai multe conturi de e-mail. Cteva dintre cele mai cunoscute sunt urmtoarele: - http://www.hotmail.com - http://www.yahoo.com - http://www.geocities.com - http://www.freeservers.com - http://www.netadress.com - http://www.home.roCri de oaspei (guestbooks) Completarea formularelor este o practic des ntlnit pe Internet. Acestea permit colectarea de feedback-uri de la cititori ntr-un mod organizat. Un formular web se poate realiza uor folosind direct codul HTML sau cu ajutorul unui editor HTML. Un exemplu de formular des ntlnit l reprezint aa numitele crti de oaspei unde cititorul poate s-i scrie impresiile i comentariile dup vizitarea unui site. O carte de oaspei gratuit se poate obine vizitnd site-urile web urmtoare: - http://www.theguestbook.com - http://www.dreambook.com - http://www.guestbooks.net - http://www.countz.com/guestbook.html - http://www.freecenter.com/guestbook.html - http://www.lpage.com - http://www.bravenet.com - http://www.guestbook4free.com/en/ Camere de chat Pentru a aduce ct mai muli vizitatori la site-ul pe care l-ai creat, putei s setai un serviciu propriu de chat. Unele site-uri ofer gratuit aceast facilitate, ca de exemplu: Action Chat ( http://www.ten-percent.com/ ) Ram-Page Chat ( http://www.ram-page.com/ ) Liste de discuii Pentru a crete gradul de interactivitate cu vizitatorii putei s setai n pagin o list de discuii. Exist multe site-uri, ca de exemplu Topica sau Yahoogroups care ofer gratuit aceast facilitate. Mai multe informaii despre acest subiect gsii n capitolul Promovarea site-ului web. 11. Greeli Frecvente 1. Prea multe imagini Unii web designeri fac exces de zel n mpodobirea paginilor cu grafic i animaii, din convingerea ca astfel vor fi mai atrgtoare. Este o eroare frecvent mai ales pentru cei care intr n contact cu web designul prin graphic design. Imagini multe, mari, neoptimizate nseamn vitez de ncrcare a paginii drastic sczut. Mai mult, nici un motor de cutare nu indexeaz nc imagini, deci un home page

constituit din imagini nucitor de atrgtoare, i nici o linie de text (html, nu desenat pe bitmap) va genera un numr constant de listri pe cuvinte cheie n Google: zero. n consecin, la ce folosete o pagin foarte frumos desenat, dac doar civa ajung s o vad (cei care nu s-au plictisit ateptnd s se descarce i cei cu conexiuni de nalta vitez), sau cei care cunosc adresa din alte surse. 2. Imagini neoptimizate pentru web Din nou, greeala frecvent la cei care au un background n design grafic. Pe web, mrimea conteaz. Programe de editare de imagine ca Adobe Photoshop ofer opiuni de optimizare pentru web, dar exist i unelte mai simple i mai putin costisitoare pentru optimizarea de imagini. 3. Exces agasant de animaii Muli designeri cred c o pagin pe care se mic ceva n permanen este mult mai atractiv. Numai c principiul de eye catching se refer la un SINGUR element care focalizeaz atenia. i deja am descoperit greeala. n loc s atrag atenia, elementele animate dintr-o pagin distrag atenia cititorului, funcionnd ca nite viziuni periferice. Acelai rezultat l au i efectele de tip Blink: ajung s agaseze vizitatorul, alungndu-l de pe site, la fel de nedumerit cum a a venit. Aadar, atenie la dozarea animaiilor! 4. Cod redundant i dezordonat Oricine poate vedea coninutul-cod al unei pagini web selectnd opiunea View source. Deocamdat, nu exist un procedeu de ascundere a sursei unei pagini web. Nu ncurajm scripturile java de blocare a afirii coninutului, acesta fiind un motiv de penalizare n motoarele de cutare, i o metod sigur de agasare a vizitatorului (care e obinuit s foloseasc butonul dreapta al mouseului) ns dac avei stiluri proprii n pagin, de pild, este de preferat s le introducei ntr-un document separat (.css), ctre care s se lege fiecare pagin din site. Motivul principal este optimizarea codului: nu mai e nevoie s introducei stilul n fiecare pagin, reducnd astfel considerabil codul. Pe de alt parte, la fel de important este de reinut c executnd modificri repetate n pagin cu ajutorul unui editor vizual de html, avei toate ansele s obineti un cod nclcit, redundant, cu taguri inutile rmase din poriuni terse etc - de aceea este recomandabil s executai codul de mn pe ct posibil. Suficient de ameit, codul va genera rapid i funcionarea defectuoas a site-ului. 5. Testare Evident, cnd creai o pagin web o verificai n browserul vostru s vedei cum arat. Dar nu e suficient, nici pe departe. O pagin care arat super n Internet Explorer 6.x, la rezoluia voastr de 1024x768 se poate transforma ntr-un dezastru vizual la o rezoluie diferit, cu un font size diferit, n Netscape, Opera sau Mozilla. inei cont i de utilizatorii care au browserul setat s nu afieze imagini, de cei care folosesc alt sistem de operare dect Windows. Creai-v tabelele, imaginile, textele (daca nu folosii CSS) astfel nct s fiecompatibile cu vizualizarea n majoritatea situaiilor (ideal n toate). 6. Feeback Formularele sunt o parte interactiv a unui site. ntr-o pagin cu formular, te apropii de vizitator mai mult dect n celelalte. E stabilirea unei relaii, i nceputul unui schimb. E poate partea cea mai personal a unui site, acolo unde userul ii d informaii despre el, ii mprtete opiniile sale, tu i oferi un serviciu sau o oportunitate etc. De aceea modul n care execui formularele este foarte important pentru succesul site-ului tu. O relaie se bazeaz pe respect i ncredere: d-i vizitatorului ceea ce i-ai promis; afieaz-i o pagin de confirmare / mulumire dup completarea formularului; afieaz-i o pagin de eroare n cazul n care a completat greit cmpurile sau a omis un cmp obligatoriu. Feedback, feedback, feedback. i bineneles, verific-i scripturile, ca s te asiguri c formularul funcioneaz. 7. Prea mult text Avem obinuine rmase de la pagina de hrtie, i de multe ori se vede pe web. O pagin de web nu e citit n autobuz sau n tren (s numrm cate laptopuri cu conexiune wireless se plimb acum cu rapidul BucuretiConstana?). Pentru cri, exist varianta e-Book. Nu facei exces de text, pentru c nu va fi citit. Spargei textul n paragrafe, cu titluri relevante. n plus, sub 15% din utilizatori fac scroll pe o pagin web, aa nct ncercai s pstrai informaia esenial n partea de sus a paginii. Internetul e un mediu dinamic, utilizatorii

obinuiesc s acceseze mai multe pagini n acelai timp, i evident sunt mai uor distrai de la coninutul fiecreia dintre ele. Evident, un text dozat pentru astfel de condiii de citire nu nseamn nicidecum un text laconic, din care vizitatorul s nu poat extrage nici o informaie util. Dimpotriv, oferii-i un coctail de esene, astfel nct s obin ct mai multe informaii ntr-un mod ct mai clar organizat, n ct mai puin spaiu. 8. Prea puin text Totui, nu fii laconici. Cine ajunge pe pagin, dorete s se infomeze. Oferii suficiente date, suficient coninut, pentru vizitatori i pentru motoarele de cutare. Oricum, de obicei site-urile web pctuiesc prin prea mul text, nu prea puin. 9. Text de tip sp@m / reclama Nu scriei: Cel mai tare site de pe web, Cea mai bun firm de consultan sau "Cea mai mare colecie de mp3-uri". Lasai-l pe vizitator s decid, artai-i respect. n plus, formulri prea comerciale au toate ansele s piard vizitatorul. i el e stul de reclam, ca oricare dintre noi. Dac a venit n cutarea unei informaii, oferiii informaia, nu laude de sine. Suntei ndeajuns bun n ceea ce facei ca s-l convingei cu fapte, nu cu vorbe goale i locuri comune care trec pe lng ureche fr a fi procesate. Sublinierile (underline) se folosesc doar pe linkuri, lsai-le acolo. Nu folosii cuvinte scrise cu majuscule, aceasta este o marc a sp@mului, de care Internauii s-au sturat pn dincolo. Nu vrei s fii asociai cu un fenomen negativ. 10. Site map Cu ct e mai mare un site, cu att mai necesar devine un ghid de navigare. Utilizatorii sunt grbii, deci trebuie s le artai exact unde gsesc ceea ce caut. De asemena, i agenii de cutare gsesc foarte prietenoas harta site-ului, din aceleai motive. 11. Mentenan Un site trebuie ntreinut. Nu lsai informaii vechi, expirate. Aducei mereu coninut nou pentru vizitatori, dar i pentru motoarele de cutare - dac vrei s avei un ranking bun. n fond, natura Internetului este dat de nsui dinamismul su. inei pasul.

2. LIMBAJUL HTML

1. Structura paginii Cu ajutorul limbajului HTML (Hyper Text Markup Language) poti construi pagini web nu foarte pretentioase insa reprezinta un inceput pentru realizarea site-urilor profesionale. . Editarea acestora se poate face in orice program de editare texte, pornind chiar cu banalul Notepad din Windows. Toate notiunile prezentate in acest ghid pot fi puse in practica utilizand Notepad, astfel incat poti deschide Notepad acum. Desi exista mai multe programe care au grija de codul HTML atunci cand faci o pagina web, pentru a usura folosirea lor este nevoie de cel putin cateva notiuni elementare de HTML. Aceste programe se numesc editoare HTML si pot fi de doua tipuri: editoare clasice si editoare de tipul WYSIWYG (What You See Is What You Get, care se traduce prin ceea ce vezi este ceea ce obtii). In cazul celei de-a doua categorii de editoare HTML, utilizatorii nu trebuie decat sa se ocupe de partea grafica, de asezarea in pagina etc., scrierea codului HTML ramanand in seama acestor programe. O observatie demna de luat in seama este si aceea ca cele mai bune editoare HTML nu sunt gratuite. In concluzie, invatarea limbajului HTML are trei mari avantaje: este foarte simpla si nu necesita mult timp ofera controlul absolut asupra realizarii paginii web poti folosi in cadrul paginilor pe care le vei realiza secvente de cod HTML "imprumutate" de la alte pagini web (pentru a vedea codul sursa al unei pagini web, in Internet Explorer intra in meniul View si apoi selecteaza Source)

Pentru a intra in posesia editoarelor HTML sau a variantelor demo ale editoarelor profesionale, le poti descarca de pe internet, dar daca nu ai o conexiune buna la internet, le poti gasi si pe CD-urile revistelor de IT. Fisierul pe care il vom edita se va numi index.html. In general fisierul principal al unui site internet (cel care se incarca atunci cand tastam o adresa de genul www.abc.abc) este numit index.html. Instructiunile pe care le folosim intr-o pagina HTML se numesc tag-uri si acestea indica browser-ului (Netscape, Internet Explorer, etc) modul de prezentare a informatiei din pagina. Tag-urile se scriu intre semnele < si >. Tag-urile nu trebuie scrise respectand reguli foarte stricte (nu e nevoie sa scrii numai cate un tag pe rand sau sa foloseti numai litere mari, etc).Un exemplu de utilizare a tag-ului FONT este: <FONT FACE=ARIAL COLOR=#FF0000>ABC SRL lider pe piata serviciilor</FONT>

Instructiunea de mai sus va determina afisarea textului "ABC SRL - Lider pe piata serviciilor" cu font arial si culoarea rosie. Dupa cum se poate observa, exista un tag inaintea textului si unul care incheie textul respectiv. Majoritatea tag-urilor functioneaza in acest mod: se pun inaintea informatiei pe care dorim sa o prezentam intr-un anume mod iar apoi la sfarsitul acesteia, ca in exemplul de mai sus. Continutul oricarui fisier HTML trebuie inclus intre tag-urile <HTML> si </HTML>. Aceasta inseamna ca tagul <HTML> trebuie sa fie primul lucru care apare intr-un fisier HTML, iar tag-ul </HTML> trebuie sa fie ultimul: <HTML> ...aici </HTML> se completeaza informatia de prezentat in pagina...

Ca structura, o pagina HTML are doua parti: o parte delimitata de tag-urile <HEAD> si </HEAD> ce contine informatii de identificare a paginii si o parte delimitata de tag-urile <BODY> si </BODY> ce contine informatiile de prezentat efectiv in pagina. Asupra primei sectiuni nu vom insista prea mult. Cel mai important tag utilizat in sectiunea HEAD este cel care da titlul paginii. Acest titlu va fi incadrat de <TITLE> si </TITLE>. Un exemplu de pagina HTML foarte simpla, avand titlul "ABC SRL" este: <HTML> <HEAD> <TITLE>ABC </HEAD>

SRL</TITLE>

<BODY> ...aici </BODY> </HTML>

se

completeaza

continutul

paginii...

Tag-urile <HTML>...</HTML>, <HEAD>...</HEAD>, <TITLE>...</TITLE> si <BODY>...</BODY> vor aparea o singura data in cadrul unui fisier HTML, dupa cum arata exemplul de mai sus. Apasa pe imaginea de mai jos pentru a vedea cum arata fisierul ce contine instructiunile de mai sus (se deschide intr-o fereastra separata pe care o poti inchide dupa consultare):

2. Despre texte

Cel mai important element al unei pagini internet este, desigur, textul. Intr-o forma simpla, acesta poate fi scris efectiv intr-o pagina HTML, dupa cum am vazut in exemplul anterior: am scris in fisierul HTML textul "...aici se completeaza informatia de prezentat in pagina..." si acesta s-a incarcat in mod identic in browser. Vom studia in continuare elemente de formatare a textului. Doua lucruri trebuie mentionate in primul rand, legate de formatarea textelor: utilizarea spatiilor si trecerea la un nou rand. Intr-un fisier HTML afisarea mai multor spatii consecutive nu este posibila prin scrierea directa in fisierul html ci folosind de mai multe ori sintagma &nbsp;. Astfel, pentru a pune trei spatii intre cuvintele ABC si SRL in textul "ABC SRL" va trebui sa scriem in fisierul HTML astfel: ABC&nbsp;&nbsp;&nbsp;SRL Trecerea la un nou rand nu se face apasand Enter in fisierul HTML, ci utilizand tag-ul <BR> (acest tag se utilizeaza singur; nu se foloseste cu </BR>).Astfel, pentru a scrie "ABC" pe un rand, a lasa un rand liber, si "SRL" pe un rand separat, vom folosi: ABC<BR><BR>SRL

Am utilizat mai sus de doua ori tag-ul BR: o data pentru a trece la un nou rand si o data pentru a lasa un rand liber. Tag-ul utilizat pentru formatarea modului de afisare a textului este <FONT>...</FONT>. Tag-ul FONT suporta mai multi parametri, printre care: - SIZE=x, unde x este dimensiunea fontului (1 fiind dimensiunea cea mai mica); - COLOR=#RRGGBB - culoarea cu care se va afisa fontul (vom reveni asupra acesteia in capitolul urmator).Culoarea implicita este negru; - FACE=font - fontul cu care va fi scris textul respectiv. Atentie! Vizitatorii paginii tale trebuie sa aiba fontul respectiv instalat pe calculator, deci utilizeaza numai fonturi "clasice". Fontul implicit este Times New Roman Acesti parametri poti fi utilizati separat sau simultan in cadrul tag-ului FONT. Astfel, instructiunea de mai jos afiseaza text folosind culoarea albastru: <FONT COLOR=#0000AA>ABC SRL Lider pe piata serviciilor</FONT>

Instructiunea de mai jos afiseaza acelasi text cu font arial, culoare albastra si dimensiune mai mare: <FONT COLOR=#0000AA SIZE=4 FONT=ARIAL >ABC SRL - Lider pe piata serviciilor</FONT>

Dupa cum se poate vedea, se pot utiliza mai multi parametri in cadrul aceluiasi tag FONT. Acestia nu se despart prin virgula, ci printr-un spatiu.De retinut ca parametrul FACE poate primi mai multe fonturi. Astfel, un tag de tipul <FONT FACE=VERDANA,ARIAL>...</FONT> va instrui browserul sa utilizeze fontul Verdana, iar daca acesta nu este gasit, sa utilizeze Arial. Mai exista trei tag-uri utile pentru formatarea textelor: <B>...</B> - utilizat pentru scrierea textelor cu bold, <I>...</I> - utilizat pentru scrierea textelor cu italics (litere inclinate) si <U>...</U> - pentru a scrie text subliniat. Desigur, pot exista combinatii intre tag-ul FONT si tag-urile de subliniare, ingrosare sau inclinare, ca de exemplu: <FONT COLOR=#00AA00><B>Text verde ingrosat</B></FONT>

Tine cont ca tag-urile trebuie inchise in aceeasi ordine in care au fost deschise. Pentru exemple concrete de utilizare a tuturor informatiilor de mai sus, apasa pe imaginea de mai jos (se deschide intr-o fereastra separata pe care o poti inchide dupa consultare):

In fisierul index.html deschis in Notepad, sterge randul cu "...aici se completeaza informatia de prezentat in pagina..." si inlocuieste-l cu: <BR> <FONT <BR> SIZE=4 COLOR=#0000AA><B>ABC SRL Lider pe piata serviciilor</B></FONT>

Acum, daca salvezi fisierul index.html si il reincarci in Browser, ar trebui sa arate cam asa (apasa pe

imaginea de mai jos - se va deschide intr-o fereastra noua):

Exemplu <html> <head> <title> Blocuri paragraf</title> </head> <body> Prima linie <p> Lini generata de un paragraf (implicit paragraful este aliniat la stanga). <p align="right"> Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta. Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta. <p align="center"> Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru. Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru. </body> </html>

3. Despre culori

Am vazut in capitolul anterior ca textele din paginile HTML pot avea diverse culori cu un tag de tipul <FONT COLOR=#00FF00>...</FONT>. Vom prezenta in continuare sistemul de codificare a culorilor pentru paginile web. Fiecare culoare este interpretata ca fiind compusa din diverse procente ale culorilor rosu, verde si albastru. Acestea sunt exprimate prin numere in baza 16. Astfel, numarul 00 reprezinta nivelul minim dintr-o anumita culoare iar numarul FF reprezinta nivelul maxim. Acordand ponderi exprimate prin aceste numere in baza 16 culorilor rosu, verde si albastru (Red, Green, Blue - RGB) se poate obtine orice culoare: <FONT COLOR=#FF0000> rosu <FONT COLOR=#00FF00> verde <FONT COLOR=#0000FF> albastru <FONT COLOR=#FFFF00> galben

<FONT COLOR=#FF00FF> mov <FONT COLOR=#00FFFF> bleu <FONT COLOR=#000000> negru <FONT COLOR=#FFFFFF> (alb)

Culorile de mai sus vor fi mai putin "aprinse" daca in loc de FF se foloseste AA, spre exemplu: #00AA00.

Folosind acelasi sistem vom putea specifica culoarea de fundal (background) a unei pagini web, in cadrul tagului BODY despre care am vorbit la inceputul acestui ghid: <BODY BGCOLOR=#DDFFFF>

Tag-ul BODY mai poate contine si alte informatii interesante, ca de exemplu culoarea cu care vor fi afisate linkurile catre alte pagini (utilizand atributul LINK) si link-urile catre alte pagini care au fost vizitate deja (folosind atributul VLINK): <BODY BGCOLOR=#DDFFFF LINK=#0000AA

VLINK=#0000AA>

In fisierul index.html din Notepad, inlocuieste randul continand tag-ul <BODY> cu cel de mai sus si salveaza fisierul (se inlocuieste tag-ul BODY de la inceputul fisierului, nu cel de la sfarsit care este </BODY>). Fundalul paginii tale ar trebui sa devina bleu:

4. Despre tabele Tabelele se utilizeaza folosind tag-ul <TABLE>...</TABLE>. Imaginati-va un tabel simplu deschis in Word care cuprinde mai multe casute. In fisierul HTML, casutele sunt organizate pe randuri (rows - linii orizontale de casute). La randul lor, randurile sunt organizate in elemente (casute): 1

Tabelul de mai sus contine 3 randuri, fiecare rand continand 5 elemente.In interiorul unui tag de tip TABLE, randurile sunt declarate folosind tag-ul <TR>...</TR>, iar in cadrul fiecarui tag TR elementele sunt declarate cu tag-ul <TD>...</TD>. Fiecare element (casuta) poate contine text, imagini, link-uri, etc. Un tabel de tipul celui de mai sus ar fi codificat astfel: <TABLE> <TR><TD>1</TD><TD></TD><TD></TD><TD></TD><TD></TD></TR> <TR><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD></TR> <TR><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD></TR> </TABLE>

In exemplul de mai sus avem un tag <TABLE>...</TABLE> care delimiteaza tabelul si trei tag-uri <TR>...</TR> corespunzand celor trei randuri ale tabelului. Fiecare tag TR contine cate 5 tag-uri <TD>...</TD>. Intre <TD> si </TD> se introduce continutul efectiv al fiecarei casute. In exemplul de mai sus numai casuta din stanga-sus are continut - cifra 1 (nu incercati exemplul de mai sus, intrucat casutele fara continut nu sunt afisate).

Tag-urile de definire a tabelelor pot avea diverse atribute, pentru formatarea tabelului. Astfel, tag-ul TABLE poate avea: - WIDTH=x sau WIDTH=x% - acesta specifica lungimea intregului tabel in pixeli (de exemplu WIDTH=500) sau

in procente fata de lungimea intregii ferestre (de exemplu WIDTH=50%); - HEIGHT=x sau HEIGHT=x% - similar cu WIDTH, dar pentru inaltimea intregului tabel (exemple: HEIGHT=300 sau HEIGHT=100%); - BORDER=x - daca x este 1 atunci tabelul va avea si "cadru" (linii de delimitare a elementelor. Daca x este 0, atunci acestea vor lipsi (deci BORDER=0 sau BORDER=1); CELLSPACING=x specifica spatiul dintre casute, in pixeli; - CELLPADDING=x - specifica spatiul dintre marginea unei casute si continutul acesteia, in pixeli. Si in acest caz pot fi folosite toate aceste atribute impreuna, numai o parte a lor, sau nici unul. Un tag TABLE ce le foloseste pe toate ar arata astfel: <TABLE .......... </TABLE> WIDTH=80% HEIGHT=200 BORDER=1 CELLPADDING=0

CELLSPACING=5>

Si tag-ul TD poate avea tot felul de atribute interesante: - WIDTH=x sau WIDTH=x% - lungimea casutei in pixeli sau ca procent din lungimea intregului tabel; - HEIGHT=x sau HEIGHT=x% - inaltimea casutei in pixeli sau ca procent din inaltimea intregului tabel; - BGCOLOR=#RRGGBB - culoarea fundalului casutei, ca de exemplu BGCOLOR=#EEEEDD. - ALIGN=RIGHT, ALIGN=LEFT sau ALIGN=CENTER - modul cum va fi pozitionat continutul casutei in casuta: la dreapta, la stanga sau central; - VALIGN=TOP, VALIGN=BOTTOM sau VALIGN=CENTER - similar, dar pentru pozitionarea pe verticala: sus, jos sau central. Tine cont de faptul ca textul din interiorul unei casute trebuie formatat si el la randul sau. O casuta ce ar contine un text rosu pe fond verde deschis s-ar codifica astfel: <TD BGCOLOR=#DDFFDD><FONT COLOR=#AA0000>text</FONT></TD>

Va prezentam si doua tabele atipice: CELULA 1 CELULA 2 CELULA 3 CELULA 4 Un asemenea tabel s-ar codifica

astfel: 3</TD></TR> 4</TD></TR>

<TABLE> <TR><TD>CELULA <TR><TD </TABLE>

1</TD><TD>CELULA 2</TD><TD>CELULA COLSPAN=3>CELULA

Noteaza utilizarea atributului COLSPAN=3 in prima celula a celui de-al doilea rand. Acesta spune ca celula respectiva se "intinde" pe lungimea a trei celule din structura normala a tabelului.Desigur, acest al doilea rand va contine numai o singura celula, nu trei. Similar se poate proiecta un tabel cu o celula care se intinde pe verticala pe spatiul a doua celule: CELULA 1 CELULA 2 CELULA 4 CELULA 5 Si <TABLE> <TR><TD>CELULA <TD <TR><TD>CELULA </TABLE> codul 1</TD><TD>CELULA ROWSPAN=2>CELULA 4</TD><TD>CELULA

CELULA 3

este:

2</TD> 3</TD></TR> 5</TD></TR>

Se observa utilizarea atributului ROWSPAN=2 in a treia celula a primului rand al tabelului. Acesta spune ca aceasta celula se intinde pe verticala pe "inaltimea" a doua randuri. Desigur, cel de-al doilea rand contine numai

doua

celule

(nu

trei),

intrucat

treia

vine

din

randul

de

sus.

Tabelele pot reprezenta un instrument foarte puternic in cadrul unui fisier HTML. O tehnica interesanta de pozitionare cat mai exacta a unor informatii consta in utilizarea unor tabele in tabele (tag-uri TD care au drept continut un tabel, de exemplu). In acest caz este foarte importanta succesiunea corecta a tag-urilor TD, TR si TABLE pentru o afisare corecta. O alta tehnica interesanta este utilizarea tabelelor cu BORDER=0 (fara cadru) pentru gruparea unor date fara a da impresia existentei unui tabel propriu-zis. 5. Exemple de tabele In continuare vom da doua exemple de tabele care pot fi incarcate si in fisierul index.html desxhis in Notepad:

<TABLE WIDTH=700 BORDER=0 CELLPADDING=5 CELLSPACING=5> <TR> <TD WIDTH=30% BGCOLOR=#006666 ALIGN=LEFT> <FONT FACE=VERDANA,ARIAL SIZE=2 COLOR=#FFFFFF> <B> Adresa: </B></FONT></TD> <TD BGCOLOR="#CCEEEE" ALIGN=LEFT> <FONT FACE=VERDANA,ARIAL SIZE=2> <I> Bulevardul Independentei nr. 0, Bloc 0, Ap 0, Sector 0, Bucuresti </I></FONT></TD> </TR> <TR> <TD WIDTH=30% BGCOLOR=#006666 ALIGN=LEFT> <FONT FACE=VERDANA,ARIAL SIZE=2 COLOR=#FFFFFF> <B> Activitate: </B></FONT></TD> <TD BGCOLOR="#CCEEEE" ALIGN=LEFT> <FONT FACE=VERDANA,ARIAL SIZE=2> <I> ABC SRL va ofera o gama larga de produse si servicii necesare dezvoltarii activitatii societatii Dumneavoastra. Ne recomandam prin structura deosebita a ofertei noastre precum si prin politica de preturi practicata. </I></FONT></TD> </TR> </TABLE>

Exemplul de mai sus nu contine decat notiuni explicate deja in capitolele anterioare: este vorba de un tabel "clasic" cu lungime de 700 pixeli (WIDTH=700), fara cadru (BORDER=0) si cu spatiu de 5 pixeli atat intre casute (CELLSPACING=5) cat si intre cadru si informatia din casuta (CELLPADDING=5); tabelul are doua randuri (continute intre cele doua perechi de tag-uri <TR>...</TR>); fiecare rand contine cate doua casute: - prima de lungime 30% din total (WIDTH=30%) cu culoarea fondului bleumarin (BGCOLOR=#006666) si textul aliniat la stanga. Textul din aceasta casuta este scris cu font Verdana de dimensiune 2 si culoare alba (FONT FACE=VERDANA,ARIAL SIZE=2 COLOR=#FFFFFF) si este ingrosat (B). - a doua casuta cu fond bleu (BGCOLOR=#CCEEEE) si text aliniat de asemenea la stanga (ALIGN=LEFT). Contine text cu acelasi font Verdana de dimensiune 2, dar scris cu negru (implicit) si cu litere inclinate (I). Poti copia exemplul de mai sus in fisierul tau index.html deschis in Notepad (pozitioneaza-l intre ultimul tag <BR> si tag-ul </BODY> de la sfarsitul fisierului). Incarcat intr-un browser, index.html ar trebui sa arate astfel:

Iti

mai

prezentam

inca

un

tabel,

ceva

mai

simplu:

<TABLE WIDTH=700 BORDER=1 CELLPADDING=5> <TR><TD BGCOLOR=#CCEEEE> <FONT FACE=VERDANA,ARIAL SIZE=2> <B> NOU </B> Incepand cu luna februarie societatea noastra aplica reduceri la produsele oferite de la 30% la 50%, in functie de cantitate. Va invitam sa ne apelati la telefon <B>000.0000</B> pentru informatii suplimentare. Va stam la

dispozitie si prin <B>e-mail</B> cu o oferta completa de preturi. Puteti vizita si pagina societatii <B>XYZ</B> cu care colaboram indeaproape: apasati aici. </TD></TR></TABLE>

Acest tabel are aceeasi lungime de 700 de pixeli (WIDTH=700), are si cadru (BORDER=1) si un spatiu de la cadru la textul din casute de 5 pixeli (CELLPADDING=5). Tabelul contine un singur rand si o singra casuta in acest rand. Casuta are fondul bleu (BGCOLOR=#CCEEEE).In interiorul casutei este un text scris cu font Verdana de dimensiune 2. Unele cuvinte din tabel sunt scrise cu bold (B).

Copiaza si acest exemplu in fisierul tau index.html deschis in Notepad (pozitioneaza-l intre tag-ul </TABLE> de jos si tag-ul </BODY> de la sfarsitul fisierului). Incarcat intr-un browser, index.html ar trebui sa arate cam asa acum:

6. Link-uri si pozitionare Un element important al oricarei pagini web il constituie link-urile catre alte pagini. Acestea pot fi link-uri externe, care fac referire catre un alt site, sau link-uri interne care fac referire catre alte pagini ale aceluiasi site. Ambele tipuri se codifica asemanator prin folosirea unui tag de tipul <A HREF=link.html>...</A> (pentru un link intern) sau <A HREF=http://www.abc.abc>...</A> pentru un link extern. Astfel codul de mai jos va afisa textul "Apasati aici pentru pagina 2" care prin apasare va incarca fisierul pag2.html: <A HREF=pag2.html>Apasati aici pentru pagina 2</A>

Codul de mai jos va afisa "Apasati aici pentru pagina XYZ SRL", text care prin apasare va incarca pagina www.xyz.xyz: <A HREF=http://www.xyz/xyz>Apasati aici pentru pagina XYZ

SRL</A>

In exemplul de mai sus poti specifica in ce mod se va incarca pagina respectiva folosind atributul TARGET: - TARGET="nume", unde nume este numele pe care vrei sa il dai unei noi ferestre unde se va incarca pagina. Poti folosi si TARGET="_blank" pentru o fereastra noua sau TARGET="_self" pentru incarcarea in aceeasi fereastra. O alta varianta este posiblitatea transmiterii unui e-mail. Astfel, codul de mai jos afiseaza "Scrie-ne!", text care prin apasare va deschide o fereastra pentru transmiterea unui mesaj la adresa office@abc.abc: <A

HREF="mailto:office@abc.abc">Scrie-ne!</A>

In acelasi mod o pagina HTML poate fi impartita in mai multe "capitole" (sectiuni), in caz ca este foarte lunga. Astfel, fiecarei sectiuni i se va asigna un nume, nume ce va putea fi utilizat in incarcarea paginii respecitve, astfel incat sa se afiseze exact sectiunea respectiva. Fie fisierul lucrare.html pe care il impartim in doua sectiuni.Codul care face acest lucru ar fi: <A ...text <A ...text NAME=unu>Sectiunea pentru NAME=doi>Sectiunea pentru sectiunea sectiunea

1</A> 1... 2</A> 2...

Apoi, daca dorim sa incarcam fisierul lucrare.html din alta pagina, dar astfel incat sa se incarce direct sectiunea 2, vom utiliza: <A HREF=lucrare.html#doi>Apasa

aici</A>

Cel mai bine vom demonstra aceste lucruri printr-un exemplu (se deschide intr-o pagina separata):

In mod similar poti afisa fisiere text (cu extensia txt) sau poti da posibilitatea vizitatorului sa salveze pe disc un alt tip de fisier (zip de exemplu): <A HREF=raport.txt>Raport</A> sau <A HREF=program.zip>Salveaza

programul</A>

Un alt element util in formatarea paginii web este tag-ul <CENTER >...</CENTER>. Acesta este utilizat pentru alinierea pe centru a unor elemente (texte, tabele imagini). Tot ce este scris intre tag-ul <CENTER> si </CENTER> va apare centrat.

In fisierul nostru deschis in Notepad vom folosi tag-ul CENTER pentru a pozitiona central elementele paginii. Astfel, vom introduce tag-ul <CENTER> imediat dupa tag-ul BODY de la inceputul fisierului (<BODY BGCOLOR="#DDFFFF" LINK="#0000AA" VLINK="#0000AA">) si vom mai introduce si </CENTER> imediat inainte de tag-ul </BODY> de la sfarsitul fisierului. Mai facem o imbunatatire fisierului index.html deschis in Notepad, prin introducerea unor link-uri. Identifica in cel de-al doilea tabel din acest fisier textul "Va stam la dispozitie si prin <B>e-mail</B>" si inlocuieste <B>email</B> cu: <B><A

HREF="mailto:info@abc.abc.ro">e-mail</A></B>

De asemenea identifica si textul "apasati aici" de la sfarsitul tabelului si inlocuieste cuvantul "aici" cu: <A HREF=http://www.xyz.xyz

TARGET="_blank">aici</A>

Fisierul nostru deschis in Notepad ar trebui sa arate acum cam asa:

Acum toate elementele tabelului (titlul si cele doua tabele) sunt pozitionate pe centru si exista link-uri pentru email si pagina XYZ. Exemplul 1: <html> <head> <title> Comutarea intre doua pagini</title> </head> <body> <h3>Pagina 1 </h3> <a href="leg_ex2.html"> Link catre pagina 2 </a> </body> </html> Exemplul 2: <html> <head>

<title> Link catre site-ul firmei Netscape</title> </head> <body> <h3>Link catre site-ul firmei Netscape </h3> <a href="http://www.netscape.com"> Netscape Corporation </a> </body> </html>

7. Ultimele retusuri

Suntem foarte aproape de a da o forma finala fisierului nostru index.html deschis in Notepad si care a servit ca exemplu pana acum. Mai intai vom introduce si tag-ul <HR>. Acesta are un rol foarte simplu si anume - de a trasa o linie orizontala pe toata latimea ferestrei. Acest tag functioneaza la fel ca si BR (adica, nu se foloseste </HR>). Tag-ul HR primeste si atributul WIDTH sub forma WIDTH=x sau WIDTH=x% care specifica lungimea liniei in pixeli sau ca procent din latimea totala a ferestrei. Exemplu: <HR

WIDTH=600>

In fisierul index.html deschis in Notepad introducem urmatoarele instructiuni intre ultimul tag </TABLE> si tag-ul </CENTER> de la sfarsitul fisierului: <BR><BR><BR><BR><BR><BR><HR> <FONT Toate Pagina realizata FACE=ARIAL drepturile in

anul

SIZE=1> rezervate. 2001</FONT>

Mai introducem si un tag <BR> intre cele doua tabele pentru a le distanta (deci intre tag-ul </TABLE> al primului tabel si tag-ul <TABLE> al celui de-al doilea tabel). In acest moment fisierul index.html este gata in aceasta varianta si ar trebui sa arate cam asa:

Vom folsi aceasta ocazie pentru a prezenta si modalitatea de includere a unor comentarii intr-o pagina HTML. Acestea trebuie incluse intre <!-si --> ca in exemplul urmator: <!-acest text nu va fi afisat in pagina

-->

Aici se incheie prima parte a ghidului. In continuare vom prezenta cateva notiuni despre imagini, cadre (frames) precum si despre graficCAP VIII - Despre imagini

Prezentarea imaginilor in pagini HTML se face folosind tag-ul <IMG SRC=nume>, unde nume este numele unui fisier gif sau jpg. Exemplu: <IMG SRC=sigla.gif>, va afisa (presupunand ca avem deja fisierul sigla.gif):

Tag-ul IMG poate primi si atributul BORDER cu formele BORDER=0 (implicit) sau BORDER=n - pentru un chenar in jurul pozei de dimensiune n pixeli. O poza intr-un chenar arata mai bine:

<IMG

SRC=sigla.gif

BORDER=1>,

va

afisa:

Se poate folosi o imagine si drept link catre o alta pagina: <A HREF="mailto:info@abc.abc"><IMG SRC=sigla.gif BORDER=0></A>, va afisa:

Cu un click pe imaginea de mai sus se va deschide o fereastra pentru compunerea unui mesaj.Se mai pot folosi imagini si drept fundal pentru pagini internet. Pentru aceasta, vom introduce atributul BACKGROUND in cadrul tag-ului <BODY> de la inceputul unui fisier: <BODY Efectul unei asemenea comenzi va fi (presupunand ca avem deja fisierul bkg.gif):

BACKGROUND=bkg.gif>

a, design-ul si continutul unei pagini web. CONTINUT EXTREN . Un lucru foarte interesant in cazul paginilor web este ca sursa acestora poate fi vazuta in mod liber oricand. Astfel, daca navighezi pe internet si descoperi o pagina interesanta, poti face click pe fereastra respectiva cu butonul din dreapta al mouse-ului si selecta View Source. Astfel, vei putea studia modul de realizare a paginii respective si invata cate ceva. Desigur, proiectarea si programarea paginilor web nu se rezuma la limbajul HTML - acesta este doar punctul de plecare. In rest? Exista multe tehnologii precum php, asp, flash, java, cgi, etc pentru internet, tehnologii cu ajutorul carora se pot realiza tot felul de programe si imbunatatiri pentru pagini web. Probabil ai vazut pe alte site-uri asemenea programe - pentru evidenta numarului de vizitatori pe site (countere), modalitati de comunicare cu vizitatorii (guestbook, forum), etc - si ti-au facut cu ochiul. Din pacate ghidul de proiectare web al verde.ro se rezuma la HTML, cel putin la acest moment. Dar exista alte modalitati de includere a unor asemenea programe pe site-ul tau: folosirea unor servicii gratuite disponibile pe internet. Spre exemplu, exista site-uri care iti ofera in mod gratuit si simplu posibilitatea de a include un counter pe site-ul tau, pentru a afla cati vizitatori intra pe site, de unde vin, pe ce pagini merg, etc. Noi folosim counter-ul furnizat de sitemeter.com. Apasa aici pentru a iti crea si tu un counter sau pentru informatii suplimentare (se deschide intr-o fereastra separata). Care este procedura? te vei inregistra cu site-ul tau pe sitemeter, vei completa o serie de formulare, iar apoi vei copia un portiune de cod in pagina ta, conform indicatiilor date. Acel cod va afisa un mic element grafic (deci, atentie unde il pozitionezi pentru a se incadra in pagina) pe care, daca faci click, intri in pagina cu informatii despre vizitatorii tai. Precum acest serviciu, exista multe: servicii gratuite pentru un guestbook ("agenda" unde vizitatorii iti pot scrie impresii), forum de discutii, etc. Un serviciu interesant este cel oferit de humanclick.com care te lasa sa iei legatura in mod direct cu vizitatorii tai, atunci cand esti on-line. Ce trebuie sa faci pentru a identifica alte

asemenea servicii? Fii atent la paginile pe care le vizitezi: aceste servicii au cate un link (care poate fi text sau o sigla) catre pagina proprie, pagina de unde te poti inscrie si tu pentru un serviciu similar. Exista si site-uri care iti ofera in mod gratuit posibilitatea de a adauga continut pe site-ul tau: informatii despre timpul probabil, stiri, date financiare, astrologie, etc. Asemenea servicii au aparut si in Romana, trebuie doar cautate cu atentie. Incearca, insa, sa nu abuzezi de aceste elemente furnizate de alte site-uri: in definitiv, incerci sa faci singur un site. 9 Despre cadre (frames) Poti imparti fereastra in mai multe zone sau cadre (numite frames). Acest lucru este foarte util in mai multe situatii. Spre exemplu, poti imparti pagina pe verticala in doua zone: una mai mica unde poti avea un meniu cu mai multe optiuni, si una mai mare unde se incarca informatiile:

Exemplul de mai sus cuprinde mai multe fisiere html: ex11.html si ex11b.html - fisierele care indica modul de impartire a ferestrei in doua ecrane, fisierul ex11_idx.html - care reprezinta frame-ul din stanga cu meniul si fisierele ex11_dat.html si ex11b_dat.html cu frame-ul din dreapta continand informatia efectiva. Fisierul ex11.html arata cam asa: <HTML> <FRAMESET <FRAME <FRAME </FRAMESET> </HTML> COLS="120,*" FRAMEBORDER="NO" BORDER="0" NAME="index" NAME="main page"

FRAMESPACING="0"> SRC=ex11_idx.html> SRC=ex11_dat.html>

Acesta declara un set de doua frame-uri (FRAMESET) organizate pe verticala, primul frame de 120 de pixeli latime si al doilea de restul (COLS="120,*"), fara cadru (FRAMEBORDER="NO") si fara spatiu intre ele (FRAMESPACING="0"). Frame-ul din stanga se va numi index si va afisa fisierul x11_dat.html (cel cu meniul) iar cel din dreapta se va numi main page si va afisa fisierul ex11_dat.html (cel cu informatiile despre ABC SRL). Fisierul ex11b.html este identic cu cel de sus cu exceptia faptului ca in frame-ul din dreapta afiseaza fisierul ex11b_dat.html cu informatii despre XYZ SRL. Fisierul ex11_idx.html ce contine meniul va arata cam asa:

<HTML><BODY BGCOLOR=#333333 LINK=#FFFFFF VLINK=#FFFFFF TEXT=#FFFFFF> <BR><FONT FACE=VERDANA,ARIAL SIZE=2><B> <A HREF=ex11.html TARGET="_top">ABC SRL></A><BR><BR> <A HREF=ex11b.html TARGET="_top">XYZ SRL></A></B></FONT> </BODY></HTML> Acest fisier contine meniul din partea stanga cu doua link-uri ce afiseaza paginile de prezentare ale ABC SRL (ex11.html) sau XYZ SRL (ex11b.html). Un exemplu de impartire a ferestrei in doua cadre pe orizontala arata astfel:

Fisierul

care

organizeaza ROWS="50%,*"

cele

doua

cadre

se

codifica

astfel:

<HTML> <FRAMESET

FRAMEBORDER="NO"

BORDER="1"

FRAMESPACING="0">

<FRAME <FRAME </FRAMESET> </HTML>

NAME="index" NAME="main

page"

SRC=ex11_dat.html> SRC=ex11b_dat.html>

Noteaza utilizarea atributului ROWS="50%,*

10- Proprietati de stil (CSS)


Unul dintre cele mai importante aspecte n web-design este, n momentul de fata, folosirea modelelor de stiluri. Definirea proprietatilor elementelor care apar intr-un document HTML cu ajutorul modelelor de stiluri ofera o mult mai mare flexibilitate creatorilor de pagini Web n a stabili aspectul final pe care pagina respectiva o va avea n fereastra programului de navigare Web. Modelele de stiluri nu reprezinta n mod practic o parte a limbajului HTML ci se prezinta ca limbaj de sine statator. Exista diferite limbaje de modele de stiluri, cel mai cunoscut i utilizat fiind Modelele de Stiluri n Cascada (Cascading Style Sheets - CSS) . Pentru a stabili limbajul implicit de modele de stiluri pentru un document se foloseste elementul META n antetul documentului. De exemplu, pentru a desemna limbajul implicit ca fiind CSS se foloseste urmatoarea sintaxa: <META http-equiv="Content-Style-Type" content="text/css"> Oricum, n caz ca n antetul sau n header-ul HTTP al documentului nu se specifica un limbaj de modele de stiluri aplicat, limbajul implicit se considera a fi CSS. Prezentarea proprietatilor de stil se poate face n 3 moduri: la nivel de element, prin folosirea atributului style la nivel de document, prin folosirea elementului STYLE definit n antetul documentului prin creearea unui fisier de stiluri cu extensia "css" care poate fi aplicat mai multor documente HTML. Gruparea unuia sau mai multor modele de stil intr-un fisier extern sau n antetul unui document HTML formeaza o asa numita foaie de stil 10.1 Folosirea atributului style Aplicarea proprietatilor de stil la nivelul fiecarui element n parte se realizeaza cu ajutorul atributului style. Valoarea acestui atribut este formata dintr-o multime de perechi de forma proprietate:valoare separate prin caracterul ";". Exemplu: <span style="background-color: Aqua; font-size: large; cursor: hand;"> Text foarte important</span> Trebuie stiut ca proprietatile de stil se mostenesc prin incluziune, adica o proprietate aplicata unui element "parinte" este valabila i pentru elementele pe care acesta le include, cu exceptia cazurilor n care elementele continute nu definesc ele insele valori pentru aceasta proprietate. Pentru a specifica valori ale atributelor care reprezinta URL-uri ale unor fisiere se foloseste sintaxa url(cale spre fisier), unde "cale spre fisier" reprezinta URL-ul relativ sau absolut al fisierului referit. Exemplu: <body style = "background-image: url(..\Imagini\fond2.gif);"> 10.2 Inglobarea foilor de stil n antetul documentului

Cu ajutorul elementului STYLE amplasat n sectiunea de antet a documentului se pot defini modele de stiluri aplicabile unuia sau mai multor elemente din cadrul acelui document. Un model de stil se poate aplica:

unui singur element din document tuturor elementelor de acelasi tip ale documentului unei submultimi de elemente ale documentului care pot fi de acelasi tip sau de tipuri diferite Pentru a aplica un model de stil unui singur element se foloseste atributul id de identificare a elementului n cadrul documentului. Exemplu: <HEAD> <STYLE > #id1{font-size:18px ; text-align:center} </STYLE> </HEAD> <BODY> <h1 id = "id1" >PARAGRAFUL 2 </h1> </BODY> Deoarece valoarea atributului id este unica n interiorul unui document stilul se aplica cel mult unui singur element din cadrul documentului n al carui antet este definit modelul de stil. Pentru a defini un model de stil ce urmeaza a se aplica tuturor elementelor de acelasi tip se rescriu proprietatile care urmeaza a defini caracteristicile tipulului respectiv. De exemplu, daca dorim ca toate elementele de antet h1 sa fie scrise cu culoare rosie pe fond galben se foloseste sintaxa: <STYLE> H1{ background:Yellow ;color:Red} </STYLE> Pentru a aplica un model de stil mai multor elemente fara a fi nevoie ca acele elemente sa fie de acelasi tip se definesc clase de stiluri aplicabile apoi unui element cu ajutorul atributului class, atribut pe care il au toate elementele care compun corpul unui document HTML. O clasa de stil poate fi aplicata obiectelor de acelasi tip sau poate fi aplicata unor obiecte de tipuri diferite, lucrul acesta depinzand de modul de definire al clasei. De exemplu, pentru a defini un stil aplicabil anumitor elemente antet H1, dar nu n mod obligatoriu tuturor elementelor H1 se foloseste formularea: <STYLE> H1.special{ background:Yellow ;color:Red} </STYLE> <BODY> <h1 class="special" >PARAGRAFUL 2 </h1> <h1>PARAGRAFUL 3 </h1> </BODY> Astfel, elementul h1 corespunzator paragrafului 2 va avea proprietatile definite de clasa de stil "special", pe cand elementul h1 corespunzator paragrafului 3 nu va fi afectat de declaratia de stil din antet. Pentru a defini o clasa de stil aplicabila unor tipuri diferite de elemente se defineste clasa de stil fara a specifica un anume tip de element HTML: <STYLE> .special{ background:Yellow ;color:Red} </STYLE> <BODY>

<H1 class="special" >PARAGRAFUL 2 </H1> <P>Asa cum se specifica n <SPAN class = "special">paragraful 2 </SPAN> ... </P> </BODY> Aceeasi clasa de stil este aplicata acum pentru a formata aspectul unui antet de tipul H1 i a unui bloc de text marcat cu elementul SPAN. 10.3 Referirea foilor de stil externe Modalitatea care ofera creatorilor de documente HTML cea mai mare flexibilitate n crearea i apoi intretinerea unuia sau mai multor documente legate intre ele i eventual prezentate n cadrul aceluiasi "site" este definirea unor modele de stiluri n fisiere de sine statatoare - asa numitele Foi de Stil Externe - i referirea lor din cadrul oricarui document care necesita acest lucru. In acest fel, pentru a modifica aspectul unui document fara a modifica continutul acestia, e suficient sa se modifice fisierul foii de stil externe, modificarea afectand automat toate documentele care fac referire la foaia de stil respectiva. Referirea unei foi de stil se face cu ajutorul elementului LINK din antetul documentului. Atributul href al elementului va reprezenta URL-ul foii de stil externe, iar atributul rel va lua valoarea "stylesheet". Optional mai pot fi prezente i atributul type pentru a desemna limbajul de stil folosit, sau title pentru a identifica foaia de stil Exemplu: <LINK rel="stylesheet" href="StilMetal.css" type = "text/css" title ="Metalica"> Trebuie stiut ca folosirea foilor de stil externe mareste timpul necesar incarcarii documentului n fereastra programului de navigare Web, metoda cea mai putin pretentioasa din acest punct de vedere fiind definirea stilurilor la nivelul fiecarui element. 10.4 Concurenta stilurilor n interiorul documentului In cazul n care un element cade n incidenta mai multor modele de stil definite n interiorul sau n exteriorul documentului stilul final va fi format dintr-o suma a proprietatilor care apar n fiecare dintre modelele de stil respective. In cazul n care aceeasi proprietate ia valori diferite n modelele de stil care se aplica aceluiasi element valoarea finala va fi data dupa urmatoarele reguli: valorile din modelele de stil definite prin elementul STYLE au prioritate fata de valorile prezente n modelele de stil externe i sunt, la randul lor, inlocuite de valorile aparute n stilurile definite la nivel de element. daca aceeasi proprietate apare n doua sau mai multe modele de stil inglobate n antetul documentului atunci modelul de stil definit prin identificator are prioritate fata de clasa de stil, care, la randul ei, are prioritate fata de stilul definit pe tipuri de elemente. Exemplu: <STYLE> .special{ background:Yellow } H1{ background:Red} #id1{ background:Blue} </STYLE> <BODY> <H1 class="special" id = "id1" >PARAGRAFUL 2

</H1> </BODY>

In exemplul de mai sus toate cele trei modele de stil sunt aplicabile elementului H1 din document, dar valoarea finala a proprietatii "background" va fi "Blue". 10.5 Recunoasterea proprietatilor de stil Deoarece firmele producatoare ale programelor de explorare Web i-au luat libertatea de a implementa dupa cum au crezut ele de cuviinta limbajele de modele de stil, adaugand fiecare dintre ele propriile proprietati de stil, este foarte dificil de prezentat lista tuturor proprietatilor de stil pe care le puteti folosi n documentele pe care le veti creea. Pentru o documentatie completa asupra acestui subiect vizitati site-urile oficiale ale celor doua companii producatoare.In cazul n care vreti sa va asigurati ca documentul dumneavoastra va putea fi interpretat fara erori de catre variantele mai vechi ale browserelor sau de catre browsere care nu recunosc deloc modelele de stil, intercalati definitiile stilurilor intre marcajele de comentariu: <STYLE type="text/css"> <!-H1 { color: blue } P { color: green} --> </STYLE> 10.6 Proprietati de stil pentru fundal Pentru a specifica unele caracteristici care privesc fundalul unor elemente se folosesc proprietatile: BACKGROUND-COLOR - pentru a stabili culoarea fondului pasajului de text respectiv BACKGROUND-IMAGE - pentru a stabili imaginea care va fi afisata n spatele textului BACKGROUND-POSITION - pentru a specifica pozitia imaginii de fundal cu ajutorul a doua valori, una specificand asezarea pe verticala, iar cea de-a doua asezarea pe orizontala BACKGROUND-REPEAT - determina modul n care imaginea din fundal va fi multiplicata n cazul n care nu acopera tot spatiul elementului. Optiunile posibile sunt: REPEAT NO-REPEAT REPEAT-X REPEAT-Y BACKGROUND-ATTACHMENT - determina modul de dispunere a fundalului n momentul n care continutul elementului este derulat pe orizontala sau verticala. Optiunile posibile sunt: SCROLL - imaginea din fundal se deplaseaza odata cu continutul elementului FIXED - imaginea din fundal ramane fixa atunci cand continutul elementului se deplaseaza 10.7 Proprietati de stil ale textelor i blocurilor de text Pentru a specifica proprietatile legate de prezentarea textelor n cadrul atributului style se folosesc urmatoarele proprietati de stil: FONT-FAMILY - pentru alegerea corpului de litera. FONT-SYZE - pentru alegerea dimensiunii fontului. Valorile acestei proprietati pot fi exprimate n pixeli, procentual, sau ca ajutorul catorva valori predefinite: XX-SMALL X-SMALL SMALL MEDIUM LARGE

X-LARGE XX-LARGE

de

FONT-STYLE pentru alegerea stilului de font cu variantele NORMAL ITALIC FONT-weightpentru specificarea grosimii fontului. Valorile atribuite pot fi: NORMAL BOLD DIRECTION pentru stabilirea directiei de scriere, avand ca valori posibile LTR pentru scrierea de la stanga la dreapta RTL pentru scrierea de la dreapta la stanga TEXT-ALIGN pentru alinierea pe orizontala a textului TEXT-INDENT pentru indentarea textului fata de marginea stanga sau deapta (n functie de directia

scriere) a elementului "container" care contine textul TEXT-TRANSFORM pentru realizarea optiunilor litere mari-litere mici asupra textului. Valorile posibile sunt: CAPITALIZE pentru a scrie primul caracter al fiecarui cuvant cu litera mare LOWERCASE pentru a folosi n scriere doar litere mici UPPERCASE pentru a folosi n scriere doar litere mari NONE pentru a folosi modalitatea implicita (normala) de scriere TEXT-DECORATION pentru a specifica unele efecte simple aplicate textului. Astfel, puteti folosi: UNDERLINE pentru a sublinia textul LINE-THROUGH pentru a taia textul OVERLINE pentru a trasa o linie deasupra textului ( neimplementat n varianta Netscape 4.0) NONE pentru anularea acestor efecte COLOR pentru a stabili culoarea textului DISPLAY pentru a alege modul de afisare a portiunii de text astfel: NONE daca se vrea ca textul sa nu fie afisat BLOCK pentru a oferi textul sub forma de "bloc de text". In felul acesta browser-ul va trece la linie noua inainte i dupa afisarea continutului blocului. LIST-ITEM pentru a prezenta continutul sub forma de element al unei liste. INLINE pentru afisa textul fara a trece la linie noua, asezarea sa n interiorul elementului "container" fiind decisa doar de dimensiunea continutului sau (neimplementat n versiunea Netscape 4.7). 10.8 Proprietati de stil aplicabile listelor In general, proprietatile de stil pentru formatarea textului raman valabile i pentru liste, cu conditia de bun simt ca elementele acestor liste sa fie de tip text. In plus exista cateva proprietati de stil specifice listelor i care se refera indeosebi la semnul de marcare al itemilor unei liste: LIST-STYLE-TYPE pentru a selecta tipul marcajului pentru item dintre cele prestabilite: DISC CIRCLE SQUARE DECIMAL LOWER-ROMAN UPPER-ROMAN LOWER-ALPHA UPPER-ALPHA NONE LIST-STYLE-POSITION pentru a stabili modul de aliniere al marcajului de item n cazul n care textul cuprins n item ocupa doua sau mai multe randuri: OUTSIDE pentru ca marcajul sa ramana n afara blocului de text (valoare implicita) INSIDE pentru ca marcajul sa fie cuprins n interiorul blocului de text LIST-STYLE-IMAGE pentru a stabili imaginea (iconita) aplicata marcajului de item

Aceste proprietati sunt aplicabile listelor ordonate i neordonate. Daca o lista are specificate atat atributul Type ct i proprietatea de stil list-style-type, marcajul de item va fi decis de proprietatea de stil. Atributele i proprietatile de stil pot fi aplicate intregii liste sau doar unor itemi ai listei, n functie de doleantele realizatorului documentului 10.9 Proprietati de stil pentru bordurile obiectelor Desi par numeroase, proprietatile de stil care vizeaza bordurile obiectelor se pot retine usor deoarece ele stabilesc doar trei atribute care se aplica fie tuturor bordurilor, fie uneia dintre cele 4 borduri posibile. Iata aceste proprietati: BORDER-COLOR - determina culoarea bordurilor obiectului. Numarul de valori i semnificatia lor sunt sunt analoage celor prezentate la atributul "margin" BORDER-STYLE - determina stilul liniei de bordura. Acelasi stil se va aplica celor 4 borduri ale obiectului. Optiunile posibile sunt: NONE - nu se afieaza bordura DOTTED - bordura se afiseaza cu linie punctata pe platforme Machintosh i cu linie continua pe platforma Windows sau Unix DASHED - bordura se afiseaza cu linie intrerupta pe Machintosh i cu linie continua pe platforma Windows sau Unix SOLID - bordura se afiseaza cu linie continua DOUBLE - bordura se afiseaza cu linie dubla Pentru a oferi un aspect tridimensional bordurilor folositi valorile: GROOVE RIDGE INSET OUTSET BORDER-WIDTH stabileste grosimea liniei de bordura. Numarul i semnificatia valorilor este analoaga celor prezentate la atributul "margin". BORDER - stabileste caracteristicile bordurii printr-un numar de 3 valori separate prin spatiu, valori specificand, n ordine, dimensiunea, stilul i culoarea bordurii. Exemplu: <H1 style="border:5 solid Blue"> Aceleasi proprietati se pot specifica fiecarei borduri n parte folosindu-va de : BORDER-TOP BORDER-RIGHT BORDER-BOTTOM BORDER-LEFT

10.10 Proprietati de stil pentru pozitionare Pozitionarea elementelor n cadrul documentului este una dintre sarcinile cele mai delicate ale unui creator de pagini Web care doreste sa ofere un aspect atragator documentului creat. Proprietatile de stil permit multa flexibilitate n aceasta privinta. Iata Cateva dintre acestea:

POSITION - determina modul de pozitionare al elementului. Optiunile posibile sunt: ABSOLUTE - elementul este pozitionat relativ la obiectul container care il contine RELATIVE - elementul este pozitionat relativ la pozitia pe care ar trebui n mod normal sa o ocupe n document

TOP - determina pozitia elementului n functie de marginea de sus a elementului relativ la care se face pozitionarea BOTTOM - determina pozitia elementului n functie de marginea de jos a elementului relativ la care se face pozitionarea LEFT - determina pozitia elementului n functie de marginea din stanga a elementului relativ la care se face pozitionarea RIGHT - determina pozitia elementului n functie de marginea din dreapta a elementului relativ la care se face pozitionarea HEIGHT - determina dimensiunea pe verticala a obiectului WIDTH - determina dimensiunea pe orizontala a obiectului CLIP - determina afisarea doar a unei portiuni "decupata" din elementul respectiv. Dreptunghiul decupat se exprima sub forma rect(sus,dreapta,jos,stanga), unde fiecare dintre cele 4 valori poate fi inlocuita cu valoarea auto, care lasa marginea respectiva nedecupata. Formularea clip:auto afisaza obiectul nedecupat. Aceasta proprietate este aplicabila doar obiectelor care au atributul position:absolute. VISIBILITY - determina afisarea sau neafisarea elementului n document. Valorile posibile sunt: INHERIT - obiectul isi mosteneste proprietatea de la elementul "parinte" VISIBLE - obiectul este vizibil HIDDEN - obiectul nu este vizibil Z-INDEX - determina modul de suprapunere a obiectelor care au atributul position:absolute i care impart o aceeasi suprafata din document. Obiectele avand valoarea z-index mai mare vor fi asezate "deasupra" obiectelor cu z-index mai mic. Doua obiecte care se suprapun i au aceeasi valoarea pentru z-index vor fi asezate n ordinea n care apar n document. CLEAR - stabileste daca un bloc de text admite sau nu obiecte n stanga sau n dreapta sa. Optiunile posibile sunt: NONE - sunt permise obiecte n stanga i n dreapta LEFT - textul se deplaseaza n jos pozitionandu-se sub un eventaual obiect situat n stanga sa RIGHT - textul se deplaseaza n jos pozitionandu-se sub un eventual obiect situat n dreapta sa BOTH - textul se deplaseaza n jos pozitionandu-se astfel incat sa nu existe obiecte nici n stanga i nici n dreapta sa MARGIN - determina dimensiunile pe care le va avea marginile unui obiect. Pot fi specificate: 1. singura valoare care va fi aplicata tuturor celor 4 margini 2. doua valori - prima pentru marginile de sus i de jos, iar a doua pentru marginile din stanga i dreapta 3. trei valori - prima pentru marginea de sus, a doua pentru marginile din stanga i dreapta i a treia pentru marginea de jos 4. patru valori - n ordine pentru marginile de sus, dreapta, jos, stanga MARGIN- TOP MARGIN- RIGHT MARGIN- BOTTOM

MARGIN- RIGHT PADDING - determina spatiul lasat intre marginile (eventual bordura) unui obiect i continutul sau. Numarul i semnificatia valorilor specificate sunt identice cu cele prezentate la proprietatea "margin" PADDING-TOP PADDING-RIGHT PADDING-BOTTOM PADDING-LEFT

EXEMPLU: <html> <head> <title>Proprietati de stil pentru pozitionarea elementelor</title> </head> <body style="background-image: url(../Imagini/fond.jpg);"> <div style = "position:absolute"> <img src="../Imagini/toamna.jpg" width="100" height="100" border="0" alt=""> <div style="position: absolute; left: 10; top: 10; width:200;font-size: large; color:blue;">Acest pasaj de text se suprapune imaginii </div> <div style="position: absolute; left: 300px; top:100; width=400; height=100; background-color: #CC99FF;color:red; font-size: x-large; text-align:center"> Pozitionarea straturilor... </div> <div border="0" cellspacing="2" cellpadding="2" style="position: absolute; left:250; top:150; width=400; height=80; background-color: blue; color:red; fontsize: x-large; "> cam asta ar fi.. </div> <p style="position:absolute; background-color: #00008B; color: yellow; font-size: 24;top:300;left:0"> Toate cuvintele par la locul lor...Nici mai <span style = "position:relative;top = 10;color:red">sus,</span> nici mai <span style = "position:relative;top = +10;color:red">jos</span> </div> <div style = "position:absolute;top:400"> <hr style = "width = 500;color:red"> <h2 style = "color:blue;">Suprapunerea i decuparea imaginilor:</h2> <img src="../Imagini/baiat1.jpg" width="100" height="100" border="0" style="position: absolute; top: 80;z-index:2" alt=""> <img src="../Imagini/baiat2.jpg" width="100" height="100" border="0" style="position: absolute; top: 140;left:60;z-index:1" alt=""> <img src="../Imagini/fata1.jpg" width="100" height="100" border="0" style="position: absolute; top: 100;left:150;z-index:0" alt=""> <img src="../Imagini/baiat1.jpg" width="100" height="100" border="0" style="position: absolute; top: 80; left:300; clip: rect(0,60,60,0);" alt=""> <img src="../Imagini/baiat1.jpg" width="100" height="100" border="0" style="position: absolute; top: 80;left:300;clip:rect(60,100,100,60)" alt=""> </div> <div style = "position:absolute;top:700"> <hr style = "width = 500;color:red"> <h2 style = "color:blue">Borduri i chenare</h2> <table style="position:absolute;left:300;top:50"> <tr> <td style="background-color: Purple; color: #EEE8AA; border-color: Blue; borderwidth: 3px; border-style: solid;width:100;height:100;text-align:center">Chenar simplu</td> </tr> </table>

<img src="../Imagini/clovn.jpg" width="100" height="100" border="0" alt="Clown" style="position:absolute;left:500;top:50;border-style: dotted double; bordercolor: Blue #8A2BE2;border-width:5"> </div> </body> </html>

11 Grafica web Dupa ce in capitolele precendente am invatat notiunile HTML de baza, vom scrie cateva cuvinte si despre grafica web. Exista mai multe posibilitati in aceasta directie, cea mai simpla fiind utilizarea unor elemente grafice (poze, desene) din colectii de grafica specializate, colectii ce se pot gasi fie pe internet, fie impreuna cu programe precum Corel Draw, Photo Draw, etc. Desigur, exista si o posibilitate mai simpla de atat - copierea unor elemente grafice din alte pagini web. Acest lucru nu este recomandat insa, in primul rand datorita faptului ca elementele grafice respective vor fi rupte din context. In plus, pentru majoritatea exista drepturi de autor, astfel incat nu pot fi utilizate fara permisiune, in mod normal. Cel mai bun lucru de facut in aceasta directie este utilizarea unor elemente grafice ca sursa de pornire si prelucrarea acestora intr-un program specializat de tipul Adobe Photoshop. Acesta este un program excelent pentru grafica web ce permite diverse prelucrari ale pozelor si desenelor precum si crearea de la zero a unor elemente de grafica pentru pagina ta. Vom prezenta o serie de operatiuni de baza ce se pot aplica unei poze incarcate in Photoshop. Mai intai, mergi in Image/Mode si selecteaza RGB Color, daca acest mod nu este deja selectat. Sa incepem: modifcarea dimensiunilor unei poze prin marire/micsorare - Image/Image Size, modificarea dimensiunilor prin taiere/completare - Image/Canvas Size, rotire imagine Image/Rotate Canvas. Photoshop prezinta si o serie de unelte pentru completari/retusari ale imaginii (pencil, eraser, blur, paint bucket, etc). De asemenea, vei dori sa utilizezi si diversele filtre disponibile in meniul Filter - unele dintre ele sunt foarte reusite (nu uita sa setezi modul RGB pentru imagine inainte de folosirea filtrelor). O operatiune destul de simpla in Photoshop este crearea de texte pentru butoane, titluri, etc. Deschide un fisier nou (File/New) si selecteaza unealta Text din toolbar (cea cu un "T"). Fa click oriunde in imaginea ta - se va deschide o fereastra noua unde vei putea scrie textul dorit si stabili parametrii acestuia (font, dimensiune, culoare, etc). Pentru efecte aplicate textelor deschide fereastra Layers (Window/Show Layers, daca aceasta nu exista deja pe ecran), fa click cu butonul din dreapta pe Layer-ul (nivelul) care contine textul scris de tine, selecteaza Effects si testeaza diversele efecte disponibile. La sfarsit, selecteaza din Toolbar unealta din stanga sus (in forma de patrat cu linii punctate), incadreaza textul scris de tine cu ajutorul acesteia si mergi la Image/Crop pentru a dimensiunea in mod exact fisierul:

Dupa ce ai terminat cu prelucrarile, salveaza fisierul tau in formatul gif (File/Export/Gif 89A Export) sau jpg (File/Save a Copy). Fisierele gif au o calitate mai buna, dar dimensiuni mai mari; fisierele jpg sunt mai mici ca dimensiune, dar de o calitate mai slaba (nu mereu, insa). De regula, pe internet se folosesc fisiere jpg, dar noi recomandam fisiere gif pentru elementele de dimensiuni reduse, pentru o calitate mai buna. Desigur, Photoshop prezinta mult mai multe facilitati si optiuni. Ca sa nu mai vorbim de alte programe de prelucrare grafica sunt destule. Un alt aspect ce trebuie precizat in legatura cu grafica web este transparenta. Un element grafic (precum textul "verde.ro" de mai sus) are un fond de anumita culoare (in cazul de mai sus alb). In situatia in care avem pe pagina internet un fundal de o alta culoare sau un fundal reprezentand o poza, atunci textul nostru nu mai arata asa bine. In acest caz vom folosi un fond transparent:

36

In Photoshop, poti crea o imagine cu fond transparent selectand Transparent in campul Contents din fereastra New File (File/New). Poate ai vazut pe alte pagini internet mici animatii si te-ai intrebat cum sunt realizate. Acestea sunt de fapt fisiere gif animate create cu aplicatii specializate. De regula, vei avea pregatite toate imaginile din care vrei sa creezi animatia si le vei introduce intr-o asemenea aplicatie. In fisierul HTML nu vei scrie nimic special pentru gif-uri animate; acestea vor fi decodificate de catre browser din tag-ul <IMG SRC=nume.gif>." pentru impartirea pe orizontala, in doua frame-uri egale.

3.LIMBAJUL PHP

Inceputurile PHP PHP (PHP: Hypertext Prepocessor), cunoscut n versiunile mai vechi i sub numele de PHP/FI (Personal Homepage/Form Interpreter), iniial a fost gndit a fi o simpl aplicaie CGI pentru interpretarea formularelor definte prin HTML i procesate de un program scris ntr-un limbaj Perl, script shell, executat pe server. n cazul interfeei CGI era necesar permisiunea de a rula programe pe server, ceea ce ducea la lacune n securitate i n plus la disocierea de documentul HTML a programului care procesa datele. PHP (n versiunea curent PHP 4.0) reprezint un pachet puternic care ofer un limbaj de programare accesibil din cadrul fiierelor HTML, limbaj asemntor cu Perl sau C, plus suport pentru manipularea bazelor de date ntr-un dialect SQL (dBase, Informix, MySQL, mSQL, Oracle, PostgreSQL, Solid, Sybase, ODBC etc.) i acces la sisteme hipermedia precum Hyperwave. De asemeni, PHP suport incrcarea fiierelor de pe calculatorul client: upload (standard propus de E. Nebel i L. Masinter de la Xerox, descris n RFC 1867) i ofer suport pentru cookies (mecanism de stocare a datelor n navigatorul client pentru identificarea utilizatorilor, propus de Netscape). Aceast aplicaie este disponibil gratuit pe Internet, pentru medii Unix i mai nou pentru medii Windows (inclusiv sursele), integrndu-se n popularul sever Apache. Istoria PHP-ului ncepe la sfritul anului 1994, cnd Rasmus Lerdorf dezvolt prima versiune, ca proiect personal. PHP-ul este fcut public n debutul anului 1995 sub denumirea de Personal Home Page Tools, fiind considerat un analizor simplist care interpreta cteva macrouri ce puteau fi incluse n cadrul documentelor HTML, permind contorizarea accesului la paginile Web sau accesarea unei cari de oaspei (guestbook). Analizorul a fost rescris la mijlocul aceluiai an i denumit PHP/FI 2.0, unde FI era o 37

alta aplicaie scris de Rasmus Lenford, un interpreter de formulare HTML. A fost adugat i suportul pentru bazele de date mSQL i astfel PHP/FI a nceput s aib succes, fiind disponibil gratuit pe Web. Se estimeaz c la sfritul lui 1996 cel puin 15 mii de site-uri Web utilizau PHP/FI, iar n anul 1997 numrul acestora era de 50 de mii. Programatorii Zeev Suraski i Andi Gutmans rescriu analizorul PHP i noua aplicaie formeaz nucleul versiunii PHP 3.0 care include o parte din vechile surse PHP/FI 2.0. Relativ recent, la nceputul anului 2000, a fost facut public versiunea PHP 4.0, utiliznd puternicul motor de scriptare Zend i oferind suport nu numai pentru servrul Apache ci i pentru alte servere Web. De asemeni, PHP 4.0 ofer posibilitatea accesrii documentelor XML via DOM. Se estimeaz c numrul site-urilor care folosesc n prezent PHP este de peste un milion. Deja, pe Web, exista o multitudine de aplicaii i utilitare concepute n PHP, care se regsesc grupate i n aa-numitul PEAR (PHP Extension and Add-on Repository). Ce este PHP? PHP este un limbaj de script care funcioneaz alturi de un server Web. Exemplul 1.1.1 (exemplu introductiv):
<html> <head> <title>Exemple</title> </head> <body> <?php echo "Salut, eu sunt un script PHP!"; ?> </body> </html>

Este de notat diferena cu alte limbaje script CGI scrise n limbaje precum Perl sau C: n loc de a scrie un program cu o multitudine de linii de comanda afiate n final ntr-o pagin HTML, vei scrie o pagin HTML cu codul inclus pentru a realiza o aciune precis (n cazul nostru se va afia un text). Codul PHP este inclus ntre tag-urile speciale de nceput i de sfrit care permit utilizatorului s treac din "modul HTML" n "modul PHP". Fa de alte limbaje script, precum Javascript, la PHP codul se execut pe server. Dac pe serverul Web se afl un script similar, clientul nu va primi dect rezultatul execuiei scriptului, fr a avea nici o posibilitate de acces la codul care a produs rezultatul. V putei configura serverul de Web s prelucreze (analizeze) toate fiierele HTML ca fiiere PHP. Astfel nu exist nici un mijloc de a distinge paginile care sunt produse dinamic de paginile statice.

Ce poate face PHP?


Limbajul PHP posed aceleai funcii ca alte limbaje permind s se scrie scripturi CGI, s colecteze date i s genereze dinamic pagini web sau s trimit i s primeasc cookies. Marea calitate i cel mai mare avantaj al limbajului PHP este suportul cu un numr mare de baze de date. A realiza o pagin web dinamic cu o baza de date este extrem de simplu. Urmtoarele baze de date sunt suportate de ctre PHP: Adabas D dBase Empress FilePro IBM DB2 InterBase FrontBase mSQL PostgreSQL Sesam Solid Velocis Unix dbm 38

Direct MS-SQL Sybase ODBC

Hyperwave MySQL

Informix Ingres

Oracle Ovrimos

Limbajul PHP are deasemenea suport pentru diverse servicii server utiliznd protocoale precum IMAP, SNMP, NNTP, POP3 i HTTP.

.2.2 Instalarea pe sistemele Windows 95/98/NT


Acest gid de instalare v va ajuta s instalai i s configurai PHP pe serverele web ce ruleaz pe sistemele Windows 9x/NT. Acest gid afer suport pentru:

Personal Web Server Internet Information Server 3 sau 4 Apache 1.3.x Omni HTTPd 2.0b1

Principalele etape n instalare


Urmtoarele etape trebuie parcurse la orice instalare, nainte de instruciunile specifice serverului:

Dezarhivai fiierele din distribuie ntr-un director pe care l dorii, de exemplu "c:\php"; Copiai fiierul "php.ini-dist" m directorul "%windows%" i redenumi7i-l la "php.ini". Directorul "%windows%" este de obicei: c:\windows pentru Windows 95/98 - c:\winnt sau c:\winnt40 pentru serverele NT Editai fiierul "php.ini":
o

Modificai setarea 'extension_dir' pentru a indica directorul n care a fost instalat PHP, sau directorul unde se afl fiierele "php_*.dll", de exemplu "c:\php"; Dac folosii Omni Httpd, srii peste pasul urmtor. Setai 'doc_root' astfel nct s indice documentul root ('document_root') al serverului web, de exemplu c:\apache\htdocs sau c:\webroot; Alegei modulele care vrei s fie nccate atunci cnd porne PHP-ul. Putei decomenta liniile 'extension=php_*.dll' pentru a ncrca aceste module. Unele module necesit ca unele librrii suplimentare s fie instalate pe sistemul dumneavoastr pentru a funciona corespunztor. PHP FAQ conine mai multe informaii despre locul de unde putei obine librriile necesare. Deasemenea, putei ncrca dinamic module n scriptul dumneavoastr folosind dl("php_*.dll"); Pe PWS i IIS, putei seta browscap.ini s indice 'c:\windows\system\inetsrv\browscap.ini' (n Windows 95/98) i 'c:\winnt\system32\inetsrv\browscap.ini' (pe serverele NT). 39

Fiierele DLL pentru extensiile PHP sunt prefixate cu 'php_'. Aceasta previne confuzia ntre extensiile PHP i librriile necesare.

Windows 95/98/NT i PWS/IIS 3


Modul de configurare recomandat pentru aceste servere este utilizarea fiierului INF inclus n distribuie (php_iis_reg.inf). Putei edita acest fiier pentru a v asigura c extensiile i directorul de instalare al PHP corespund configuraiei dumneavoastr. Putei urma etapele de mai jos pentru a face acest lucru. Observaie: aceste etape implic lucrul direct cu regitrii Windows. O eroare provocat aici poate aduce sistemul ntr-o stare instabil. V recomandm s facei mai nti o copie a regitrilor. Dezvoltatorii de PHP nu vor fi responsabili dac vei distruge regitrii.

Rulai regedit; Mergei la HKEY_LOCAL_MACHINE /Parameters /ScriptMap; Din meniul Edit selectai New->String Value; Introducei extensia pe care dorii s o folosii pentru scripturile php, de exemplu .php; Dai dublu-click pe aceast valoare i introducei calea spre php.exe n cmpul "Value data" (de exemplu c:\php\php.exe %s %s). '%s %s' este foarte important, PHP nu va funciona corect far el; Repetai aceti pai pentru fiecare extensie pe care dorii s o asociai cu scripturile PHP; n continuare mergei la HKEY_CLASSES_ROOT; Din meniul Edit selectai New->Key; Denumii cheia cu numele extensie pe care l-ai introdus n secinuea precedent, de exemplu .php; Selectai noua cheie n panelul din partea dreapt, dai dublu-click pe "Default value" i introducei phpfile; Repetai ultimul pas pentru fiecare extensie introdus n seciunea precedent; n continuare creai o nou cheie n HKEY_CLASSES_ROOT i numii-o phpfile; Selectai noua cheie (phpfile) n panelul din partea dreapt, dai dublu-click pe "Default value" i introducei PHP Script; Dai click dreapta pe cheia phpfile i selectai New->Key, pe care o vei numi Shell; Dai click dreapta pe cheia Shell, selectai New->Key i denumii-o open; Dai click dreapta pe cheia open, selectai New->Key i denumii-o command; Selectai noua cheie (command) n panelul din partea dreapt, dai dublu-click pe "Default value" i introducei calea spre php.exe, de exemplu c:\php\php.exe -q %1; nchidei regedit /System /CurrentControlSet /Services /W3Svc

Windows NT i IIS 4
Pentru a instala PHP pe un server NT care ruleaz IIS 4 urmai urmtoarele instruciuni:

n Internet Service Manager (MMC), selectai site-ul Web sau directorul unei aplicai; Deschidei foaia de proprieti a directorului i selectai Home Directory, Virtual Directory sau Directory; 40

Dai click pe butonul Configuration, i apoi pe App Mappings; Dai click pe Add, i introducei n csua Executable c:\path-to-php-dir\php.exe %s %s; n csua Executable introducei extensia pe care dorii s o asociai cu scripturile PHP. (Repetai paii 5 i 6 pentru fiecare extensie pe care dorii s o asociai cu scripturile PHP. De obicei se folosesc extensiile .php i .phtml.); Setati modul de securitate corespunztor. Acest lucru este realizat n Internet Service Manager, iar dac serverul dumneavoastr NT folosete sistemul de fiiere NTFS adugai drepturi de execui pentru I_USR_ directorului care conine php.exe.

Windows 9x/NT i Apache 1.3.x


Pentru a configura Apache astefel nct s lucreze cu interpretorul PHP CGI trebuie s editai fiierele srm.conf sau httpd.conf. Dei pot exista unele variaii n configurarea PHP sub Apache, metoda urmtoare este destul de simpl pentru a putea fi folosit de nceptori. Pentru urmtoarele directive de configurare v recomandm s consultai documentaia serverului Apache.

ScriptAlias /php/ "c:/path-to-php-dir/" AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml Action application/x-httpd-php "/php/php.exe"

Pentru a folosi the source code highlighting feature, creai un script PHP i adugaii urmtorul cod: <? php show_source ("original_php_script.php"); ?;>. nlocuii original_php_script.php cu numele fiierului a crui surs vrei s fie afit (acesta este doar una din metodele de a face acest lucru). Not: n Apache pentru Windows toate back-slash-urile din numele unei ci ca "c:\directory\file.ext", tebuie transformate n slash-uri.

Omni HTTPd 2.0b1 pentru Windows


Acesta ar trebui s fie cel mai simplu mod de configurare:

Pasul 1: Instalai serverul Omni Pasul 2: Dai click dreapta pe icoana OmniHTTPd din system tray i selectai Properties Pasul 3: Dai click pe Web Server Global Settings Pasul 4: La 'External', introducei: virtual = .php | actual = c:\path-to-php-dir\php.exe Pasul 5: La 'Mime', introducei: virtual = wwwserver/stdcgi | actual = .php Pasul 6: Dai Ok.

Repetai pai 2-6 pentru fiecare extensie pe care vrei s o asociai cu PHP.

Modulele PHP
php_calendar.dll php_crypt.dll php_dbase.dll php_dbm.dll php_filepro.dll Funcii de convesie a calendarului Funci de cryptare Funcii DBase Emulare GDBM via librria Berkely DB2 Acces doar pentru citire a bazelor de date filepro 41

php_gd.dll php_hyperwave.dll php_imap4r2.dll php_ldap.dll php_msql1.dll php_msql2.dll php_mssql.dll php3_mysql.dll (construit n PHP 4) php_nsmail.dll php_oci73.dll php_snmp.dll php_zlib.dll

Funcii din librria GD pentru lucrul cu gif-uri Funcii HyperWave Funcii IMAP 4 Funcii LDAP Client mSQL 1 Client mSQL 2 Client MSSQL (necesit librriile MSSQL DB) Funcii MySQL Funcii de mail pentru Netscape Funcii Oracle Funcii SNMP "get and walk"(doar pentru NT) Funcii ZLib

I.1 Structura limbajului


Sintaxa fundamental. Trecerea de la HMTL la PHP
Exist patru moduri pentru a trece de la HMTL la PHP. Exemplul 2.1.1:
1. <? echo ( "Cea mai simpla cale de introducere...\n"); ?> 2. <?php echo ( "Daca vreti sa afisati documente XML sau XHTML faceti ca aici.\n"); ? > 3. <script language="php"> echo ( "Anumite FrontPage)"); editoare nu accepta tag-uri necunoscute (de exemplu

</script> 4. <% echo ( "Puteti utiliza taguri in stil Asp."); %>

A doua metod este cea mai utilizat, pentru c permite o implementare uoara a PHP-ului cu generaia urmatoare XHTML.

Separatori de instruciuni
Instruciunile sunt separate, ca n C sau ca n Perl, prin punct i virgul la sfritul unei instruciuni. Semnele de sfrit, '?>', implic sfritul instruciunii, deci implicit punct i vigul. Exemplul 2.1.2:
<?php echo "Acesta este un test"; ?> <?php echo "Acesta este un alt test" ?>

Comentarii
Comentariile pot fi fcute n stilul celor din limbajele C, C++ i shell-urile UNIX (bash de exemplu). Exemplul 2.1.3:
echo "Acesta este un test"; // Acesta este un comentariu pe o linie in stil C++ /* Acesta este un comentariu pe mai multe linii; inca o linie de comentariu */ echo "Acesta este un echo "Ultimul test"; # Un comentariu in stil Unix

alt

test";

42

Stilul de comentariu pe o linie ine pn la sfritul liniei sau al blocului curent al codului PHP. Exemplul 2.1.4:
<h1>Acesta este un <? # echo "simplu"; ?> exemplu.</h1> <p>Linia de mai sus va afisa: "Acesta este un exemplu."</p>

I.2 Tipuri de date


Numere ntregi
Numerele ntregi se pot specifica n modul urmtor (exemplul 2.2.1):
$a $a $a $a = = = = 1234; -123; 0123; 0x12; # # # # Numar Numar Numar Numar intreg intreg intreg intreg in baza 10 negativ in baza 8, octal (echivalent cu 83 in baza 10) in baza 16, hexazecimal (echivalent cu 18 in baza 10)

Numere reprezentate n virgul mobil


Numerele reprezentate n virgul mobil (double) pot fi utilizate n oricare din sintaxele urmtoare (exemplul 2.2.2):
$a = 1.234; $a = 1.2e3;

Dimensiunea numerelor n virgul mobil este independent de platform. Precizia uzual este de 14 cifre. Observaii:

de obicei fraciile zecimale simple, precum 0.1 sau 0.7, sunt convertite intern cu o mic pierdere de precizie; aceasta poate s duc la rezultate mai puin exacte. De exemplu: floor( 0,1 + 0,7*10) ntoarce de obicei 7 n loc de ateptatul 8, rezultatul reprezentrii interne fiind de genul 7,9999999999; este imposibil s se exprime cu exactitate fraciile zecimale cu numr infinit de cifre; de exemplu, 1/3 n form zecimal devine 0,33333333...; dac avei nevoie de o precizie mai mare n compararea valorilor n virgul mobil trebuie s utilizai funciile matematice de precizie arbitrar.

iruri de caractere
irurile de caractere pot fi delimitate de ghilimele sau apostrofuri, n ultimul caz inhibndu-se evaluarea variabilelor din interiorul irului respectiv (exact ca la bash). Dac irul de caractere este delimitat de ghilimele atunci variabilele din interiorul irului vor fi evaluate i nlocuite prin valoarea lor. Ca i n C sau Perl, caracterul backslash (\) este utilizat pentru a proteja un carcater special. Secvene escape \n \r \t \\ \$ \" Valoare Linie nou (linefeed, LF sau 0x0A in ASCII) ntoarcere la linie (carrige return, CR sau OxOD in ASCII) Tab orizontal (HT sau 0x09 in ASCII) Backslash Semnul dolarului Ghilimele 43

\[0-7] {1,3} \x[0-9A-Fa-f] {1,2}

Ordinea caracterelor corespunznd expresiei normale este un caracter n baza 8 Ordinea caracterelor corespunznd expresiei normale este un caracter in baza 16

Orice caracter se poate transforma, teoretic, n secve escape, dar se produce un avertisment la cel mai nalt nivel. A doua metod ncadreaz irurile ntre apostrofuri; n acest caz singurele secvene escape nelese sunt '\\' i '\'. Variabilele nu vor fi expandate ntr-un ir ncadrat ntre apostrofuri. O alt metod de a delimita irurile este folosirea sintaxei doc '<<<'. Dup acest delimitator trebuie specificat un identificator, apoi irul de caractere propriu-zis i, n ncheiere, acelai identificator care a precedat irul. Exemplul 2.2.3:
$str = <<< EOD // Identificatorul de inceput Exemplu de serie ingloband linii multiple utilizand sintaxa heredoc. EOD; // Identificatorul de sfarsit /* Exemplu mai complex cu mai multe variabile */ class joc { var $joc; var $bar; function joc() { $this->joc = 'Joc'; $this->bar = array( 'Bar 1', 'Bar 2', 'Bar 3'); } } $joc = new joc(); $name = 'MyName'; echo <<< EOT My name is "$name". I am printing some $joc->joc. Now, I am printing some {$joc->bar[1]}. This should print a capital 'A': \x41 EOT;

irurile pot fi concatenate utiliznd operatorul '.', operatorul '+' fiind impropriu pentru aceast operaie. Exemplul 2.2.4:
/* Asignarea unui sir */ $str = "Aceasta este o serie"; /* Concatenarea sirului cu un text nou */ $str = $str . " Cu mai mult text"; /* Un alt mijloc de adaugare, folosind o secventa escape newline */ $str .= " si o nous linie la sfarsit.\n"; /* Variabilele dintr-un sir inclus intre apostrofuri se pot evalua */ $num = 9; $str = '<p>Numar: $num</p>'; /* Obtine primul caracter al sirului */ $str = 'Un test.'; $first = $str[0]; /* Obtine ultimul caracter al sirului */ $str = 'Un alt test.'; $last = $str[ strlen( $str) - 1];

Conversia irurilor
Cnd un ir este evaluat ca valoare numeric, valoarea i tipul rezultat sunt decise dup cum urmeaz:

44

irul va fi evaluat ca un double dac conine unul din caracterele '.', 'e' sau 'E'. Altfel va fi evaluat ca un ntreg; valoarea este dat de nceputul irului. Dac irul ncepe cu o dat numeric valid, aceasta va fi valoarea utilizat. Altfel valoara va fi 0. O dat numeric valid este format din semn (opional), una sau mai multe cifre (opional un puct zecimal), ncheiate eventual cu un exponent. Acest exponent ('e' sau 'E') este urmat de una sau mai multe cifre. Cnd prima expresie este un ir tipul varibilei va depinde de a doua expresie.
= = = = = = = = 1 + "10.5"; 1 + "-1.3e3"; 1 + "bob-1.3e3"; 1 + "bob3"; 1 + "10 Small Pigs"; 1 + "10 Little Piggies"; "10.0 pigs" + 1; "10.0 pigs" + 1.0; // // // // // // // // $aaa $aaa $aaa $aaa $aaa $aaa $aaa $aaa este este este este este este este este double (11.5) double (-1299) integer (1) integer (1) integer (11) integer (11) double (11) double (11)

Exemplul 2.2.5:
$aaa $aaa $aaa $aaa $aaa $aaa $aaa $aaa

Tablouri
n PHP tablourile se comport i ca tablouri asociative (hash tables) i ca tablouri indexate (vectori).

Tablouri unidimensionale
PHP accept att tablouri scalare ct i asociative. De fapt nu exist nici o diferen ntre cele dou. n PHP tabolurile se pot crea utiliznd funciile list() i array() sau se poate seta explicit fiecare element din tablou. Exemplul 2.2.6:
# Exemplul A: $a[0] = "abc"; $a[1] = "def"; $b["aaa"] = 13;

Se poate de asemenea crea un tablou adugndu-i valori. De exemplu, putem extinde tabloul $a ca n exemplul de mai jos (exemplul 2.2.6):
# Exemplul B: $a[] = "hello"; // $a[2] == "hello" $a[] = "world"; // $a[3] == "world"

Vectorii pot fi sortai utiliznd funcii specializate: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), i uksort(). Putei numra elementele tabloului utiliznd funcia count(). Putei parcurge un tablou utiliznd funciile next(), prev() i each().

Tablouri multidimensionale
Tablourile multidimensionale sunt n realitate tablouri simple. Pentru fiecare dimensiune a tabloului trebuie adugat o alt dimensiune [dim] la final.
$a[1] = $f; $a["aaa"] = $f; $a[1][0] = $f; $a["aaa"][2] = $f; $3[3]["bar"] = $f; $a["aaa"][4]["bar"][0] = $f; // // // // // // Tablou unidimensional Tablou unidimensional Tablou bidimensional Indicii asociativi si numerici se pot combina Indicii numerici si asociativi se pot combina Tablou cu patru dimensiuni

n PHP nu este posibil referirea tablourilor multidimensionale direct ntr-un ir. Exemplul urmtor nu va furniza rezulatul ateptat: 45

$a[3]['bar'] = 'Bob'; echo "Acesta nu merge: $a[3][bar]";

Exemplul de mai sus va afia: Acesta nu merge: array[bar]. Operatorul de concatenare poate fi utilizat pentru a corecta acest lucru:
$a[3]['bar'] = 'Bob'; echo "Acesta nu merge: " . $a[3][bar];

n PHP 4.0 problema aceasta poate fi rezolvat incluznd referina la tabloul din interiorul irului ntre acolade ca n exemplul de mai jos:
$a[3]['bar'] = 'Bob'; echo "Acesta nu merge: {$a[3][bar]}";

Putei completa o matrice n multe moduri, dar important este s inelegei cum putei s utilizai funcia array() pentru tablouri asociative. Exemplul 2.2.7:
# Exemplul A: $a["culoare"] = "rosu"; $a["aroma"] = "dulce"; $a["forma"] = "rotund"; $a["nume"] = "mar"; $a[3] = 4; # Exemplul B: $a = array( "culoare" "aroma" "forma" "nume" 3 );

=> => => => =>

"rosu", "dulce", "rotund", "mar", 4

Pentru tablouri asociative multidimensionale putem imbrica funcia array() ca n exemplul de mai jos: (exemplul 2.2.8)
$a = array( "mar" => array( "culoare" => "rosu", "aroma" => "dulce", "forma" => "rotund" ), "portocala" => array( "culoare" => "potocaliu", "aroma" => "acru-amarui", "forma" => "rotund" ), "banana" => array( "culoare" => "galben", "aroma" => "placuta", "forma" => "bananoida" ) ); echo $a["mar"]["aroma"]; // Va afisa dulce

Obiecte
Pentru a crea o variabil de tipul obiect dorit, i eventual pentru a o iniializa, se folosete operatorul new: Exemplul 2.2.9:
class aaa { function do_aaa() { echo "Doing aaa.";

46

} } $bar = new aaa; $bar->do_aaa();

Conversia automat a tipurilor


PHP nu accept definirea explicit a tipului n definirea variabilelor, tipul unei variabile fiind determinat de contextul n care acea variabil este utilizat. Acesta nseamn c dac atribuii variabilei var un ir de caractere, var va deveni ir. Dac i atribuii o valoare ntreg, var va deveni un ntreg. Un exemplu de conversie automat a tipului apare la utilizarea operatorului '+'. Dac vre-un operand este double, atunci toi operanzii sunt evaluai la double, i rezultatul va fi un double. Altfel, operanzii vor fi interpretai ca ntregi i rezultatul va fi tot un ntreg. Reinei c acest mod de evaluare nu modific tipul operanzilor care intervin n expresie, ci numai modul n care ei sunt evaluai. Exemplul 2.2.10:
$bbb = "0"; $bbb++; $bbb += 1; $bbb = $bbb + 1.3; $bbb = 5 + "10 Little Piggies"; $bbb = 5 + "10 Small Pigs"; $a = 1; $a[0] = "f"; // // // // // // $bbb $bbb $bbb $bbb $bbb $bbb este este este este este este sir de caractere (ASCII 48) sirul de caractere "1" (ASCII 49) acum de tip intreg (2) acum de tip double (3.3) de tip intreg (15) de tip intreg (15)

Observaie: conversia automat de la un tip simplu la tipul tablou este uzual nedefinit.
// $a este un intreg // $a devine un vector de forma "f"

Dei aparent variabila $a a fost transformat ntr-un tablou cu primul element f, exemplul urmtor nu ofer un rezultat la fel de clar:
$a = "1"; $a[0] = "f"; // $a este un sir // Ce se intampla cu offset-ul sirului?

Conversia explicit a tipurilor


Conversia explicit a tipurilor (cast) se face n acelai mod ca n C: numele tipului dorit este scris n paranteze naite de numele variabilei.
$a = 10; $bar = (double) $a; // $a este un intreg // $bar este un double

Conversiile permise sunt:


(int), (integer) - conversia la ntreg (real), (double), (float) - conversie la double (string) - conversie la ir (array) - conversie la tablou (object) - conversie la obiect

Observai c eticheta i spaiile sunt permise ntre paranteze, deci liniile urmtoare sunt echivalente:
$a = (int) $bar; $a = ( int ) $bar; $a = (int)$bar;

Este posibil ca rezultatul conversiei explicite ntre dou tipuri s nu fie evident. De exemplu convertind un scalar sau un ir de caractere la tipul array, respectiva variabil va deveni primul element al tabloului ca n exemplul de mai jos:
$var = 'ciao'; $arr = (array) $var; echo $arr[0]; // Afiseaza ciao

47

Cnd convertii un scalar sau o variabil de tip ir de caractere la un obiect, respectiva variabil va deveni un atribut al obiectului, atribut numit scalar. Exemplul 2.2.11:
$var = 'ciao'; $obj = (object) $var; echo $obj->scalar; // Afiseaza ciao

I.3 Variabile
Reprezentarea varibilelor
Variabilele n PHP sunt reprezentate de semnul dolar, '$', n faa numelui variabilei. Numele variabilelor sunt formate dup aceleai reguli ca alte etichete din PHP. Un nume de variabil valid trebuie s nceap printr-o liter sau liniu de subliniere, '_', urmat de un ir de litere, cifre sau liniue de subliniere. PHP este un limbaj case-senzitiv (exemplul 2.3.1).
$var = "Jean"; $Var = "Paul"; echo "$var, $Var"; $4site = 'nu inca'; $_4site = 'nu inca'; $mas = 'jaune'; // // // // Afiseaza Jean, Paul Incorect: incepe printr-o cifra Corect: incepe printr-o liniuta de subliniere Corect: '' este ASCII 239

n PHP 3, variabilele sunt asignate ntotdeauna prin valoare. Astfel, cnd atribuim unei variabile o expresie, ntreaga valoare a expresiei este copiat n variabila destinaie. Aceasta nseamn, de exemplu, c atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra celeilalte. PHP 4 afer i un alt mod pentru atribuirea de valori variabilelor: prin referin. Aceasta nseamn c noua variabil nu face dect s refere variabila original (cu alte cuvinte, "devine un alias pentru" sau "pointez la" variabila original). n acest caz, cele dou variabile sunt interdependente, modificarea uneia determinnd modificarea celeilalte. Deoarece nu are loc copierea i actualizarea valorilor, asignarea prin referin este mai rapid. Diferena devine notabil n cazul execuiilor repetate sau la asignarea tablourilor mari, respectiv a abiectelor. Pentru a atribui prin referin, se introduce un ampersand, '&', n faa variabilei care este atribuit (variabila surs). n exemplul urmtor, Numele meu este Pierre se va afia de dou ori (exemplul 2.3.2):
$aaa = 'Pierre'; $bar = &$aaa; $bar = "Numele meu este $bar"; echo $aaa; echo $bar; // Atribui valoarea Pierre lui $aaa /* Atribuire prin referinta $aaa si $bar refera aceeasi locatie de memorie */ // Modific $bar , deci inmplicit si $aaa

Observaie: numai variabilele pot fi asigante prin referin. Exemplul 2.3.3:


$a = 25; $bar = &$a; $bar = &( 24 * 7); function test() { return 25; } $bar = &test(); // Atribuire posibila // Atribuire eronata: referinta unei expresii fara nume

// Incorect: functia returneaza o valoare, nu o variabila

Variabile predefinite
PHP furnizeaz un mare numr de variabile predefinite pentru fiecare script pe care l ruleaz. Cele mai multe variabile predefinite depind de serverul pe care se lucreaz, de versiunea i configurarea serverului sau de ali factori. Unele dintre aceste variabile nu vor fi disponibile cnd PHP ruleaz ntr-o linie de comand. 48

Domeniul variabilelor
Domeniul variabilelor este contextul n care variabila este definit. Pentru marea parte a variabilelor, domeniul lor este unic. Acest domeniu se refer i la fiierele incluse ntr-un script. Exemplu:
$a = 1; include "b.inc";

Aici variabila $a va fi accesibil n fiierul inclus b.inc. Implicit, toate variabilele utilizate ntr-o funcie sunt prin definiie locale. Exemplul 2.3.4:
$a = 1; // Influenta globala function test() { echo $a; // Influenta locala } test();

Scriptul nu afieaz nimic pe ecran deoarece instruciunea echo utilizeaz variabila local $a care nu a fost asignat n acest domeniu. Este o diferen ntre modul de stabilire a domeniului variabilelor globale n C i PHP: n absena unei referiri locale, variabilele globale din C sunt valabile n orice funcie a programului. Acest lucru nu este valabil i n PHP. Exemplul 2.3.5:
$a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b;

Acest script va produce rezultatul 3. Declarnd variabilele $a i $b globale n interiorul funciei Sum(), orice referire la acestea n domeniul funciei se va face la declaraiile globale. Numrul variabilelor globale care pot fi manipulate de ctre o funcie este nelimitat. A doua modalitate de a accesa variabilele din domeniul global este prin utilizarea variabilei tablou din PHP, numit $GLOBALS. Exemplul anterior poate fi rescris astfel:
$a = 1; $b = 2; function Sum() { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum(); echo $b;

Variabila $GLOBALS este un tablou asociativ care are drept indice numele variabilelor globale i coninutul respectivelor variabile drept elemente. Un alt aspect important legat de domeniul variabilelor se refer la variabilele statice. O variabil static exist numai n domeniul unei funcii dar nu i pierde valoarea cnd execuia programului prsete acest domeniu.
function Test() { $a = 0; echo $a; $a++; }

49

Aceast funcie este inutil de vreme ce la fiecare apel variabila $a este setat la valoarea 0 care va fi tiprit. Dei n funcie exist instruciunea $a++ care incrementez valoarea variabilei, la ncheierea execuiei funciei aceast valoare se pierde, variabila $a avnd domeniu local. Pentru a pstra valoarea incrementat a variabilei $a ntre dou execuii ale funciei, ea va fi declarat ca variabil static aa cum reiese din exemplul urmtor:
function Test() { static $a = 0; echo $a; $a++; }

n acest caz la fiecare apel al funciei Test() va fi tiprit valoarea lui $a, apoi se va incrementa. Variabilele statice ofer de asemeni posibilitatea de a implementa i funciile recursive. O funcie este recursiv dac se autoapeleaz. Proiectarea funciilor recursive trebuie fcut cu atenie pentru a evita recursia infinit. Trebuie asigurat o modalitate adecvat de ncheiere a apelurilor recursive. Urmtoarea funcie recursiv numr pn la 10 folosind variabila static $count pentru a sesiza ncheierea autoapelurilor (exemplul 2.3.6):
function Test() { static $count = 0; $count++; echo $count; if( $count < 10) { Test(); } $count--; }

Variabile variabile
Uneori este convenabil s lucrm cu nume de variabile ce pot fi tratate n mod dinamic. O variabil variabil este un nume de variabil care poate fi iniializat i utilizat n mod dinamic. O variabil normal este setat printr-o instruciune de forma:
$a = "hello";

O variabil variabil primete valoarea unei alte variabile i o trateaz ca i cum ar fi un nume de variabil. n exemplul urmtor valoarea hello atribuit anterior poate fi tratat ca un nume de variabil utiliznd de dou ori semnul dolar:
$$a = "world";

n acest moment dou variabile au fost definite i memorate n tabela de simboluri PHP: $a coninnd "hello" i $hello coninnd irul "world". Astfel instruciunea:
echo "$a $($a)";

produce aceeai ieire ca i instruciunea:


echo "$a $hello";

adic irul hello world. Pentru a utiliza variabilele variabile cu tablouri, trebuie rezolvat o problem de ambiguitate. Astfel, dac scriem $$a[1], trebuie s precizm dac dorim s utilizm $a[1] ca variabil sau $$a i apoi s indexm cu [1] aceast variabil. Pentru a rezolva aceast ambiguitate vom folosi sintaxa ${$a[1]} pentru primul caz i ${$a}[1] pentru al doilea caz.

I.4 Constante
PHP definete o serie de constante i ofer un mecanism pentru definirea altora n timpul execuiei. Constantele seamn mult cu variabilele; sunt definite cu jutorul funciei define() i valoarea lor nu poate fi modificat ulterior. Constantele predefinite (disponibile ntotdeauna) sunt : __FILE__ 50

Se utilizeaz cu un fiier care a fost inclus sau solicitat, cnd numele fiierului inclus este dat; __LINE__ Numrul liniei din scriptul curent care este analizat. Se utilizeaz mpreun cu un fiier care a fost inclus sau solicitat, cnd poziia n fiierul inclus este dat; PHP_VERSION Un ir de caractere reprezentnd versiunea PHP utilizat; PHP_OS Numele sistemului de operare n care ruleaz PHP; TRUE O valoare adevrat; FALSE O valoare fals; E_ERROR Indic o eroare, alta dect o eroare de analizare, pentru care corectarea nu este posibil; E_WARNING Indic o situaie n care PHP tie c ceva este greit, dar continu oricum; E_PARSE Semnaleaz o sintax invalid n fiierul script; corectarea nu este posibil; E_NOTICE S-a ntmplat ceva care poate fi sau nu o eroare; execuia continu. Spre exemplu am accesat o variabil care nu a fost iniializat sau am folosit un ir nencadrat ntre ghilimele ca index asociativ. Putei defini constante suplimentare utiliznd funcia define(). Reinei c aceste constante nu se comport ca macro-urile C; numai datele scalare valide pot fi reprezentate printr-o constant. Exemplul 2.4.1 (definirea constantelor):
define( "CONSTANT", "Hello world."); echo CONSTANT; // Afiseaza Hello world.

Exemplul 2.4.2 (utilizarea constantelor predefinite __FILE__ i __LINE__):


function repor_error( $file, $line, $message) { echo "An error occured in $file on line $line: $message."; } report_error( __FILE__, __LINE__, "Something went wrong!");

.5 Expresii
Expresiile sunt cele mai importante construcii ale PHP; n PHP aproape orice scriei este o expresie. Cea mai simpl i corect modalitate de a defini o expresie este orice are o valoare. Cele mai simple expresii sunt constantele i variabilele. Exemplu:
$a = 5;

n aceast construcie 5 este o expresie constant. De asemeni, funciile sunt expresii deoarece returneaz valoare. Exemplu:
function f() { return 5; }

Deoarece f() returneaz valoarea 5, valoarea expresiei f() este 5. Bineneles, valorile nu trebuie s fie neaprat ntregi . PHP accept 3 tipuri de valori scalare: valori ntregi, valori n virgul mobil i valori tip ir de caractere (valorile scalare sunt acele valori indivizibile spre deosebire de valorile array, de exemplu). PHP accept de asemeni dou tipuri compuse: array i object (tablouri i obiecte). Valorile de acest tip pot fi atribuite variabilelor sau returnate de ctre funcie. 51

PHP este un limbaj orientat pe expresii n sensul c aproape orice este o expresie. Operatorii de pre i postincrementare funcioneaz analog cu cei din C. Un tip uzual de expresii l reprezint expresiile de comparare. Aceste expresii sunt evaluate la 0 sau 1 reprezentnd FALSE, respectiv TRUE. PHP accept operatorii de comparaie >, >=, ==, != (diferit), <, <=. Aceste expresii sunt utilizate uzual n construirea condiiilor. Ca i n C se pot folosi operatorii de atribuire compui. n afar de faptul c utilizarea acestor operatori compui duce la scurtarea codului, i execuia este mai rapid. De asemeni, PHP accept operatorul ternar condiional '?', cu aceeai semnificaie ca i n C. Urmtoarele exemple ilustreaz utilizarea operatorilor compui i a celor de pre i postincrementare (exemplul 2.5.1).
function double( $i) { return $i * 2; } $b = $a = 5; /* Atribuie valoarea 5 variabilelor $a si $b */ $c = $a++; /* Postincrementare: atribuie valoarea initiala a lui $a (5) variabilei $c */ $e = $d = ++$b; /* Preincrementare: atribuie valoarea incrementata a lui $b (6) variabilelor $d si $e */ /* In acest punct $d si $e sunt egale cu 6 */ $f = double( $d++); /* Atribuie ( valoarea lui $d inainte de incrementare) * 2, 6 * 2 = 12, variabilei $f */ $g = double( ++$e); /* Atribuie ( valoarea lui $e dupa incrementare) * 2, 7 * 2 = 14, variabilei $g */ $h = $g += 10; /* $g este incrementat cu 10 si ia valoarea 24. Aceasta valoare (24) este apoi atribuita variabilei $h, care va lua valoarea 24. */

Limbajul PHP nu dispune de un tip logic predefinit. Evaluarea valorii de adevr a expresiilor PHP se face la fel ca n C i Perl: orice valoare numeric nenul este TRUE, zero este FALSE. Un ir vid este FALSE, orice alt ir este TRUE. n cazul tablourilor i obiectelor orice valoare care nu conine elemente este considerat FALSE, altfel este considerat TRUE.

I.6 Operatori
Operatori aritmetici
Exemplu Numele operaiei Rezultat $a + $b $a - $b $a * $b $a / $b $a % $b Adunare Scdere nmulire mprire Modul Suma dintre $a i $b Diferena dintre $a i $b Produsul dintre $a i $b mprirea lui $a la $b Restul mpririi lui $a la $b

Operatorul de mprire ('/') ntoarce o valoare ntreag (rezultatul mpririi ntregi) dac cei doi operatori sunt ntregi (sau dac irurile sunt convertite la ntregi). Dac unul din operatori este numr cu virgul mobil, sau rezultatul unei operaii returneaz o valoare care nu este ntreag, va fi returnat o valoare n virgul mobil.

Operatori de atribuire
Operatorul de atribuire simpl este '='. Are semnificaia: valoarea expresiei din dreapta se atribuie variabilei din stnga (variabil simpl sau structurat). Putem spune c instruciunea de atribuire este format din trei elemente: expresia care urmeaz s fie atribuit, operatorul de atribuire '=' i variabila destinatar. 52

Cnd este executat instruciunea de atribuire, este evaluat expresia i valoarea rezultat este depus la destinaia specificat. Exemplu:
$a = ( $b = 4) + 5; /* $a este egal cu 9 si $b cu 4 */

n operaiile aritmetice i pe iruri de caractere se pot folosi i operatorii compui, aa cum reiese din exemplul urmtor (exemplul 2.6.1):
$a = 3; $a += 5; /* Atribuie 8 variabilei $a. Corespunde instructiunii $a = $a + 5; */ $a = "Buna"; $b .= " la toata lumea!"; /* Atribuie valoarea "Buna la toata lumea!" variabilei $b (echivalent cu $b = $b . " la toata lumea!") */

De remarcat c atribuirea se face prin copiere, adic expresia din dreapta nu se modific n urma atribuirii. PHP4 accept i atribuirea prin referin, utiliznd sintaxa $var = &$othervar;, dar acest lucru nu este posibil n PHP3. Atribuirea prin referin nseamn c cele dou variabile refer aceeai locaie de memorie i c modificarea uneia dintre ele o afecteaz i pe cealalt.

Operatori pe bii
Operatorii pe bii v permit s manipulai numerele ntregi n reprezentare binar. Exemplu $a & $b $a | $b $a ^ $b ~ $a Numele operatorului I (AND) SAU (OR) XOR NOT Rezultat Biii poziionai pe 1 n $a I n $b sunt poziionai la 1 n rezultat Biii poziionai pe 1 n $a SAU $b sunt poziionai la 1 n rezultat Biii poziionai pe 1 n $a SAU n $b sunt poziionai la 1 n rezultat Biii care sunt poziionai pe 1 n $a vor fi poziionai pe 0 i vice versa Deplaseaz biii din $a cu $b poziii spre stnga (fiecare pas nseamn multiplicare cu 2) Deplaseaz biii din $a cu $b poziii spre dreapta (fiecare pas nseamn mprire cu 2)

$a << $b Deplasare la stnga $a >> $b Deplasare la dreapta

Operatori de comparaie
Operatorii de comparaie permit compararea a dou valori. Exemplu Numele operatorului Rezultat $a == $b Egal Adevrat dac $a este egal cu $b Adevrat dac $a este egal cu $b i ei sunt de acelai tip (numai n PHP 4) Adevrat dac $a este diferit de $b Adevrat dac $a este mai mic strict dect $b. Adevrat dac $a este mai mare strict dect $b Adevrat dac $a este mai mic sau egal ca $b Adevrat dac $a este mai mare sau egal ca $b

$a === $b Identic $a != $b $a < $b $a > $b $a <= $b $a >= $b Diferit Mai mic dect Mai mare dect Mai mic sau egal Mai mare sau egal

Un alt operator condiional este operatorul ternar ('?:'), care funcioneaz ca n C.


( expr1) ? ( expr2) : ( expr3);

53

Aceast expresie returneaz expresia expr2 dac expr1 este adevarat i expresia expr3 dac expresia expr1 este fals.

Operatori de control al erorilor


PHP are un operator de control al erorilor i anume '@'. Cnd acest operator precede o expresie n PHP, orice eroare care poate fi generat va fi ignorat. Dac opiunea track_errors este activat, mesajele de eroare generate de expresie vor fi salvate n variabila global $php_errormsg. Aceast variabil va fi rescris la fiecare eroare, deci verificai-o la timp dac dorii s o utilizai. Exemplu:
/* Eroare SQL intentionata (apostrofuri suplimentare) */ $res = mysql_query( "select name, code from 'namelist") or die( "Query failed: error was '$php_errormsg'.");

Operatori de execuie
PHP are un operator de execuie '``' (backticks). Este diferit de ghilimelele simple. PHP va ncerca s execute coninutul dintre aceste ghilimele oblice ca o comand shell. Rezultatul va fi returnat (nu va fi descrcat pur i simplu, ci va putea fi atribuit unei variabile). Exemplu:
$output = `ls -al`; echo "<pre> $output </pre>";

Operatori de incrementare/decrementare
PHP dispune de operatori de incrementare/decrementare ca i limbajul C. Exemplu Numele operatorului Rezultat ++$a $a++ --$a $a-Exemplul 2.6.2:
echo $a = echo echo echo $a = echo echo echo $a = echo echo echo $a = echo echo "<h3>Post-incrementare</h3>"; 5; "Obtin valoarea 5: " . $a++ . "<br>"; "Obtin valoarea 6: " . $a . "<br>"; "<h3>Pre-incrementare</h3>"; 5; "Obtin valoarea 6: " . ++$a . "<br>"; "Obtin valoarea 6:" . $a . "<br>"; "<h3>Post-decrementare</h3>"; 5; "Obtin valoarea 5: " . $a-- . "<br>"; "Obtin valoarea 4: " . $a . "<br>"; "<h3>Pre-decrementare</h3>"; 5; "Obtin valoarea 4: " . --$a . "<br>"; "Obtin valoarea 4: " . $a . "<br>";

Pre-incrementare Post-incrementare Pre-decrementare Post-decrementare

Incrementeaz $a cu 1, apoi l returneaz Returneaz $a, apoi incrementeaz $a cu 1 Decrementeaz $a cu 1, apoi l returneaz Returneaz $a, apoi decrementeaz $a cu 1

Operatori logici
Operatorii logici sunt: Exemplu Numele operatorului Rezultat 54

$a and $b I (AND) $a or $b ! $a SAU (OR) NON (NOT)

Adevrat dac $a I $b sunt adevrate Adevrat dac $a SAU $b este adevrat Adevrat dac $a este fals Adevrat dac $a SAU $b este adevrat , dar nu amndou n acelai timp Adevrat dac $a I $b sunt adevrate Adevrat dac $a SAU $b este adevrat

$a xor $b XOR (XOR) $a && $b SI (AND) $a || $b SAU (OR)

Motivul pentru care exist dou tipuri de 'I' i 'SAU' este c ele au prioriti diferite.

Precedena operatorilor
Precedena operatorilor specific ordinea n care se aplic operatorii. De exemplu, n expresia 1 + 5 * 3 rezultatul este 16 i nu 18, cci nmulirea ('*') are prioritate superioar n raport cu adunarea ('+'). Tabelul urmtor conine operatorii disponibili n PHP n ordinea cresctoare a prioritilor. Asociativitate Operatori Stnga Stnga Stnga Stnga Dreapta Stnga Stnga Stnga Stnga Stnga Stnga Stnga , or xor I print =, +=, -=, *=, /=, .=, %=, &=, |=, ^=, ~=, <<=, >>= ?: || && | ^ &

Non-asociativ ==, !=, ===, !== Non-asociativ <, <=, >, >= Stnga Stnga Stnga Stnga Stnga <<, >> +*/, % !, ~, ++, --, (int), (double), (string), (array), (obiect), @ [

Non-asociativ new

Operatori pentru iruri de caractere


Exist doi operatori pentru iruri de caractere. Primul este operatorul de concatenare ('.'), care are ca rezultat concatenarea celor dou argumente. Cel de-al doilea operator este operatorul de atribuire ('.='), care concateneaz argumentul din partea dreapt la argumentul din stng.
$a = "Hello";

55

$b = $a . "World!"; $a = "Hello"; $a .= "World!";

// $b contine sirul Hello World! // $a contine sirul Hello World!

.7 Structuri de control
Toate scripturile PHP sunt o suit de instruciuni. O instruciune poate fi o atribuire, un apel de funcie, o instruciune condiional sau chiar o instruciune vid. O instruciune se termin de obicei prin punct i virgul, ';'. Instruciunile pot fi grupate n blocuri delimitate de acolade, '{}'. Un bloc este considerat ca o instruciune. Diferitele tipuri de instruciuni sunt descrise n capitolul urmtor.

if
Instruciunea if este important n toate limbajele, inclusiv n PHP. Ea permite execuia condiionat a unei pri de cod. Sintaxa instruciunii if este aceeai ca i n C:
if( expresie) { list de instruciuni }

Cum am vzut n paragraful care se refer la expresii, expresie este evaluat la o valoare de adevr. Dac expresia expresie este TRUE, PHP va executa instruciunile din lista de instruciuni, iar dac ea este FALSE, instruciunile vor fi ignorate. Exemplu:
if( $a > $b) echo "$a este mai mare decat $b";

Dac dorim ca un grup de instruciuni s fie executate condiionat, este suficient s nchidem aceste instruciuni ntre acolade pentru a forma un bloc. Exemplu:
if( $a > $b) { echo "$a este mai mare decat $b"; $b = $a; }

Instruciunile if pot fi imbricate pe oricte niveluri dorim obinndu-se o structur condiional extrem de flexibil.

else
Dac dorim s executm dou instruciuni diferite n funcie de valoarea de adevr a unei expresii vom folosi o instruciune if-else ca n exemplul urmtor:
if( $a > $b) { print "$a este mai mare decat $b"; } else { print "$b este mai mare decat $a"; }

Instruciunile de dup else sunt executate doar dac expresia condiional este evaluat la FALSE.

elseif
Aa cum sugereaz numele, este o combinaie a instruciunilor if i else. Ca i else, instruciunea elseif extinde o instruciune if pentru a executa alte instruciuni n cazul n care expresia condiional din if este FALSE. Spre deosebire de else, instruciunea alternativ va fi executat doar dac expresia condiional din elseif este TRUE. Spre exemplu, fragmentul urmtor de cod va afia care este relaia dintre $a i $b. 56

if( $a > $b) { print "$a este mai mare decat $b"; } elseif( $a == $b) { print "$a este egal cu $b"; } else { print "$b este mai mare decat $b"; }

Instruciunile elseif se pot imbrica pe mai multe niveluri, dup un if iniial. Primul elseif care va fi evaluat la TRUE va fi executat. n PHP, instruciunea poate fi scris i n dou cuvinte: else if. Comportamentul su va fi acelai.

Sintaxa alternativ
PHP propune o sintaxa alternativ pentru instruciunile de control if, while, for i switch. n fiecare caz principiul este de a nlocui acolada deschis cu dou puncte (':') i acolada nchis prin, respectiv endif;, endwhile;, endfor;, sau endswitch;.
if( $a == 5): echo $a; endif;

Aceast sintax funcioneaz de asemenea cu else i elseif. Exemplul urmtor prezint o structur cu un if, un elseif i un else utilizat n aceast nou sintax.
if( $a == 5): print "$a este egal cu 5"; print "..."; elseif( $a == 6): print "$a este egal cu 6"; print "!!!"; else: print "$a este diferit de 5 si 6"; endif;

while
Bucla while este cea mai simpl implementare a unei bucle n PHP. Aceast bucl se comport la fel ca n C. Sintaxa instruciunii while este:
while( expresie) { list de instruciuni }

Execuia unei bucle while este foarte simpl. PHP execut instruciunile din lista de instruciuni att timp ct expresia buclei while, expresie, este evaluat la TRUE. Valoarea expresiei este verificat la fiecare nceput al buclei i, dac valoarea se schimb pe durata execuiei instruciunilor, execuia nu se va sfri dect la urmtoarea iteraie (de fiecare dat cnd PHP execut instruciunile are loc o iteraie). Dac expresia buclei while este FALSE naintea primei interaii, instruciunea nu va fi niciodat executat. Mai multe instruciuni pot fi executate ntr-o bucl while grupndu-le ntre acolade pentru a forma un bloc sau utiliznd sintaxa alternativ dup modelul de mai jos:
while( expresie): list de instruciuni endwhile;

Urmtoarele exemple sunt identice ca efect i afieaz toate numerele de la 1 la 10:


/* Exemplul 1 */ $i = 1; while( $i <= 10) { print $i++; /* Afiseaza valoarea lui $i inaintea incrementarii */ }

57

/* Exemplul 2 $i = 1; while( $i <= 10): print $i; $i++; endwhile;

*/

do..while
Buclele do..while seamn mult cu buclele while, dar expresia condiional este testat la sfritul fiecarei iteraii i nu la nceput. Principala diferen fa de bucla while este c prima iteraie a buclei do..while este ntotdeauna executat (expresia nu este testat dect la sfritul iteraiei). Nu exist dect o sintax posibil pentru buclele do..while:
do { list de instruciuni }while( expresie);

Exemplu:
$i = 0; do { print $i; }while( $i > 0);

Bucla de mai sus va fi executat doar o singur dat, pentru c la prima evaluare a expresiei obinem FALSE (deoarece variabila $i nu este mai mare dect 0) i execuia buclei se oprete. Utilizatorii familiari cu C sunt obinuii s utilizeze n mod diferit buclele do..while, care permite oprirea execuiei buclei, prin introducerea instruciunii break ntr-o bucl do..while. Codul urmtor demonstreaz acest lucru:
do { if( $i < 5) { print "$i nu este suficient de mare"; break; } $i *= $factor; if( $i < $minimum_limit) { break; } print "$i este bun"; }while( 0);

for
Buclele for sunt cele mai complexe bucle n PHP. Ele funcioneaz la fel ca buclele for din limbajul C. Instruciunea are urmtoarea sintax:
for( expr1; expr2; expr3) { list de instruciuni }

Prima expresie (expr1) este evaluat (executat) o singur dat, necondiionat, la nceputul buclei. La nceputul fiecrei iteraii, expresia expr2 este evaluat. Dac evaluarea devine TRUE, bucla continu i instruciunile din lista de intruciuni sunt executate. Dac evaluarea devine FALSE, execuia buclei se oprete. La sfritul fiecrei iteraii, expresia expr3 este evaluat (executat).

58

Expresiile pot fi eventual vide. Dac expresia expr2 este vid, nseamn c bucla este infinit (PHP consider implicit c expresia expr2 este TRUE, ca n C). Acest lucru poate fi util, mai ales cnd dorim s terminm bucla cu instruciunea break. n exemplele urmtoare vor fi afiate numerele de la 1 la 10:
/* Exemplul 1 */ for( $i = 1; $i <= 10; $i++) { print $i; } /* Exemplul 2 */ for( $i = 1;; $i++) { if( $i > 10) { break; } print $i; } /* Exemplul 3 $i = 1; for( ;;) { if( $i > 10) { break; } print $i; $i++; } */

/* Exemplul 3 */ for( $i = 1; $i <= 10; print $i, $i++) ;

Evident, primul exemplu (sau al patrulea) este cel mai simplu dintre toate, dar utilizarea unei expresii vide ntr-o bucl for poate fi util de multe ori. De asemeni, PHP folosete urmtoarea sintax alternativ pentru buclele for:
for( expr1; expr2; expr3): list de instruciuni endfor;

foreach
PHP4 (nu i PHP3) dispune de comanda foreach, ca Perl sau alte limbaje. Instruciunea ofer un mod simplu de a trece n revist un tablou. Exist dou sintaxe posibile, a doua este o mic, dar util, extensie a celei dinti :
foreach( { list } foreach( { list } array_expresion as $value) de instruciuni array_expresion as $key => $value) de instruciuni

Prima form trece n revist tabloul array_expression. La fiecare iteraie, valoarea elementului curent este atribuit lui $value i pointerul intern al tabloului este avansat cu un element (astfel, la urmtoarea iteraie avei acces la urmtorul element). A doua form face acelai lucru, dar cheia (indicele) elementului curent va fi atribuit variabilei $key la ficare iteraie.

59

Not: cnd foreach ncepe s fie executat, pointerul intern al fiierului este automat repoziionat la primul element al tabloului. Acest lucru nseamn c nu vei avea nevoie s facei apel la reset() nainte de foreach. De asemeni, foreach lucreaz cu o copie a tabloului astfel nct pointer-ul intern al tabloului nu este modificat ca n cazul utilizrii constructorului each. Urmtoarele dou exemple funcioneaz n acelai mod:
reset( $arr); while( list( , $value) = each( $arr)) { echo "Valoare: $value<br>\n"; } foreach( $arr as $value) { echo "Valoare: $value<br>\n"; }

Exemplele urmtoare funcioneaz, de asemeni, identic:


reset( $arr); while( list( $key, $value) = each( $arr)) { echo "Cheie: $key; Valoare: $value<br>\n"; } foreach( $arr as $key => $value) { echo "Cheie: $key; Valoare: $value<br>\n"; }

Urmeaz 3 exemple de utilizare (exemplul 2.7.1):


/* Exemplul 1: o singura valoare */ $a = array( 1, 2 3, 17); foreach( $a as $v) { print "Valoarea curenta este \$a: $v.\n"; } /* Exemplul 2: valoare (cu cheie asociata) $a = array( 1, 2 3, 17); $i = 0; /* Numai pentru afisare */ foreach( $a as $v) { print "\$a[$i] => $k.\n"; } /* Exemplul 3: valoarea si cheia $a = array( "unu" => 1, "doi" => 2, "trei" => 3, "saptesprezece" => 17 ); foreach( $a as $k => $v) { print "\$a[$k] => $v.\n"; } */ */

break
Instruciunea break permite ieirea dintr-o instruciune if, for, while sau switch. Instruciunea break accept un argument numeric opional care va indica numrul de instruciuni imbricate care trebuiesc ntrerupte. Exemplul 2.7.2:
$arr = array( 'unu', 'doi', 'trei', 'patru', 'stop', 'cinci'); while( list( , $val) = each( $arr)) {

60

if( $val == 'stop') break; /* Se poate scrie si "break 1;" */ echo "$val<br>\n";

/* Folosind un argument optional */ $i = 0; while( ++$i) { switch( $i) { case 5: echo "La 5<br>\n"; break 1; /* Se incheie doar instructinuea switch */ case 10: echo "La 10 - iesire<br>\n"; break 2; /* Se incheie instructile switch si while */ default: break; } }

continue
Instruciunea continue este utilizat ntr-o bucl pentru a sri peste instruciunile de dup continue i pn la sfritul blocului; execuia iteraiei curente este ntrerup i se trece la execuia iteraiei urmtoare. Instruciunea continue accept un argument numeric opional care va indica cte bucle imbricate vor fi ignorate. Exemplul 2.7.3:
while( list( $key, $val) = each( $arr)) { if( !( $key % 2)) // Evita elementele impare continue; executa_impar( $val); } $i = 0; while( $i++ < 5) { echo "Exterior<br>\n"; while( 1) { echo "Mijloc<br>\n"; while( 1) { echo "Interior<br>\n"; continue 3; } echo "Aici nu afiseaza niciodata.<br>\n"; } echo "Nu faceti niciodata asta.<br>\n"; }

switch
Instruciunea switch este echivalent cu o serie de instruciuni if. Cu numeroase ocazii, vei avea nevoie s comparai aceeai variabil (sau expresie) cu mai multe valori diferite i s executai diferite pari din cod n funcie de valoarea obinut. Acesta este modul de execuie al instruciunii switch. Urmtorul exemplu ilustreaz dou modaliti diferite de a scrie acelai lucru, una utilizeaz o serie de if i alta utilizeaz instruciunea switch (exemplul 2.7.4):
if( $i == 0) print "$i este egal cu 0"; if( $i == 1) print "$i este egal cu 1"; if( $i == 2)

61

print "$i este egal cu 2"; switch( $i) { case 0: print "$i este egal cu 0"; break; case 1: print "$i este egal cu 1"; break; case 2: print "$i este egal cu 2"; break; }

Este important s nelegem modul de execuie al instruciunii switch pentru a evita apariia erorilor. Instruciunea switch se execut secvenial, linie dup linie. La nceput nu este executat nici un cod. Numai cnd se gasete o valoare a selectorului identic cu o constant case, PHP execut instruciunile corespunztoare respectivei constante case. PHP continu s execute instruciunile pna la sfritul blocului de instruciuni switch sau pn cnd ntlnete instruciunea break. Dac nu utilizai instruciunea break la sfritul unui bloc case, PHP va continua s execute instruciunile din urmtorul bloc case (exemplul 2.7.5):
switch( $i) { case 0: print "$i este egal cu 0"; case 1: print "$i este egal cu 1"; case 2: print "$i este egal cu 2"; }

n acest exemplu, dac $i este egal cu 0, PHP va executa toate instruciunile print. Dac $i este egal cu 1, PHP va executa ultimele dou instruciuni print i numai dac $i este egal cu 2 vei obine rezultatul scontat, adic se va afia $i este egal cu 2. Deci, imporatant este sa folosii corect instruciunea break. n comanda switch, condiia este evaluat o singur dat i rezultatul este comparat cu fiecare constant case. ntr-o instruciune elseif, condiia este reevaluat. Dac condiia voastr este mai complicat dect o simpl comparaie sau apare ntr-o bucl, instruciunea switch se poate dovedi mai rapid. Lista de instruciuni a unei constante case poate fi vid; n acest caz PHP va utiliza lista de instruciuni din case-ul urmtor.
switch( $i) { case 0: case 1: case 2: print "$i este mai mic dect 3, dar nu este negativ"; break; case 3: print "$i este egal cu 3"; }

Un caz special l constituie expresia predefinit default. Aceast expresie indic orice expresie diferit de constantele case anterioare (exemplul 2.7.6):
switch( $i) { case 0: print "$i este egal cu 0"; break; case 1: print "$i este egal cu 1"; break; case 2: print "$i este egal cu 2"; break;

62

default: print "$i nu este egal cu 0, 1 sau 2"; }

Observaie: expresia predefinit default poate fi folosit oriunde n instruciunea switch. Expresiile case pot fi orice expresie scalar de tip ntreg, virgul mobil sau ir de caractere. Tablourile i obiectele pot fi folosite numai dac sunt derefereniate la un tip simplu. Sintaxa alternativ pentru aceast structur de control este urmtoarea:
switch( $i): case 0: print "$i break; case 1: print "$i break; case 2: print "$i break; default: print "$i endswitch; este egal cu 0"; este egal cu 1"; este egal cu 2"; nu este egal cu 0, 1 sau 2";

include()
Funcia include() introduce i evalueaz fiierul specificat n argument. Dac URL fopen wrappers nu sunt disponibile n PHP (aa cum sunt n configuraia implicit), putei specifica fiierul care trebuie inclus utiliznd un URL n locul unui pathname local. Pentru a evita utilizarea eronat a fiierului inclus, orice cod din fiierul destinaie care trebuie executat ca un cod PHP trebuie ncadrat de tag-uri de nceput i sfrit valide n PHP. De asemeni, se poate folosi o instruciune include() ntr-o bucl pentru a include mai multe fiiere diferite, aa cum reiese din exemplul urmtor:
$files = array( 'unu.inc', 'doi.inc', 'trei.inc'); for( $i = 0; $i < count( $files); $i++) { include( $files[ $i]); }

Instruciunea include() este reevaluat de fiecare dat cnd este ntlnit ntr-un cod PHP. Deoarece include() este o construcie special a limbajului, trebuie s o includei ntr-un bloc de instruciuni dac ea apare ntr-un bloc condiional. Exemplu:
/* Utilizarea este GRESITA si nu va functiona in modul dorit */ if( $condition) include( $file); else include( $other); /* Aceasta este CORECT */ if( $condition) { include( $file); } else { include( $other); }

n PHP4, ct i n PHP3, se poate executa o instruciune return n interiorul unui fiier inclus cu include(), execuia determinnd ncheierea procesului n respectivul fiier i revenirea n scriptul care l-a solicitat. De asemeni, PHP4 permite s returnai valori din fiierele incluse cu include(). Putei folosi aceste valori ca i cum ar fi returnate de o funcie normal. Exemplu:
/* Fisierul test.inc */

63

/* Se presupune ca fisierul test.inc exista in acelasi director cu fisierul main.html */ echo "Inainte de return<br>\n"; if( 1) { return 27; } echo "Dupa return<br>\n"; /* ... in fisierul main.html */ /* Presupunem ca fisierul main.html contine aceasta: */ $retval = include( 'test.inc'); echo "Fisierul returneaza: '$retval'<br>\n";

Atunci cnd main.html este apelat n PHP3, el va genera o eroare de analiz la linia 3 deoarece n PHP3 nu putem evalua valori returnate de include(). n PHP4 rezultatul va fi:
Inainte de return Fisierul returneaza: '27'

S presupunem acum c main.html a fost modificat i conine codul urmtor:


include( 'test.inc'); echo "Intoarcere in main.html<br>\n";

n PHP4 se va afia:
Inainte de return Intoarcere in main.html

Din contr, PHP3 afieaz:


Inainte de return 27 Intoarcere in main.html Parse error: parse error in main.html on line 5

Eroarea de analiz de mai sus este rezultatul faptului c instruciunea return este inclus mpreun cu test.inc n acelai bloc. Dac instruciunea return este mutat n afara blocului, se afieaz:
Inainte de return 27 Intoarcere in main.html

"27" arat c PHP3 nu suport returnarea valorilor din fiiere n acest mod. Este important de notat c atunci cnd un fiier este inclus cu include() codul pe care l conine motenete domeniul variabilelor corespunzator liniei pe care apare instruciunea include() n cod. Orice variabil disponibil pe respectiva linie va fi disponibil i n fiierul inclus.

include_once
Instruciunea include_once include i evalueaz fiierul specificat n timpul execuiei scriptului. Comportamentul este similar cu cel al instruciunii include(), deosebirea major fiind aceea c dac codul din fiier a fost deja inclus n script operaia nu va fi repetat. Vom folosi aceast instruciune cnd un fiier ar putea fi inclus i evaluat de mai multe ori n execuia unui anumit script i dorim s ne asigurm c includerea sa se va efectua numai odat pentru a evita problemele care pot s apar la redefinirea funciilor, reiniializarea variabilelor etc.

II.8 Funcii
Funciile definite de utilizator
O funcie poate fi definit de utilizator conform sintaxei urmtoare:
function nume_functie( $arg1, $arg2, ..., $argN) { echo "Exemplu de functie.\n"; return $retval; }

ntr-o funcie poate s apar orice cod PHP valid, chiar alte funcii i definiii de clase.

64

n PHP3, funciile trebuie s fie definite nainte de a fi refereniate; n PHP4 nu exist o asemenea restricie. PHP nu susine funcii de suprancarcare, nu se poate anula definirea sau redefini o funcie declarat anterior. PHP3 nu accept numr variabil de argumente n antetul funciilor, dar accept argumente implicite.

Argumentul funciilor
Informaiile pot fi transmise funciilor print-o list de argumente. n aceast list variabilele i/sau constantele sunt delimitate prin virgul. PHP accept transmiterea argumentelor prin valoare (implicit), prin referin i argumente cu valori implicite. Listele cu numr variabil de argumente sunt acceptate doar n versiunea PHP4. Un efect similar poate fi obinut n PHP3 transmind funciei un tablou de argumente. Exemplu:
function takes_array( $input) { echo "$input[0] + $input[1] = ", $input[0] + $input[1]; }

Transmiterea argumentelor prin referin


Implicit, argumentele funciilor sunt transmise prin valoare (n sensul c schimbarea valorii argumentului n interiorul funciei nu se reflect i n afara funciei). Dac dorii s permitei unei funcii s modifice argumentele sale, acestea trebuie transmise prin referin. Dac vrei ca un argument al unei funcii s fie transmis prin referin, trebuie s precedai cu un '&' numele argumentului n definiia funciei, ca n exemplul de mai jos (exemplul 2.8.1):
function add_some_extra( &$string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra( $str); echo $str; // Se va afisa This is a string, and something extra.

Dac vrei s transmitei o variabil prin referin unei funcii care nu face acest lucru n mod implicit, trebuie s precedai cu un '&' numele argumentului n apelul funciei (exemplul 2.8.2):
function my_function( $string) { $string .= 'and something extra.'; } $str = 'This is a string, '; my_function( $str); echo $str; // Se va afisa This is a string, my_function( &$str); echo $str; // Se va afisa This is a string, and something extra.

Valorile argumentelor implicite


O funcie poate defini valorile implicite ale argumentelor scalare n stilul C++, ca n exemplul de mai jos:
function makecoffee( $type = "cappucino") { return "Making a cup of $type.\n"; } echo makecoffee (); echo makecoffee ( "espresso");

Rezultatul acestui cod este:


Making a cup of cappucino. Making a cup of espresso.

65

Valoarea implicit trebuie s fie o expresie constant, nu o variabil sau un membru de clas. Observai c atunci cnd folosii argumente implicite, orice astfel de argument trebuie s fie n lista argumentelor n dreapta orcrui argument neimplicit, altfel nu vom obine rezultatul ateptat. Considerai exemplul urmtor:
function makeyogurt( $type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt( "raspberry"); // Nu merge!!!

Rezultatul acestui cod este:


Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Making a bowl of raspberry.

Acum comparai cu acesta:


function makeyogurt( $flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt( "raspberry"); // Merge!!! /* Afieaz: Making a bowl of acidophilus raspberry. */

Liste cu numr variabil de argumente


PHP4 accept liste cu numr variabil de argumente n funciile definite de utilizator. Acest lucru se obine uor, utiliznd funciile funct_num_args, funct_get_arg i funct_get_args.

Valorile returnate de funcii


Valorile sunt returnate folosind opional instruciunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri i obiecte:
function square( $num) { return $num * $num; } echo square( 4); // Se afieaz 16

Nu putei returna valori multiple dintr-o funcie, dar rezultate asemntoare pot fi obinute prin returnarea unui tablou:
function small_numbers() { return array( 0, 1, 2); } list( $zero, $one, $two) = small_numbers();

Pentru a returna o referin dintr-o funcie, trebuie folosit operatorul '&' att n declaraia funciei dar i cnd atribuii valoarea returnat unei variabile, ca n exemplul de mai jos:
function &returns_reference() { return &$someref; } $newref = &returns_reference();

Funcii variabile
PHP susine conceptul de funcii variabile. Aceasta nseamn c dac numele unei variabile este urmat de paranteze, PHP va caut o funcie cu acelai nume i va ncerca s o execute. Exemplul 2.8.3:
function fct() { echo "In fct()<br>\n";

66

} function bar( $arg = '') { echo "In bar(): argument was '$arg'<br>\n"; } $func = 'fct'; $func(); $func = 'bar'; $func( 'test');

I.9 Clase i obiecte


O clas este o colecie de variabile i de funcii care utilizeaz aceste variabile. O clas se definete utiliznd urmtoarea sintax:
class Cart { var $items; // Tablou asociativ de articole

// Adauga $num articole de tipul $artnr function add_item( $artnr, $num) { $this->items[ $artnr] += $num; } // Elimina $num articole de tipul $artnr function remove_item( $artnr, $num) { if( $this->items[ $artnr] > $num) { $this->items[ $artnr] -= $num; return true; } else { return false; } } }

Construcia de mai sus definete o clas Cart format dintr-un tablou asociativ de articole i dou funcii pentru a aduga i a elimina articole din tablou. Not: n PHP4 sunt permii doar iniializatori constani pentru variabile var. Pentru iniializatorii neconstani trebuie folosii constructori.
/* Acest exemplu nu va functiona PHP4 class TestClass { var $todays_date = date( "Y-m-d"); var $name = $a_name; } /* Asa trebuie procedat class TestClass { var $todays_date; var $name; */ */

function Cart() { $this->todays_date = date( "Y-m-d); $this->name = $GLOBALS[ 'a_name']; }

Clasele sunt tipuri. Pentru a crea o variabil de tipul dorit se folosete operatorul new. 67

$cart = new Cart; $cart->add_item( "10", 1);

Acest cod creaz un obiect $cart din clasa Cart. Funcia add_item() a acestui obiect este apelat pentru a aduga un articol cu numrul 10 n tabloul $cart->items. Clasele pot fi extensii ale altor clase. Aceast noiune se numete motenire. Clasa extins sau derivat posed toate variabilele i funciile clasei de baz alturi de variabilele i funciile definite n extensie. Acest lucrul se realizeaz utiliznd cuvntul cheie extends. Motenirea multipl nu este acceptat.
class Named_Cart extends Cart { var $owner; function set_owner( $an_owner) { $this->owner = $an_owner; } }

Codul de mai sus definete o clas Named_Cart care are toate variabilele i funciile din Cart plus o variabil suplimentar $owner i o funcie suplimentar set_owner(). Putei crea un obiect $ncart cu operatorul new i apoi putei seta proprietile obiectului. Exemplu:
$ncart = new Named_Cart; $ncart->set_owner( "Kris"); print $ncart->owner; $ncart->add_item( "10", 1); // Creaza un nou obiect // Seteaza proprietatea owner // Mostenire de la clasa de baza

n funciile unei clase variabila $this nseamn obiectul curent. Pentru a accesa o variabil sau funcie a obiectului curent, numit $proba, trebuie s utilizm construcia $this->proba. Att n interiorul ct i n afara obiectului, nu este necesar semnul '$' ( n faa unei "proprieti") cnd accesai o proprietate a acestuia. Exemplu:
$ncart->owner = "Chris"; // Fr $ n faa proprietii $owner $ncart->$owner; // Este invalid deoarece $ncart->$owner = $ncart->"" $my_var = 'owner'; $ncart->$my_var = "Chris"; // Este corect deoarece $ncart->$my_var = $ncart->owner

Constructorii sunt funciile dintr-o clas care au acelai nume cu clasa. Ei sunt automat apelai cnd creai o nou instan a clasei.
class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item( "10", 1); } }

Acest cod definete o clas Auto_Cart care extinde clasa Cart plus un constructor care iniializeaz obiectul cu un articol, avnd numrul 10 de fiecare dat cnd un nou obiect de tipul Auto_Cart este creat cu operatorul new. Constructorii pot avea argumente (pot fi opionale), caracteristic care i face foarte utili.
class Constructor_Cart extends Cart { function Constructor_Cart( $item = "10", $num = 1) { $this->add_item( $item, $num); } }

68

$default_cart = new Constructor_Cart; $different_cart = new Constructor_Cart( "20", 17);

II.10 Referine
Ce sunt referinele?
n PHP referinele reprezint posibilitatea de a referi coninutul unei variabile prin nume diferite. n PHP numele unei variabile difer de coninutul variabilei, deci un anumit coninut poate fi identificat prin nume diferite.

Ce fac referinele?
Referinele PHP permit referirea aceluiai coninut prin dou variabile diferite. Cnd scriei:
$a = &$b;

nseamn c $a i $b indic aceeai variabil. Al doilea lucru pe care l realizeaz referinele este s transmit variabile prin referin. Acest lucru se realizeaz folosind variabila local a funciei i variabila cu care se face apelul drept referine ctre acelai coninut. Exemplu:
function fct( &$var) { $var++; } $a = 5; fct( $a);

Apelul de mai sus va duce la obinerea valorii 6 n variabila $a. Acest lucru se ntmpl deoarece n funcia fct() variabila $var refer acelai coninut ca i variabila $a. Al treilea lucru pe care l pot face referinele este ntoarcerea unei valori prin referin.

Ce nu sunt referinele?
Referinele nu sunt pointeri. Astfel, urmtoarea construcie nu va ntoarce rezultatul ateptat:
function fct( &$var) { $var = &$GLOBALS[ "baz"]; } fct( &bar);

n momentul apelului $var va intra n corespondena cu $bar din apelator, dar va fi redirectat ctre $GLOBALS[ "baz"].

ntoarcerea referinelor
ntoarcerea prin referin este util cnd dorii s utilizai funcii pentru a gsi variabile care ar trebui legate cu acestea. Cnd returnai referine folosii sintaxa:
function &find_var( $param) { //... code... return &$found_var; } $fnc = &find_var( $bar);

n acest exemplu proprietatea obiectului returnat de funcia find_var() trebuie setat, nu copia acesteia cum s-ar ntmpla dac nu am utiliza sintaxa prin referin. 69

Observaie: spre deosebire de transmiterea parametrilor, trebuie s utilizai '&' n ambele locuri pentru a indica ce ntoarcei prin referina (i nu prin valoare cum este uzual) i pentru a spune cui i se atribuie respectiva referin.

Resetarea referinelor
Cnd resetai o referin rupei practic legatura dintre numele i coninutul variabilei. Aceasta nu nseamn ca acel coninut al variabilei va fi distrus. Exemplu:
$a = 1; $b = &$a; unset( $a);

Secvena de cod de mai sus nu va reseta $b ci numai variabila $a. Multe construcii sintactice n PHP sunt implementate prin mecanismul referinelor, deci modul lor de funcionare se poate aplica acestor construcii. Unele construcii, cum ar fi transmiterea i ntoarcerea prin referin, au fost deja menionate. Alte construcii care folosesc referinele sunt referinele globale. Cnd declarai variabila $var ca variabil global creai defapt o referin la o variabil global. Semnificaia este aceeai cu :
$var = &$GLOBALS[ "var"];

Aceasta nseamn, spre exemplu, c, resetarea variabilei $var nu va reseta i variabila global asociat.

$this
ntr-o metod obiectual $this refer ntotdeauna obiectul apelator.

Funcii pentru gestionarea fiierelor


basename
Are sintaxa:
string basename( string path)

Funcia primete ca parametru un ir reprezentnd un nume de cale i returneaz numele fiierului din calea respectiv. Exemplu:
$path = "/home/httpd/html/index.php3"; $file = basename( $path); // $file are valoarea index.php3

chgrp
Are sintaxa:
int chgrp( string filename, mixed group)

Schimb grupul fiierului filename n group. Doar superuserul poate schimba grupul unui fiier arbitrar; ceilali utilizatori pot schimba doar grupul unui fiier la care sunt membri. Funcia returneaz TRUE n caz de succes i FALSE n caz contrar. Not: funcia nu este disponibil pe platformele Windows.

chmod
Are sintaxa:
int chmod (string filename, int mode)

Schimb drepturile de acces ale fiierului filename n mode.

70

Observaie: mode nu este conisderat implicit ca fiind o valoare octal, deci irurile de caractere (de exemplu g+w) nu vor avea efectul dorit. Pentru a fi siguri c vei obine rezultatul dorit, trebuie s prefixai mode cu un zero (0):
chmod ("/somedir/somefile", 755); // zecimal; probabil incorect chmod ("/somedir/somefile", "u+rwx,go+rx"); // string; incorect chmod ("/somedir/somefile", 0755); // octal; valuare corect pentru mode

Funcia returneaz TRUE n caz de succes i FALSE n caz contrar. Not: funcia nu este disponibil pe platformele Windows.

chown
Are sintaxa:
int chown( string filename, mixed user)

Schimb proprietarul fiierului filename cu user. Doar superuserul poate schimba proprietarul unui fiier. Funcia returneaz TRUE n caz de succes i FALSE n caz contrar. Not: funcia nu este disponibil pe platformele Windows.

copy
Are sintaxa:
int copy( string source, string dest)

Funcia copie un fiier surs ntr-un fiier destinaie. Returneaz TRUE dac copierea s-a realizat cu succes i FALSE n caz contrar. Exemplu:
if( !copy( $file, $file.'.bak')) { print ( "Failed to copy $file...<br;>\n"); }

dirname
Are sintaxa:
string dirname( string path)

Funcia returneaz numele directorului din calea path. Exemplu:


$path = "/etc/passwd"; $file = dirname( $path); // $file ia valoarea /etc

diskfreespace
Are sintaxa:
float diskfreespace( string directory)

Funcia returneaz numrul octeilor disponibil n directorul sau partiia de disc precizat prin irul directory. Exemplu:
$df = diskfreespace( "/"); // $df conine numrul octeilor disponibili n "/"

fclose
Are sintaxa:
int fclose( int fp)

nchide fiierul referit prin fp. ntoarce TRUE n caz de succes i FALSE n caz contrar. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen() sau fsockopen(). 71

feof
Are sintaxa:
int feof( int fp)

Returneaz TRUE dac pointerul de fiier este poziionat pe EOF sau n caz de eroare, altfel returneaz FALSE. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen(), popen() sau fsockopen().

fflush
Are sintaxa:
int fflush( int fp)

Foreaz scrierea tuturor bufferelor de ieire n fiierul indicat de fp. Returneaz TRUE n caz de succes i FALSE n caz contrar. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen() sau fsockopen().

fgetc
Are sintaxa:
string fgetc( int fp)

Returneaz un caracter citit din fiierul fp. Returneaz FALSE n cazul n care caracterul citit este EOF. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen(), popen() sau fsockopen().

fgets
Are sintaxa:
string fgets( int fp, int length)

Returneaz un ir de maxim length-1 octei citii din fiierul indicat de fp. Citirea se ncheie cnd au fost citii length-1 octei, cnd se citete new line (este inclus n valoarea returnat) sau EOF. Dac apare o eroare la citire returneaz FALSE. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen(), popen() sau fsockopen(). Exemplu:
$fd = fopen( "/tmp/inputfile.txt", "r"); while( !feof( $fd)) { $buffer = fgets( $fd, 4096); echo $buffer; } fclose( $fd);

file
Are sintaxa:
array file( string filename [, int use_include_path])

Este identic cu funcia readfile(), cu excepia faptului c, coninutul fiierului este returnat ntr-un tablou. Fiecare element al tabloului corespunde unei linii din fiier (inclusiv caracterul new line ataat). Se poate folosi un parametru opional setat cu "1" dac dorii ca fiierul s fie cutat n calea specificat. Exemplu:
/* Scrie coninutul unei pagini web ntr-un tablou i apoi l tiprete */ $fcontents = file( 'http://www.php.net'); while( list( $line_no, $line) = each( $fcontents)) { echo "<br>Linie $line_no<br> " . htmlspecialchars( $line) . "<br>\n";

72

} /* Scrie coninutul unei pagini web ntr-un ir de caractere */ $fcontents = join( '', file( 'http://www.php.net'));

file_exists
Are sintaxa:
int file_exists( string filename)

ntoarce TRUE dac fiierul specificat prin filename exist i FALSE n caz contrar.

filesizes
Are sintaxa:
int filesize( string filename)

ntoarce dimensiunea fiierului specificat prin filename dac acesta exist i FALSE n caz de eroare.

filetype
Are sintaxa:
string filetype( string filename)

ntoarce tipul fiierului specificat prin filename dac acesta exist. Valorile posibile sunt: fifo, char, dir, block, link, file i unknown. n caz de eroare ntoarce FALSE.

fopen
Are sintaxa:
int fopen( string filename, string mode [, int use_include_path])

Funcia deschide un fiier sau un URL. n cazul deschiderii unui URL se stabilete o conexiune ctre serverul Web specificat. n cazul unui fiier obinuit acesta este cutat n sistemul propriu de fiiere i deschis. Dac deschiderea eueaz funcia returneaz FALSE. Argumentul mode poate avea una din urmtoarele valori:

'r' Deschide un fiier numai pentru citire plasnd indicatorul de fiier la nceputul acestuia;

'r+' Deschide un fiier pentru citire i scriere plasnd indicatorul de fiier la nceputul acestuia;

'w' Deschide un fiier numai pentru scriere, plaseaz indicatorul de fiier la nceputul acestuia i truncheaz fiierul la lungimea 0. Dac fiierul nu exist ateapt s fie creat;

'w+' Deschide un fiier pentru citire i scriere, plaseaz indicatorul de fiier la nceputul acestuia i truncheaz fiierul la lungimea 0. Dac fiierul nu exist ateapt s fie creat;

'a' Deschide un fiier numai pentru scriere (adugare) i plaseaz pointer-ul de fiier la sfritul acestuia. Dac fiierul nu exist ateapt s fie creat;

'a+' Deschide un fiier pentru citire i scriere (adugare) i plaseaz pointer-ul de fiier la sfritul acestuia. Dac fiierul nu exist ateapt s fie creat. 73

Argumentul mode poate conine 'b'. Aceast opiune este util n sistemele care fac diferena ntre fiierele binare i fiierele text. Dac nu este necesar, respectivul caracter va fi ignorat. Dac dorii ca fiierul s fie cutat n calea specificata (path), folosii al treilea parametru setat cu "1". Exemplu:
$fp $fp $fp $fp = = = = fopen( fopen( fopen( fopen( "/home/rasmus/file.txt", "r"); "/home/rasmus/file.gif", "wb"); "http://www.php.net/", "r"); "ftp://user:password@example.com/", "w");

fpassthru
Are sintaxa:
int fpassthru( int fp)

Funcia citete fiierul fp pna la EOF i afieaz rezultatul la ieirea standard. n cazul unei erori funcia returneaz FALSE. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen(), popen() sau fsockopen(). Dup citire funcia nchide fiierul.

fputs
Are sintaxa:
int fputs( int fp, string str [, int length])

Funcia scrie irul string n fiierul fp n ntregime (dac argumentul length lipsete) sau numai length octei din acesta. fputs() este un alias pentru fwrite() i este identic cu aceasta.

fread
Are sintaxa:
string fread( int fp, int length)

Funcia citete cel mult length octei din fiierul binar fp. Citirea se ncheie cnd s-au citit length octei sau EOF. Exemplu:
/* Citete coninutul unui fiier ntr-un ir */ $filename = "/tmp/something.txt"; $fd = fopen( $filename, "r"); $contents = fread( $fd, filesize( $filename)); fclose( $fd);

fscanf
Are sintaxa:
mixed fscanf( int fp, string format [, string var1...])

Funcia citete informaiile din fiierul indicat de fp i interpreteaz aceste informaii conform formatului specificat prin parametrul format. Dac funcia primete doar doi parametri valorile analizate vor fi returnate ca un tablou, altfel funcia va returna numrul valorilor asignate. Parametrii opionali trebuie transmii prin referin. Exemplu:
$fp = fopen( "users.txt", "r"); while( $userinfo = fscanf( $fp, "%s\t%s\t%s\n")) { list( $name, $age, $profession) = $userinfo; //... prelucreaz valorile } fclose( $fp);

fseek
Are sintaxa: 74

int fseek( int fp, int offset [, int whence])

Funcia seteaz poziia indicatorului de fiier n fiierul indicat de fp. Noua poziie, msurat n octei faa de nceputul fiierului se obine adugnd valoarea offset la poziia specificat prin argumentul whence. Aceste valori sunt definite astfel:

SEEK_SET Seteaz poziia indicatorulului de fiier la offset bytes fa de nceputul fiierului;

SEEK_CUR Seteaz poziia indicatorului de fiier la offset bytes fa de poziia curent (poziia curent plus offset);

SEEK_END Seteaz poziia indicatorului de fiier la offset bytes fa de sfritul fiierului (sfritul fiierului plus offset).

Dac argumentul whence nu este specificat se consider a fi SEEK_SET. n caz de succes funcia returneaz 0, altfel returneaz -1. Trecerea peste EOF nu este considerat eroare.

ftell
Are sintaxa:
int ftell( int fp)

Funcia returneaz poziia curent a indicatorului de fiier asociat fiierului referit prin fp. n caz de eroare ntoarce FALSE. Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen() sau popen().

ftruncate
Are sintaxa:
int ftruncate( int fp, int size)

Funcia truncheaza fiierul la lungimea specificat prin size. n caz de succes returneaz TRUE i FALSE n caz contrar.

fwrite
Are sintaxa:
int fwrite( int fp, string string [, int length])

Funcia scrie coninutul argumentului string n fiierul indicat de fp. Dac argumentul length este precizat scrierea se oprete dup length octei sau dac irul string s-a terminat.

is_dir
Are sintaxa:
bool is_dir( string filename)

ntoarce TRUE dac filename exist i este un director.

is_file
Are sintaxa:
bool is_file( string filename)

ntoarce TRUE dac filename exist i este un fiier obinuit.

is_executable
75

Are sintaxa:
bool is_file( string filename)

ntoarce TRUE dac filename exist i este executabil.

is_link
Are sintaxa:
bool is_link( string filename)

ntoarce TRUE dac filename exist i este un link simbolic.

is_readable
Are sintaxa:
bool is_readable( string filename)

ntoarce TRUE dac filename exist i poate fi citit.

is_writeable
Are sintaxa:
bool is_writeable( string filename)

ntoarce TRUE dac filename exist i poate fi scris.

link
Are sintaxa:
int link( string target, string link)

Creaz un link hard. Not: aceast funcie nu este disponibil n sistemele Windows.

mkdir
Are sintaxa:
int mkdir( string pathname, int mode)

Creaz directorul specificat de pathname. ntoarce TRUE n caz de succes i FALSE n caz contrar.

pclose
Are sintaxa:
int pclose (int fp)

nchide fiierul indicat de fp. Variabila fp trebuie s indice un fiier valid care a fost deschis cu popen() .

popen
Are sintaxa:
int popen( string command, string mode)

Deschide un pipe ctre un proces executat conform comenzii dat prin argumentul command. Funcia ntoarce identificatorul fiierului deschis, la fel ca fopen(), doar c este unidirecional (poate fi folsit doar pentru citire sau doa r pentru scriere) i trebuie nchis cu pclose().

readfile
Are sintaxa:
int readfile( string filename [, int use_include_path])

76

Citete coninutul fiierului filename i l tiprete la ieirea standard. n caz de succes ntoarce numrul de octei citii din fiier i FALSE n caz de eec. Dac dorii ca fiierul s fie cutat n calea specificat prin path al doilea parametru va fi setat cu "1".

rename
Are sintaxa:
int rename( string oldname, string newname)

Redenumete un fiier schimbndu-i numele din oldname n newname. Returneaz TRUE n caz de succes i FALSE n caz de eec.

rmdir
Are sintaxa:
int rmdir( string dirname)

terge directorul dirname numai dac acesta este gol, iar n caz de eroare ntoarce 0.

unlink
Are sintaxa:
int unlink( string filename)

terge fiierul filename i returneaz 0 sau FALSE n caz de eroare. Not: funcia nu este disponibil n sistemele Windows.

cii pentru tablouri


Aceste funcii v permit s gestionai tablourile n diferite moduri. Tablourile sunt eseniale pentru memorarea, gestionarea i operarea cu mulimi de variabile. PHP permite folosirea tablourilor uni i multidimensionale.

array
Are sintaxa:
array array( [mixed... ])

Creaz i ntoarce un tablou de parametri. Not: array() este un constructor de limbaj utilizat pentru a reprezenta tablouri i nu o funcie obinuit. Sintaxa index => valori, separat prin virgul, definete indexul i valorile. Indexul poate fi de tip ir sau numeric. Cnd indicele este omis, un index ntreg este automat produs ncepnd de la 0. Dac indexul este un ntreg, indexul urmtor produs va fi indexul ntreg mai mare cu 1. Notai c atunci cnd se definesc doi indeci identici cu valori diferite, ultima valoare o suprascrie pe prima. Urmtorul exemplu demonstreaz cum se creaz un tablou bidimensional, cum se specific cheia pentru un tablou asociativ i cum sar i continu indicii numerici din tablou:
$fruits = array( "apple"), ); "fruits" => array( "a" => "orange", "b" => "bannana", "c" =>

"numbers" => array( 1, 2, 3, 4, 5, 6), "holes" => array( "first", 5 => "second", "third")

Suprascrierea indicilor:
$array = array( 1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13); print_r( $array);

Coninutul este:
array( [0] => 1, [1] => 1, [2] => 1, [3] => 13, [4] => 1, [8] => 1, [9] => 19)

77

Notai c indicele 3 este definit de dou ori i ine valoarea sa final, 13. Indexul 4 este definit dup indexul 8 i indexul urmtor devine 9 (pentru a estima 19), de vreme ce indicele cel mai mare era 8. Urmtorul exemplu creaz un tablou cu o baz pe 1.
$primele_3_luni = array( 1 => 'ianuarie', 'februarie', 'martie'); print_r( $primele_3_luni);

Tabloul $primele_3_luni va conine:


array( [1] => 'ianuarie', [2] => 'februarie', [3] => 'martie')

array_count_values
Are sintaxa:
array array_count_values( array input)

Funcia returneaz un tablou folosind valorile din tabloul de intrare, input, drept chei i frecvena lor drept valori. Exemplu:
$array = array( 1, "salut", 1, "moneda", "salut"); array_count_values( array); // Restitue array( 1 => 2, "salut" => 2, "moneda" => 1)

array_diff
Are sintaxa:
array array_diff( array array1, array array2 [, array ...])

Funcia returneaz un tablou care conine toate valorile tabloului array1 care nu sunt prezente n nici unul din celelalte argumente; cheile sunt pstrate. Exemplu:
$array1 = array( "a" => "green", "red", "blue"); $array2 = array( "b" => "green", "yellow", "red"); $result = array_diff( $array1, $array2); // $result va reprezenta array( "blue")

array_intersect
Are sintaxa:
array array_intersect( array array1, array array2 [, array ...])

Funcia returneaz un tablou coninnd toate valorile lui array1 care sunt prezente n toate celelalte argumente; cheile sunt pstrate. Exemplu:
$array1 = array( "a" = > "vert", "rouge", "bleu"); $array2 = array ( "b" = > "vert", "jaune", "rouge"); $result = array_intersect( $array1, $array2); // $result va reprezenta array( "a" => "vert", "rouge");

array_keys
Are sintaxa:
array array_keys( array input [, mixed search_value])

Funcia returneaz cheile (numerice sau iruri de caractere) ale tabloului input. Dac argumentul search_value este specificat, atunci doar cheile corespunztoare acestei valori sunt restituite. Altfel se restituie toate cheile. Exemplu:
$array = array( 0 => 100, "color" => "red"); array_keys ( $array); // Restitue array( 0, "color")

78

$array = array( "blue", "red", "green", "blue", "blue"); array_keys ( $array, "blue"); // Restitue array( 0, 3, 4)

array_merge
Are sintaxa:
array array_merge( array array1, array array2 [, array ...])

Funcia concateneaz elementele a dou sau mai multe tablouri astfel nct elementele unui tablou se adaug la sfritul tabloului precedent. Returneaz tabloul obinut. Dac tablourile de intrare au aceleai chei tip ir de caractere, atunci ultima valoare a respectivei chei va fi scris peste cea precedent. Dac, tablourile au chei numerice identice, ultima valoare nu va suprascrie valoarea original, dar va fi adaugat. Exemplu:
$array1 = array ( "color" => "red", 2, 4); $array2 = array ( "a", "b", "color" => "green", "shape" => "trapezoid", 4); array_merge( $array1, $array2);

Tabloul obinut este:


array( "color" => "green", 2, 4, "a", "b", "shape" => "trapezoid", 4)

array_multisort
Are sintaxa:
bool array_multisort( array ar1 [, mixed arg [, mixed ... [, array ...]]])

Funcia poate fi utilizat pentru a sorta mai multe tablouri odat sau un singur tablou multidimensional n funcie de una sau mai multe dimensiuni (criterii de sortare). Sortarea nu afecteaz cheile asociative. Tablourile de intrare sunt tratate drept coloanele unui tabel care se sorteaza pe linii. Primul tablou reprezint criteriul primar de sortare. Valorile din respectivul tablou (situate pe linii) se compar ntre ele i dac sunt egale se sorteaz conform celui de al doilea tablou etc. Structura argumentelor acestei funcii este puin neobinuit, dar flexibil. Primul argument trebuie s fie obligatoriu un tablou. n continuare, fiecare argument este fie un tablou fie un criteriu de sortare. Criterii de sortare dup ordine:

SORT_ASC Ordonare n ordine cresctoare;

SORT_DESC Ordonare n ordine descresctoare.

Criterii de sortare dup tip:

SORT_REGULAR Comparar valorile normal;

SORT_NUMERIC Comparar valorile numeric;

SORT_STRING Comparar valorile ca iruri de caractere.

Nu se pot specifica dou criterii de acelai tip dup un argument. Funcia ntoarce TRUE dac sortarea a reuit i FALSE n caz contrar. 79

Exemplu (sortarea a mai multor tablouri):


$ar1 = array( "10", 100, 100, "a"); $ar2 = array( 1, 3, "2", 1); array_multisort( $ar1, $ar2);

n acest exemplu, dup sortare, primul tablou conine 10, "a", 100,100. Al doilea conine 1, 1, 2, "3". Intrarea n al doilea tablou corespunde intrrilor identice n primul tablou care au fost deasemenea ordonate. Exemplu (sortarea tablourilor multidimensionale):
$ar = array( array( "10", 100, 100, "a"), array( 1, 3, "2", 1)); array_multisort( $ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC);

n acest exemplu, dup sortare, primul tablou va conine 10, 100, 100, "a" (a fost sortat ca iruri de caractere n ordine cresctoare), iar al doilea va conine 1, 3, "2", 1 (sortat ca numere n ordine descresctoare).

array_pad
Are sintaxa:
array array_pad( array input, int pad_size, mixed pad_value)

Funcia returneaz o copie a tabloului input avnd dimensiunea specificat prin pad_size i umplut cu valoarea pad_value. Daca argumentul pad_size este pozitiv tabloul este umplut la dreapta, iar dac este negativ este umplut la stnga. Dac valoarea absolut a argumentului pad_size este mai mic sau egal cu lungimea tabloului input umplerea nu are loc. Exemplu:
$input = array( 12, 10, 9); $result = array_pad( $input, 5, 0); 0) $result = array_pad( $input, -7, -1); 12, 10, 9) $result = array_pad( $input, 2, "noop"); // Tabloul $result conine (12, 10, 9, 0, // Tabloul $result conine (-1, -1, -1, -1, // Umplerea nu are loc

array_pop
Are sintaxa:
mixed array_pop( array array)

Funcia extrage i returneaz ultimul element din tabloul array i micoreaz dimensiunea tabloului cu o unitate. Exemplu:
$my_list = array( "orange", "apple", "raspberry"); $fruit = array_pop( $my_list); /* n acest moment $my_list are doar 2 elemente: "orange" i "apple"; $fruit are "raspberry" */

array_push
Are sintaxa:
int array_push( array array, mixed var [, mixed ...])

Funcia trateaz tabloul ca pe o coad i introduce valorile primite ca argumente la sfritul tabloului. Lungimea tabloului crete cu numrul de variabile introduse. Are acelai efect ca i instruciunea:
$array[] = $var;

repetat pentru fiecare $var. Exemplu:


$queue = array( 1, 2); array_push( $queue, "+", 3); // Tabloul $queue va conine: 1, 2, "+" i 3

80

Funcia returneaz noul numr de elemente din tablou.

array_reverse
Are sintaxa:
array array_revers( array array [, bool preserve_keys])

Funcia returneaz un nou tablou care conine elementele tabloului array n ordine invers. Exemplu:
$input = array( "php", 4.0, array( "green", "red")); $result = array_reverse( $input); // Tabloul $result va conine ( array( "green", "red"), 4.0, "php")

Not: funcia nu modifi cheile tabloului dac argumentul preserve_key este TRUE.

array_shift
Are sintaxa:
mixed array_shift( array array)

Funcia extrage i returneaz primul element din tabloul array, mut elementele cu o poziie spre stnga i reduce dimensiunea tabloului cu 1. Exemplu:
$args = array( "-v", "-f"); $opt = array_shift( $args); /* Tabloul $argc va conine elementul "-f"; variabila $opt va fi "-v" */

array_slice
Are sintaxa:
array array_splice( array input, int offset [, int length [, array replacement]])

Funcia extrage o poriune dintr-un tablou; returneaz secvena elementelor din argumentul input specificat prin parametrii offset i length. Dac offset este pozitiv, secvena va ncepe la acea poziie din tablou. Dac offsset este negativ, secvena va ncepe la aceea poziie fa de sfritul tabloului. Dac length este precizat i este pozitiv, atunci secvena va avea length elemente. Dac length este precizat i este negativ, atunci secvena se va opri la length elemente fa de sfritul tabloului. Dac length lipsete secvena va conine toate elementele ncepnd de la poziia offset pn la sfritul tabloului. Exemplu:
$input = array( "a", "b", "c", $output = array_slice( $input, $output = array_slice( $input, $output = array_slice( $input, $output = array_slice( $input, "d", "e"); 2); // 2, -1); // -2, 1); // 0, 3); // Returneaz Returneaz Returneaz Returneaz "c", "d" i "e" "c" i "d" "d" "a", "b" i "c"

array_sum
Are sintaxa:
mixed array_sum( array arr)

Funcia calculeaz i returneaz suma elementelor din tabloul arr ca un numr ntreg sau float.

array_unique
Are sintaxa:
array array_unique( array array)

81

Funcia elimin valorile duplicate din tablou; returneaz un tablou nou care nu conine valori duplicate; cheile nu se modific. Exemplu:
$input = array( "a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique( $input); // Tabloul $result conine ( "a" => "green", "red", "blue")

array_unshift
Are sintaxa:
int array_unshift( array array, mixed var [, mixed ...])

Funcia insereaz valorile specificate n list la nceputul tabloului array n aceeai ordine. Valorile iniiale sunt deplasate spre dreapta i dimensiunea tabloului crete cu numrul valorilor introduse; returneaz noua dimensiune a tabloului. Exemplu:
$stack = array( "p1", "p3"); array_unshift( $stack, "p4", "p5", "p6"); // Tabloul $stack va conine: "p4", "p5", "p6", "p1" i "p3"

array_values
Are sintaxa:
array array_values( array input)

Funcia returneaz toate valorile din tabloul input. Exemplu:


$tshirt = array( "size" => "XL", "color" => "gold"); array_values( $tshirt); // Returneaz array( "XL", "gold")

arsort
Are sintaxa:
void arsort( array array [, int sort_flags])

Funcia sorteaz descresctor tabloul array astfel nct legturile dintre indicii asociativi i valorile indicate de ctre acetia s se menin. Vei folosi aceast funcie pentru a sorta tablouri asociative n care ordinea actual a elementelor este important. Exemplu:
$fruits = array( "d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); arsort( $fruits); reset( $fruits); while( list( $key, $val) = each( $fruits)) { echo "$key = $val\n"; }

Se va obine:
fruits[a] fruits[d] fruits[b] fruits[c] = = = = orange lemon banana apple

Fructele au fost sortate n ordine alfabetic descresctoare pstrnd legtura dintre indec7#351;ii asociativi i elemente.

asort
Are sintaxa:
void asort( array array [, int sort_flags]))

82

Funcia sorteaz cresctor tabloul array astfel nct legturile dintre indicii asociativi i valorile indicate de ctre acetia s se menin. Vei folosi aceast funcie pentru a sorta tablouri asociative n care ordinea actual a elementelor este important. Exemplu:
$fruits = array( "d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); arsort( $fruits); reset( $fruits); while( list( $key, $val) = each( $fruits)) { echo "$key = $val\n"; }

Fructele au fost aranjate n ordine alfabetic pstrnd legtura dintre indec7#351;ii asociativi i elemente. Exemplul de mai sus va furniza rezultatul:
fruits[c] fruits[b] fruits[d] fruits[a] = = = = apple banana lemon orange

count
Are sintaxa:
int count( mixed var)

Funcia returneaz numrul de elemente din argumentul var, care este de obicei un tablou. ntoarce 1 dac variabila nu este un tablou i 0 dac variabila nu a fost iniializat. Exemplu:
$a [0] = 1; $a [1] = 3; $a [2] = 5; $result = count( $a);

// $result == 3

each
Are sintaxa:
array each( array array)

Funcia returneaz cheia curent i valoarea corespunztoare din tabloul array i avanseaz pointerul tabloului. Aceast pereche de valori este returnat ntr-un tablou cu 4 elemente, cu cheile 0, 1, key i value. Elementele 0 i key conin numele elementului din tablou, iar 1 i value conin valoarea. Dac s-a ajuns la sfritul tabloului funcia each() returneaz FALSE. Exemplu:
$my_list = array( "bob", "fred", "jussi", "jouni", "egon", "marliese"); $bar = each( $my_list);

Variabila $bar va conine conine urmtoarele perechi key/value:


0 => 0 1 => 'bob' key => 0 value => 'bob' $my_list = array( "Robert" => "Bob", "Seppo" => "Sepi"); $bar = each( $my_list);

Variabila $bar va conine conine urmtoarele perechi key/value:


0 1 key value => => => => 'Robert' 'Bob' 'Robert' 'Bob'

Funcia each() este utilizat n conjuctur cu funcia list() pentru a traversa un tablou, de exemplu $HTTP_POST_VARS: 83

echo "Valorile trasmise via POST:<br>"; reset( $HTTP_POST_VARS); while( list( $key, $val) = each( $HTTP_POST_VARS)) { echo "$key => $val<br>"; }

end
Are sintaxa:
end( array array)

Funcia poziioneaz poinerul intern al tabloului pe ultimul element.

in_array
Are sintaxa:
bool in_array( mixed needle, array haystack)

Funcia caut valoarea needl n tabloul haystack i ntoarce TRUE dac o gsete i FALSE n caz contrar. Exemplu:
$os = array( "Mac", "NT", "Linux", "OS/2"); if( in_array( "Linux", $os)) print "Got Linux";

key
Are sintaxa:
mixed key( array array)

Funcia ntoarce indicele elementului corespunztor poziiei curente n tablou.

list
Are sintaxa:
void list(...)

Nu este o funcie reala ci un constructor de limbaj. Este utilizat pentru a asigna o list de variabile printro singur operaie. Exemplu:
&l;table> <tr> <th>Numele angajatului</th> <th>Salariu</th> </tr> <?php $result = mysql( $conn, "SELECT id, name, salary FROM employees"); while( list( $id, $name, $salary) = mysql_fetch_now( $result)) { print( " <tr>\n" . " <td><a href=\"info.php?id=$id\">$name</a></td>\n" . " <td>$salariu</td>\n" . " </tr>\n"); } ?> </table>

natsort
Are sintaxa:
void natsort( array array)

Aceast funcie implementeaz un algoritm de sortare care ordoneaz alfanumeric irurile, aa cum ar proceda un operator uman. Aceast ordonare se numete ordonare natural. Diferena dintre acest 84

algoritm i modul uzual n care un calculator sorteaz irurile - utiliznd de exemplu sort() - reiese din exemplul urmator:
$array1 = $array2 = array( "img12.png", "img10.png", "img2.png", "img1.png"); sort( $array1); echo "Standard sorting\n"; print_r( $array1); natsort( $array2); echo "\nNatural order sorting\n"; print_r( $array2);

Codul anterior genereaz urm73259;toarea ieire:


Standard sorting Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) Natural Array ( [3] [2] [1] [0] ) order sorting => => => => img1.png img2.png img10.png img12.png

natcasesort
Are sintaxa:
void natcasesort( array array)

Aceast funcie implementeaz un algoritm case-insenzitiv de sortare care ordoneaz alfanumeric irurile, aa cum ar proceda un operator uman.

next
Are sintaxa:
mixed next( array array)

Funcia avanseaz pointer-ul intern la urmtorul element din tablou care este returnat drept rezultat. Dac tabloul nu mai are elemente se returneaz FALSE.

prev
Are sintaxa:
mixed prev( array array)

Funcia devanseaz pointer-ul intern cu o poziie i returneaz elementul respectiv. Dac tabloul nu mai are elemente se returneaz FALSE.

range
Are sintaxa:
array range( int low, int high)

Funcia creaz i returneaz un tablou de ntregi cu valori cuprinse ntre low i high, inclusiv.

reset
Are sintaxa:
mixed reset( array array)

85

Funcia poziioneaza pointerul intern al unui tablou pe primul element al acestuia i returneaz primul element din tablou.

rsort
Are sintaxa:
void rsort( array array [, int sort_flags])

Funcia sorteaz un tablou n ordine descresctoare. Exemplu:


$fruits = array( "lemon", "orange", "banana", "apple"); rsort( $fruits); reset( $fruits); while( list($key, $val) = each( $fruits)) { echo "$key -> $val\n"; }

Codul de mai sus afieaz:


fruits[0] fruits[1] fruits[2] fruits[3] = = = = orange lemon banana apple

sizeof
Are sintaxa:
int sizeof( array array)

Funcia returneaz numrul de elemente dintr-un tablou.

sort
Are sintaxa:
void sort( array array [, int sort_flags])])

Funcia sorteaz elementele unuii tablou n ordine cresctoare. Exemplu:


$fruits = array( "lemon", "orange", "banana", "apple"); sort( $fruits); reset( $fruits); while( list($key, $val) = each( $fruits)) { echo "$key -> $val\n"; }

Codul de mai sus afieaz:


fruits[3] fruits[2] fruits[1] fruits[0] = = = = apple banana lemon orange

Parametrul sort_flags poate fi utilizat pentru a modifica modul de sortare, fiind disponibile urmtoarele valori:

SORT_REGULAR Comparar valorile normal;

SORT_NUMERIC Comparar valorile numeric;

SORT_STRING 86

Comparar valorile ca iruri de caractere.

III. Functii cu expresii regulate (Perl-Compatible)


Sintaxa pentru pattern-ul folosit n aceste funcii este asemntoare cu cea din functiile Perl. Orice expresie trebuie delimitat de 2 aceleai caractere, de exemplu slash (/). Ca delimtatori pot fi folosii orice caracter n afara de cele alfanumerice si backslash (\). Dac caracterul delimitator este folosit n expresie el trebuie securizat (precedat de backslash). Dup caracterul delimitator de sfrit pot aprea modiifcatorii care fac potrivirea. Vezi Modificatori pattern Exemplu 1. Exemple de pattern valide

/<\/\w+>/ |(\d{3})-\d+|Sm /^(?i)php[34]/ /href='(.*)' - lipsete delimitatorul de sfrit /\w+\s*\w+/J - modificator necunoscut 'J' 1-\d3-\d3-\d4| - lipsete delimitatorul de nceput

Exemplu 2. Exemple de pattern invalide

Not: Expresiile regulate Perl-compatibile exist in PHP 4 i n PHP 3.0.9 i versiunile ulterioare. Cuprins

preg_match - Caut dup o expresie regulat preg_match_all - Caut toate potrivirile dup o expresie regulat preg_replace - Caut dup o expresie regulat i nlocuiete preg_split - Desparte un string dup o expresie regulat preg_quote - Securizeaz caracterele speciale din expresii regulate preg_grep - Returneaz un tablou cu potrivirile unei expresii regulate Modificatori pattern - Descrie modificatorii pentru pattern in expresii regulate Sintaxa pattern - Descrie sintaxa expresiilor regulate Perl-Compatibile

preg_match
(PHP3 >= 3.0.9, PHP4 ) Descriere int preg_match (string pattern, string subject [, array matches]) Caut n subject potriviri pentru expresia regulat din pattern. Dac apare si tabloul matches, atunci rezultatul cutrii este stocat n acest tablou. $matches[0] va conine subirul care se potrivete ntregului pattern, $matches[1] va avea subsirul care se potrivete primului subpattern dintre paranteze, i.a.m.d. ntoarce true dac s-a gsit un subir din subject ce se potrivete pattern dat, sau false n caz contrar. Exemplu 1. Caut subirul "php"
// caracterul "i" de dup pattern indic o cutare case-insensitive if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {

87

print "A match was found."; } else { print "A match was not found."; }

Exemplu 2. Caut cuvntul "web"


// sirul \b din pattern indic marginea unui cuvnt, deci ntregul cuvntul // "web" este cutat, i nu pri din el de exemplu "webbing" sau "cobweb" if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; }

Exemplu 3. Afl domeniul dintr-o adres URL


preg_match("/^(.*)([^\.]+\.[^\.]+)(\/.*)?/U", "http://www.php.net/index.html", $matches); // afieaz subsirul ce s-a potrivit celui de-al 2-lea subpattern dintre paranteze echo "domain name is: ".$matches[2]."\n";

Acest exemplu v-a afia:


domain name is: php.net

preg_match_all
(PHP3 >= 3.0.9, PHP4 ) Descriere int preg_match_all (string pattern, string subject, array matches [, int order]) Caut n subject toate potrivirile pentru expresia regulat din pattern i le pune n matches n ordinea specificat de utilizator. Dup ce prima potrivire a fost gsit, urmatoarele cutri ncep de la sfritul ultimei potriviri. order poate fi:

PREG_PATTERN_ORDER Va rezulta astfel, $matches[0] este un tablou cu potrivirile pentru ntregul pattern, $matches[1] este un tablou cu subiruri potrivite primului subpatern dinte paranteze, s.a.m.d.
preg_match_all ("|<[^>]+>(.*)]+>|U", "<b>example: </b><div align=left>this is a test</div>", $out, PREG_PATTERN_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"

Se va afia:
<b>example: </b>, <div align=left>this is a test</div> example: , this is a test

Deci, $out[0] conine un tablou de string care s-au potrivit ntregului pattern, i $out[1] conine un tablou cu siruri de caractere aflate ntre taguri.

PREG_SET_ORDER Va rezulta astfel, $matches[0] este un tablou cu primul set de potriviri, $matches[1] este un tablou cu al doilea set de potriviri, s.a.m.d.
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>this is a test</div>",

88

$out, PREG_SET_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"

Se va afia:
<b>example: </b>, example: <div align=left>this is a test</div>, this is a test

n acest caz, $matches[0] este primul set de potriviri, i $matches[0][0] are irul potrivit ntregului pattern, $matches[0][1] are irul potrivit primului subpattern .a.m.d. Similar, n $matches[1] sunt al doilea set de potriviri, etc. Daca order nu este specificat, implicit este PREG_PATTERN_ORDER. Returneaz numrul potrivirilor pentru ntregul pattern, sau false dac nu s-a gsit nici o potrivire. Exemplu 1. Aflarea tuturor nr de telefon dintr-un text.
preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Call 555-1212 or 1-800-555-1212", $phones);

Exemplu 2. Aflarea tagurilor HTML.


// sirul \\2 este un exemplu de pre-referire. nseamn c // trebuie s se potriveasc cu al 2-lea set de paranteze din // expresia regulat, adic ([\w]+) n acest caz. $html = "<b>bold text</b><a href=howdy.html>click me</a> preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches); for ($i=0; $i< count($matches[0]); $i++) { echo "matched: ".$matches[0][$i]."\n"; echo "part 1: ".$matches[1][$i]."\n"; echo "part 2: ".$matches[3][$i]."\n"; echo "part 3: ".$matches[4][$i]."\n\n"; }

Acest exemplu v-a afia:


matched: <b>bold text</b> part 1: <b> part 2: bold text part 3: </b> matched: <a href=howdy.html>click me</a> part 1: <a href=howdy.html> part 2: click me part 3: </a>

preg_replace
(PHP3 >= 3.0.9, PHP4 ) Descriere mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit]) Caut n subject potrivirile cu pattern i le nlociete cu replacement. Dac apare si limit, atunci doar limit potriviri vor fi nlocuite; dac nu apare sau este -1, atunci toate potrivirile sunt nlocuite. Replacement poate conine referine de forma \\n. Fiecare astfel de referin va fi nlocuit cu textul capturat de al n-lea subpattern dintre paranteze. n poate lua valori ntre 0 i 99, i \\0 se refer la textul potrivit ntregului pattern. Parantezele deschise sunt numrate de la stnga la dreapta(pornind de la 1) pentru a obtine numrul de subpattern-uri care captureaz textul. Dac nu se gsete nici o potrivire n subject, atunci va fi returnat neschimbat. Fiecare parametru din preg_replace() poate fi un tablou. 89

Dac subject este un tablou, atunci cutarea i nlocuirea se fac pe fiecare element din tablou, iar rezultatul este tot un tablou. Dac pattern i replacement sunt tablouri, atunci preg_replace() ia o valoare din fiecare tablou i le folosete pentru a face cutarea i nlocuirea n subject. Dac replacement are mai putine valori dect pattern, atunci sirul vid este folosit pentru restul valorilor de nlocuire. Dac pattern este un tablou i replacement este un string, atunci acest string este folosit pentru fiecare pattern. Invers nu ar avea sens. Modificatorul /e face ca preg_replace() s trateze paramentrul replacement ca un cod PHP dup ce s-a efectuat nlocuirea. Indicaie: avei grij ca replacement s fie un cod PHP valid, altfel PHP va da eroare la linia care contine preg_replace(). Exemplu 1. nlocuire valori
$patterns = array ("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/"); $replace = array ("\\3/\\4/\\1", "$\\1 ="); print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");

Acest exemplu v-a afia:


$startDate = 5/27/1999

Exemplu 2. Folosirea modificatorului /e


preg_replace ("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body);

Codul de mai sus va scrie toate tagurile HTML cu litere mari. Exemplu 3. Converteste HTML n text
// // // // $document va contine un document HTML Acest cod va sterge toate tagurile HTML, sectiuni javascript si spatii albe. Va converti de asemenea unele entitati HTML n caracterul care-l reprezinta.

$search = array ("']*?>.*?'si", // Strip out javascript "'<[\/\!]*?[^<>]*?>'si", // Strip out html tags "'([\r\n])[\s]+'", // Strip out white space "'&(quote|#34);'i", // Replace html entities "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e"); // evaluate as php $replace = array ("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(\\1)"); $text = preg_replace ($search, $replace, $document);

preg_split
(PHP3 >= 3.0.9, PHP4 ) 90

Descriere array preg_split (string pattern, string subject [, int limit [, int flags]]) Not: Parametrul flags a fost adugat n PHP 4 Beta 3. ntoarce ca valoare un tablou ce conine subiruri din subject ce se potrivesc cu pattern. Dac apare limit, atunci doar limit subiruri sunt returnate Dac flags este PREG_SPLIT_NO_EMPTY atunci doar partile nevide vor fi prelucrate de preg_split(). Exemplu 1. Aflarea prilor componente ale unui ir.
// mparte fraza n cuvinte desprite de virgul sau spaii albe, // adic " ", \r, \t, \n i \f $keywords = preg_split ("/[\s,]+/", "hypertext language, programming");

preg_quote
(PHP3 >= 3.0.9, PHP4 ) Descriere string preg_quote (string str [, string delimiter]) preg_quote pune n faa fiecrui caracter care face parte din sintaxa expresiilor regulate un backslash. Aceasta este util cnd irul conine caractere speciale Dac este specificat si parametrul opional delimiter, i acestuia i se va pune un backslash n fa. Este util pentru a securiza i acest delimitator. Cel mai folosit delimitator este / Caracterele speciale din expresiile regulate sunt:
. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :

Exemplu 1.
$keywords = "$40 for a g3/400"; $keywords = preg_quote ($keywords, "/"); echo $keywords; // returns \$40 for a g3\/400

Exemplu 2. Scrie cu caractere italice un cuvnt dintr-un text


// In acest exemplu, preg_quote($word) este folosit // pentru ca asteriscurile (*) sa nu fie interpretate // de expresia regulata. $textbody = "This book is *very* difficult to find."; $word = "*very*"; $textbody = preg_replace ("/".preg_quote($word)."/", "<i>".$word."</i>", $textbody);

preg_grep
(PHP3 >= 3.0.9, PHP4 ) Descriere array preg_grep (string pattern, array input) preg_grep() returneaz un tablou care are elemente din tabloul input care s-au potrivit cu pattern Exemplu 1. Exemplu preg_grep()
// returneaza toate elementele din tablou // care contin numere cu virgula $fl_array = preg_grep ("/^(\d+)?\.\d+$/", $array);

91

V. Functii cu expresii regulate (POSIX Extended)


Expresiile regulate sunt folosite pentru prelucrarea irurilor de caractere. Funciile pentru expresii regulate sunt:

ereg() ereg_replace() eregi() eregi_replace() split() spliti()

Toate funciile au ca prim argument o expresie regulat. PHP folosete expresiile regulate n formatul POSIX extended definit de POSIX 10003.2. Pentru o descriere complet a acestui format vezi paginile de manual din directorul regex al PHP. Comanda: man /usr/local/src/regex/regex.7 Exemplu 1. Exemple de expresii regulate
ereg ("abc", $string); /* Returneaza true dac "abc" este gsit oriunde n $string. */ ereg ("^abc", $string); /* Returneaza true dac "abc" este gsit la nceputul irului $string. */ ereg ("abc$", $string); /* Returneaza true dac "abc" este gsit la sfritul irului $string. */ eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT); /* Returneaza true dac browser-ul clientului este Netscape 2, 3 sau MSIE 3. */ ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs); /* Pune 3 cuvinte separate de spaii n $regs[1], $regs[2] i $regs[3]. */ $string = ereg_replace ("^", "<BR>", $string); /* Pune tagul <BR> la nceputul irului $string. */ $string = ereg_replace ("$", "<BR>", $string); /* Pune tagul <BR> la nceputul sfritul irului $string. */ $string = ereg_replace ("\n", "", $string); /* terge toate caracterele de linie nou din $string. */

Cuprins

ereg - Caut o potrivire pentru o expresie regulat ereg_replace - nlocuiete o expresie regulat eregi - Caut o potrivire pentru o expresie regulat (case insensitive) eregi_replace - nlocuiete o expresie regulat (case insensitive) split - mparte un ir de caractere ntr-un tablou dup o expresie regulat spliti - mparte un ir de caractere ntr-un tablou dup o expresie regulat (case insensitive) sql_regcase - Returneaz o expresie regulat pentru o potrivire case insensitive 92

ereg
(PHP3, PHP4 ) Descriere int ereg (string pattern, string string [, array regs]) Caut n string potriviri pentru expresia regulat din pattern. Dac sunt gsite potriviri pentru subirurile dintre paranteze din pattern, i tabloul regs apare ca argument n funcie, atunci potrivirile vor fi puse n acest tablou. $regs[1] va conine subirul potrivit pentru prima parantez, $regs[2] pentru a 2-a, s.a.m.d. $regs[0] va conine o copie a irului string. Dac ereg() gsete potriviri n orice caz, $regs va fi completat cu exact 10 elemente, chiar dac s-au potrivit mai multe sau mai puine de 10 subiruri. Dac nu s-a gsit nici o potrivire $regs rmne eschimbat. Cutarea este case sensitive. Returneaz true dac a fost gsit o potrivire n ir, sau false n caz contrar. Urmtorul cod ia la intrare o dat calendaristic n format ISO (aaaa-ll-zz) i o afieaz n format zz.ll.aaaa Exemplu 1. Exemplu ereg()
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) { echo "$regs[3].$regs[2].$regs[1]"; } else { echo "Format invalid: $date"; }

ereg_replace
(PHP3 , PHP4 ) Descriere string ereg_replace (string pattern, string replacement, string string) Funcia caut n string potriviri pentru pattern, apoi le nlocuiete cu replacement. String-ul modificat este returnat. (Dac nu se gsete nici o potrivire este returnat string-ul iniial.) Dac pattern conine subiruri ntre parenteze, replacement poate conine subiruri de forma \\numr, care vor fi nlocuite cu textul care se potrivete cu al numr-elea subir dintre paranteze; \\0 va fi ntregul ir. Pot fi folosite pn la 9 subiruri. Parantezele pot fi imbricate. Dac nu este gsit nici o potrivire, string este returnat neschimbat. De exemplu, urmtorul cod afieaz "This is a test" de 3 ori Exemplu 1. Exemplu ereg_replace()
$string = "This is a test"; echo ereg_replace (" is", " was", $string); echo ereg_replace ("( )is", "\\1was", $string); echo ereg_replace ("(( )is)", "\\2was", $string);

Atenie la urmtorul lucru: dac folosii un numr pentru textul de nlocuit, nu vei obine rezultatul dorit. Aceasta deoarece ereg_replace() va interpreta numrul ca fiind codul unui caracter. De exemplu: Exemplu 2. Exemplu ereg_replace()
<?php /* Codul nu va da rezultatul ateptat. */ $num = 4; $string = "This string has four words.";

93

$string = ereg_replace('four', $num, $string); echo $string; /* Ieire: 'This string has words.' */ /* ns acesta da. */ $num = '4'; $string = "This string has four words."; $string = ereg_replace('four', $num, $string); echo $string; /* Ieire: 'This string has 4 words.' */ ?>

eregi
(PHP3 , PHP4 ) Descriere int eregi (string pattern, string string [, array regs]) Funcia se comport identic cu ereg() nefcnd distincie ntre literele mari i mici la cutarea unei potriviri (nu este case sensitive).

eregi_replace
(PHP3 , PHP4 ) Descriere string eregi_replace (string pattern, string replacement, string string) Funcia se comport identic cu ereg_replace() nefcnd distincie ntre literele mari i mici la cutarea unei potriviri (nu este case sensitive).

split
(PHP3 , PHP4 ) Descriere array split (string pattern, string string [, int limit]) Returneaz un tablou de string-uri, avnd ca elemente subiruri ale string rezultate din mprirea string conform pattern. Dac apare i limit, tabloul va conine maximum limit elemente, ultimul element coninnd restul rmas din string. Dac apare o eroare, split() va ntoarce false. Pentru a prelua primele 5 cmpuri dintr-o linie din /etc/passwd: Example 1. Exemplu Split()
$passwd_list = split (":", $passwd_line, 5);

Pentru a valida o dat calendarisitic, care poate fi delimitat de slash(/), punct(.) sau linie de desprire(-) Example 2. Exemplu Split()
$date = "04/30/1973"; //Delimitatori pot fi / . list ($month, $day, $year) = split ('[/.-]', $date); echo "Month: $month; Day: $day; Year: $year<br>\n";

Atenie, pattern este case-sensitive. Dac nu avei nevoie explicit de expresii regulate, folosii unlinked explode(). Este mai rapid. De asemenea pattern este o expresie regulat. Dac dorii s mprii string dup caractere speciale, va trebui s le securizai mai nti. Dac funcia split() (sau orice alt funcie regex) se comport ciudat, citii manualul regex.7, aflat n subdirectorul regex/ unde e instalat PHP. Comanda man /usr/local/src/regex/regex.7

spliti
(PHP4 >= 4.0.1) 94

Descriere array spliti (string pattern, string string [, int limit]) Funcia se comport identic cu split() nefcnd distincie ntre literele mari i mici la cutarea unei potriviri (nu este case sensitive).

95