Sunteți pe pagina 1din 95

PROGRAMUL DE FORMARE PROFESIONALA- CALIFICARE

- PENTRU OCUPATIA -

WEB DESIGNER

SUPORT DE CURS

BUCUREŞTI 2010

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

I ANALIZA SI PROIECTAREA STRUCTURII SITE-ULUI

1. Noţiuni introductive
Pentru a lucra pe internet este necesar să înţelegeţi notiunile de client şi server.
Majoritatea informaţiilor pe care le veţi 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ă informaţii pentru a fi folosite de către clienţi.
Un client este un computer sau un program specific de computer care ştie să comunice cu un
anumit server pentru a folosi informaţiile existente pe server sau pentru a stoca informaţii pe acesta.
Un exemplu de client este browserul Web pe care îl folosiţi când comunicaţi cu un computer pe care
sunt stocate paginile Web - serverul Web.
Internetul nu inseamnă doar pagini Web. Pentru a folosi poşta 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 activităţi variate
Termenul „Web” este folosit atât de des de media pentru a descrie şi ilustra Internetul, încât
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 evoluţia cea mai rapidă şi este partea cea
mai uşor de folosit a Internetului.
World Wide Web este alcătuit din site-uri web. Acestea sunt locaţii care grupează pagini web
(fişier HTML) la care se adaugă sau nu fişiere de alt tip. Un site web se compune dintr-o pagină
principală ("home page") la care se adaugă un număr variabil de pagini şi eventual de fişiere
(multimedia, executabile, etc.), toate fiind interconectate prin hiperlegături (hiperlink). Fiecare site are
o adresă precisă care este în general adresa paginii principale. Fiecare pagină şi fiecare fişier prezente
pe site au de asemenea câte o adresă care este formată pornind de la adresa site-ului. Adresa unui
fişier (pagina web sau alt fel de fişier) prezent pe internet este numită URL (Uniform Resource
Locator) şi este unică pentru fişierul respectiv în aşa fel încât acesta să poată fi găsit cu uşurinţa şi
să nu fie confundat cu un alt fişier.
Site Web şi pagină Web sunt termeni folosiţi flexibil, dar un site Web este în general un server
Web sau o parte dintr-un server Web unde este stocată o colecţie de pagini Web despre un anumit
subiect.

2. Glossar de termeni şi acronime

Browser Este un program care oferă o interfaţă între utilizator şi serverul de web
de pe Internet. Browserul contactează serverul şi transmite cererea de
informaţie apoi primeşte informaţia şi o afişează pe calculatotul
clientului
CGI Common Gateway Interface - standard care defineşte o modalitate
prin care serverele Web comunică cu programe externe şi vice-versa, astfel încât
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.
CSS Cascading Style Sheet Stilurile pun la dispoziţia creatorilor de site-uri
web noi posibilităţi de personalizare a paginilor HTML. Un stil reprezintă un
mod de formatare exactă a unui bloc de text (spre exemplu anumite caracteristici
pentru font, mărime, culoare, aranjare în pagină, distanţare faţă de margini etc).
Flash Flash este un instrument cu ajutorul căruia se pot construi pagini web
animate sau interactive
FTP File Transfer Protocol, cel mai simplu mod de a transmite fişiere între
calculatoare pe Internet
GET Metodă în protocolul HTTP, prin care datele dintr-un formular sunt
trimise adăugând la sfârsitul URL-ului un semn de întrebare şi
conţinutul formularului. Se creează un URL extins conţinând adresa
paginii şi parametrii care trebuie trimişi scriptului (de exemplu
http://www.domeniu.dom/cgi-bin/script.pl?name=John& tel=1274).
hiperlink Legăturile (link-urile) reprezintă partea cea mai importantă a unei
pagini Web. Ele transformă un text obişnuit în hipertext s au
hiperlegătură, care permite trecerea rapidă de la o informaţie aflată pe
un anumit server la altă informaţie memorată pe un alt server aflat
oriunde în lume.
HTML (HyperText Markup Language) Limbaj folosit pentru crearea paginilor
Web
HTTP Hypertext Transfer Protocol, protocol folosit de browserele de web
pentru a transmite text, sunete, imagini video pe Internet
JavaSript JavaScript este un limbaj de scripting pentru client dezvoltat la origine
de Netscape, permiţând scrierea de secvenţe de program care se
execută la apariţia unui eveniment utilizator.
MySQL Cel mai cunoscut şi folosit limbaj pentru bazele de date
PHP Hypertext Preprocessor - PHP este un limbaj de scripting pentru
server, asemănător javascript, în sensul că amândouă permit introducerea unor
programe (scripturi) în paginile web
Plug-in Aplicaţiile de tip plug-in sunt similare celor de tip helper (Se folosesc
pentru executarea fişierelor audio sau video sau pentru a afişa diverse formate grafice
necunoscute de browser.), dar, spre deosebire de acestea, ele lucrează direct în
interiorul browserelor
POST Metodă din protocolul HTTP prin care datele din formular nu sunt
trimise ca parte a URL-ului, ci sub forma unui fişier codat cu standardul
MIME înglobat în corpul mesajului trimis către server.
URL Uniform Resouce Locator - reprezintă unui site
www World Wide Web este un univers de informaţie disponibil prin protocol
HTTP
XML eXtensible Markup Language - Xml este un limbaj creat pentru a
structura, stoca şi transmite informaţiile. Spre deosebire de HTML, care
a fost creat pentru a afişa datele, XML a fost proiectat pentru a descrie
datele

3.Tipuri de site-uri

În funcţie 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ă informaţii despre o companie, incluzând profilul, istoricul, portofoliul,
produsele şi serviciile, locaţia şi alte informaţii.
Site-uri de prezentare de produs / eveniment
Site-uri care oferă informaţii 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 conţinut intern şi extern şi oferă servicii
diverse pentru utilizatori, de tipul conturilor de e-mail.

Magazine online

Site-uri care vând online produse sau servicii şi facilitează tranzacţiile.

Comunităţi virtuale
Site-uri care facilitează interacţiunea şi comunicarea. Accentul este pus pe instrumente şi
elemente care întăresc sentimentul de apartenenţă precum ştirile comunităţii, chat-uri, forum-
uri.
Servicii şi tranzacţii online
Site-uri care oferă servicii de recrutare, de vânzare a spaţiilor publicitare, servicii matrimoniale,
servicii de trimitere a felicitărilor, albume foto online, agende, servicii de e-mail, calendare
online, arhivarea fişierelor, download-uri, înregistrarea domeniului, etc.

Mass-media
Versiuni online ale publicaţiilor, 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 obţinerea sprijinului
unor categorii de public.
Celebrităţi şi personalităţi
Site-uri care prezintă personalităţi publice, punând accentul pe rezultate deosebite, pe interese
sau pe biografia completă etc. Site-uri dedicate unor muzicieni, actori sau actriţe, simboluri ale
culturii, echipe de sport, personalităţi de televiziune, politicieni.
E-guvernare
Site-uri care au legătură cu serviciile guvernamentale, incluzând siteurile care oferă acces la
serviciile online ale instituţiilor guvernamentale şi site-uri care diseminează informaţii
despre decizii guvernamentale.

Artă şi cultură
Site-uri de arte vizuale şi expresie artistică, teatru, literatură, muzică clasică, arhitectură. Siteurile
includ elemente de conţinut precum cronici, recenzii, expoziţii, galerii, portofolii, etc. Pentru
site-uri al căror obiectiv principal este vânzarea online a unor produse, inclusiv artistice, este
recomandată secţiunea "Magazine online".

Portaluri tematice
Site-uri care acoperă cât mai mult un domeniu anume al cunoaşterii. Oferă referinţe şi informaţii
pe o temă bine conturată.

Site-uri ale instituţiilor


Site-uri de prezentare a unor instituţii, primării, şcoli, licee, universităţi, care cuprind informaţii,
istoric
etc.

Site-uri personale
Site de prezentare; conţine CV, fotografii, date de contact, etc.

4.Structura unei pagini Web

În afară de unele părţi opţionale, majoritatea paginilor Web conţin următoarele elemente.
Aceste elemente trebuie cunoscute deoarece diversele browsere interpretează în mod diferit aceste
părţi. Elementele prezentate sunt de obicei vizibile prin intermediul browserului:
1. Titlu - este afişat pe bara de titlu a ferestrei în care apare pagina.
2. Text - trasmite scopul şi conţinutul paginii
3. Semnătura - este afişată î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 secţiuni logice.
5. Imagini - oferă mai multe informaţii în pagină.
6. Culoare sau model de fundal - reprezintă o culoare solidă sau o imagine integrată care este
afişată în
spatele textului.
7. Animaţii - text sau imagini care se mişcă într-un anumit fel.
8. Legături - conduc vizitatorul către alte locaţii (alte pagini Web, adrese de e-mail, fişiere tip
document,
videoclipuri, etc)
9. Hărţi de imagini - imagini
10. Formulare - locaţii unde vizitatorii pot răspunde la un chestionar online.

Există şi alte elemente care aparţin 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 căutare să descopere subiectul şi conţinutul paginii.
2. Comentarii - textul pe care autorul doreşte să îl facă vizibil doar atunci când este citit direct
codul
HTML, nu atunci când pagina este vizualizată cu un browser.
3. HTML - formatul de fişier în care paginile Web sunt stocate pe un computer.
4. Codul JavaScript - adaugă elemente dinamice paginii Web
5. Applet-uri Java - îmbunătăţesc interacţiunea dintre browser şi server.

5. Structura unui site

Modul de structurare a site-ului se referă la navigarea în cadrul acestuia. O navigare uşoară


între pagini presupune prezenţa unei bare de navigare în care să fie prezente alături de pagina
gazdă şi paginile cele mai importante. Toate secţiunile unui site trebuie să se îmbine armonios în
structura acestuia permiţânduse astfel trecerea uşoară de la o secţiune la alta. O structură bună se
aseamănă cu structura unui arbore care ar avea şi nişte conexiuni între ramurile sale cele mai mari.
Pe Web se întâlnesc mai multe moduri de organizare logică a informţiei î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: conţin legături către resurse
preferate
pe Internet, dar nu şi către pagini din cadrul aceluiaşi document.
2. Structura liniară de o pagină - o pagină Web creată pentru a fi citită de sus până jos. Poate fi
utilizat un
cuprins pentru a-i ajuta pe vizitatori să facă salturi rapide către orice secţiune.
3. Structura liniară pe mai multe pagini - aceeaşi structură ca mai sus, numai că paginile curg una
după
alta. Vizitatorii sunt ghidaţi prin plasarea în josul fiecarei pagini a unei legături care conduce
către
pagina precedentă şi cea următoare.
4. Structura ierarhică - structura clasică întâlnită pe Web. Pagina gazdă (sau o pagina specială)
trebuie
sa conţină un fel de "cuprins" al site-ului, cu legături către paginile cele mai importante.
Acestea din
urmă sunt practic nişte porţi de intrare către secţiuni specializate ale site-ului, conţinând şi ele
table de
materii cu adresele paginilor web subordonate.

5. . Structura de tip reţea - este o structură ierarhică fără ierarhie. Orice pagină poate conţine o
legătură
către altă pagină. Există o pagină principală, dar apoi vizitatorii se pot plimba prin acea reţea
fără o
cale anume.
Se pot realiza site-uri web, pornind de la cel de prezentare şi până la dezvoltarea de module
dinamice
şi soluţii pentru comerţul electronic şi vânzarea online. Tehnicile folosite sunt: HTML, Javascript, CSS,
PHP,
MySQL, Flash, XML, WML, WAP etc. Dacă dorim să creăm singuri site-ul va trebui să învăţăm limbajul
HTML
şi să învăţăm să folosim un program de editare HTML. Există şi opţiunea (recomandată pentru
începători) să
folosim un program de editare HTML de tipul VIZINT (vizual-intuitiv) care ne permite să creăm pagini
web şi să
adăugam elemente HTML la ele fără sa cunoaştem 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 obţine)
şi ele
necesită din partea utilizatorului doar pricepere în aranjarea în pagina a conţinutului 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
producătorului).
6. Criterii
In realizarea proiectelor, un webdesigner se poate baza pe următoarele criterii:

6.1. Conţinut

- obiectul declarat este uşor de recunoscut;


- conţinutul este relevant, folositor şi captivant pentru vizitatori;
- informaţia este clară şi concisă.
- evitaţi folosirea unui limbaj strict tehnic, care nu poate fi inţeres pe deplin de toată audienţa
Un site trebuie să aibă un conţinut original, bogat, interesant şi actualizat periodic pentru a
deveni popular în rândul utilizatorilor. Un astfel de site va fi vizitat frecvent chiar dacă aspectul său
grafic nu este la cel mai înalt nivel. Un rol important îl are alături de conţinutul în informaţie şi modul de
scriere al materialelor. Acestea trebuie să fie redactate într-un stil uşor de citit, fără fraze excesiv
de lungi şi complicate. Toate materialele trebuie să fie verificate pentru a nu conţine greşeli de
ortografie.

6.2. Uşurinţă în folosire

- textul este lizibil, iar imaginile şi celelalte elemente multimedia sunt optimizate pentru specificul
publicului ţintă;
- organizarea informaţiilor este intuitivă;
- folosiţi CSS (Cascading Style Sheets). Folosiţi fişiere css pentru formatarea textului. Puteţi
schimba astfel foarte uşor formatarea întregului site iar dimensiunea paginilor se micşorează.
- informaţiile importante sunt uşor de găsit.
- adăugaţi o nota la paginile web prin care să reamintiţi vizitatorilor să facă un bookmark (semn de
carte). Acest lucru va duce la creşterea şanselor ca vizitatorii să se întoarcă.
6.3. Design

- designul este potrivit obiectului site-ului şi este adecvat utilizatorilor;


- conceptul creativ este uşor de identificat şi coerent;
- designul nu atrage atenţia de la conţinut;
- folosiţi aceleaşi fonturi, dimensiune a textului şi culoare a fundalului pentru tot site-ul
- folosiţi acelaşi aliniament (stânga, dreapta sau centru) pentru machetarea paginilor
- designul este suficient de diversificat pentru a păstra atenţia utilizatorilor.
Aspectul grafic al unui site se referă la aşezarea în pagină a materialelor şi la gama de culori
folosite.
Materialele de pe site trebuie să fie uşor de citit, adică trebuie să aibă un corp de literă adecvat, să fie
scrise pe un fundal plăcut şi odihnitor pentru ochi şi să fie formatate (împărţite în paragrafe, etc.)
special pentru o citire uşoară. De asemenea trebuie luată în calcul adăugarea de imagini şi tabele
dacă este necesar acest lucru.
Trebuie evitată cu orice preţ supraîncărcarea cu elemente grafice inutile a site-ului pentru că în caz
contrar afişarea paginilor devine greoaie. Utilizatorii din toata lumea au drept caracteristică lipsa de
răbdare şi ca urmare este foarte probabil să nu aştepte până la capăt descărcarea paginii şi să
prefere mai degrabă vizitarea unui alt site. Elementele grafice cu dimensiuni în KB importante (de
tipul animaţiilor Flash sau a imaginilor mari) trebuie folosite cu moderaţie şi doar dacă este necesar.
Pe web mărimea contează. Pe de altă parte autorul unui site specializat în grafică web poate să
pună pe site-ul său oricâte animaţii Flash şi imagini doreşte pentru că site-ul este cartea sa de vizită şi
îi pune în evidenţă talentul.

6.4. Funcţionalităţi

- site-ul este compatibil cu mai multe platforme;


- timpul de încărcare al paginii este scăzut;
- toate link-urile şi formularele funcţionează corect;
Accesibilitatea reprezintă una dintre cerinţele de bază atunci când se proiectează o pagina
web. Aceasta înseamnă că orice netsurfer poate să aibă acces la site-ul pe care l-aţi realizat,
indiferent de browserul pe care-l foloseşte (inclusiv browsere text ca Lynx), rezoluţia sau
dimensiunile ecranului, setările calculatorului sau eventualele disfuncţii ale vederii.
Din aceste motive, nu trebuie să proiectaţi un sit web pentru un browser specific sau pentru o
anumită rezoluţie a monitorului. Căutaţi să evitaţi inserarea în pagina principală a unor anunţuri de
forma: "Acest site se vede cel mai bine cu Internet Explorer 5.5 " sau "Folosiţi o rezoluţie de 768 x 1024"
în acest fel nu faceţi decât
să îndepărtaţi cititorii care folosesc un alt browser sau o altă rezoluţie. Este puţin probabil ca aceştia să
încarce browserul IE 5.5 sau să schimbe rezoluţia monitorului numai pentru a vedea în cele mai bune
condiţii paginile dvs. Prin accesibilitate se înţelege şi oferirea unor informaţii necesare unui alt tip de
vizitatori ai siteurilor web. Aceştia sunt roboţii motoarelor de căutare. Pentru ei trebuie să completaţi
cu atenţie etichetele META corespunzătoare (TITLE, DESCRIPTION, KEYWORDS etc). Foile de
stiluri (style sheets), scripturile, appleturile Java şi tehnologia Flash sunt noi apariţii în arsenalul
webdesignerilor. Toate acestea trebuiesc însă folosite cu maximă atenţie deoarece nu toate
browserele le pot suporta, iar unii utilizatori au dezactivate opţiunile respective. De asemenea, nu
uitaţi să folosiţi atributele ALT, WIDTH şi HEIGHT asociate etichetei IMG. Realizarea unui site
accesibil unor categorii cât mai largi de utilizatori implică imaginaţie şi multă muncă, dar rezultatele vor fi
pe măsura 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. Deşi anterior a fost considerată prea scumpă
pentru a fi folosită fără rost, acum ea este ceva obişnuit. 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 semnificaţie culturală. Dumneavoastră, ca designer, aveţi responsabilitatea de a cunoaşte
semnificaţia lor dar şi de a fi în pas cu tendinţele coloristice.
Folosiţi culori pastelate pe fonduri albe. Identitatea voastră, dar nu în mod necesar sigla,
poate fi asociată cu orice culoare pe care o dictează tendinţele actuale.
Alte influenţe asupra preferinţelor 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 faţa 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 creştin conservator se va înclina spre culori
conservatoare cum ar fi bleu-marin şi gri. Ar fi indicaţi să aveţi în vedere asemenea factori, când vă
adresaţi unui anumit public-ţintă.
Interesul culorilor
Culorile au în general anumite implicaţii sociale. În timp ce nici o semnificaţie preconcepută nu
poate fi considerată universală, cercetătorii consideră că următoarele înţelesuri sunt oarecum precise:

Negru:
Semnificaţie: Autoritate sau putere şi, uneori, răutate. Darth Vader era negru din toate aceste
motive.
Alb:
Semnificaţie: Puritate, sterilitate sau inocenţă. Miresele poarta alb pentru a sugera puritatea şi
inocenţa.
Roşu:
Semnificaţie: Furie, avertizare, conflict şi dragoste. Culoarea roşie poate chiar să provoace puls
ridicat şi respiraţie accelerată. Folosit în anumite contexte, poate avea un efect negativ, pe când în
altele poate avea un efect benefic.
Albastru:
Semnificaţie: Calm, pace - dar rece şi deprimantă -, nobilitate, loialitate. Costumele pentru afaceri
sunt de multe ori bleu-marin pentru că aceasta implică loialitate; în acelaşi timp, sălile de clasă sunt
deseori zugrăvite
în albastru deschis, datorită efectului calmant al albastrului. În limbaj muzical, se vorbeşte deseori de
“blues” (în engleză, blue = albastru), deoarece atât acest stil muzical cât şi culoarea pot avea un efect
deprimant.
Verde:
Semnificaţie: Naturaleţe, prospeţime şi fertilitate. Legătura 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:
Semnificaţie: Fericire, optimism şi concentrare. Galbenul îmbunătăţeşte capacitatea de
concentrare şi ea poate contrasta cu aproape toate culorile.
Violet:
Semnificaţie: Regalitate, lux şi romantism. De-a lungul istoriei, familiile regale au fost asociate cu
violetul datorită faptului că se întâlneşte rareori în natură şi trebuiau cheltuite sume mari pentru a putea
crea vopsea de această culoare.
Maro:

Semnificaţie: solid, de încredere şi terestru.

7. Publicarea şi promovarea unui site

Orice webmaster vrea, fie că o recunoaşte deschis sau nu, ca site-ul său să fie vizitat de cât mai
mulţi utilizatori şi dacă se poate, cât mai des. Această dorinţă (care ţine de considerente financiare sau
de ego) nu este însă realizabilă decât dacă webmasterul şi toţi ceilalţi implicaţi în administrarea site-
ului depun un efort constant pentru a menţine conţinutul şi aspectul site-ului cât mai aproape de
cerinţele utilizatorilor. Succesul unui site, ca de altfel al oricărui produs, se datorează în mare măsură ş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 tânără, experţii în crearea de site-uri Web sau
redactorii de articole interesante nu sunt de obicei şi experţi în marketing. Tocmai din această cauză
promovarea eficientă a unui site web este făcută de cele mai multe ori de către profesionişti. Aceştia îş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ă
creştere.
O caracteristică a Internetului este ca acesta, în calitatea sa de spaţiu virtual permite oricărui utilizator
să-şi construiască un site Web, existând, spre deosebire de spaţiul real, destul loc pentru toată
lumea. Mai mult, utilizatorul respectiv nu trebuie să aibă cunoştinţe avansate de limbaj HTML sau
să plătească vreun ban pentru locul de pe Internet unde vrea să-şi construiască site-ul (se exclud
bineînţeles 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 aparţinând unor utilizatori obişnuiţi şi nu unor
companii sau instituţii.
Site-urile mici sunt însă potenţiale surse de câştig material pentru proprietari, pentru că există
companii interesate să cumpere spaţiu publicitar chiar şi pe site-urile mici, cu condiţia ca acestea să
fie vizitate des. Un site bine făcut şi care şi-a dobândit deja o "clientelă" de utilizatori constantă,
poate fi la un moment dat
cumpărat pentru o sumă importantă de către o companie mult mai mare, existând în plus
posibilitatea ca administratorii site-ului să-şi păstreze locurile de muncă pentru a continua să menţină
şi să îmbunătăţească site-ul.
Ţinând cont de faptul ca utilizatorii români care sunt în acelaşi timp şi webmasteri vor să le fie
vizitate siteurile, ei trebuie să înveţe să-şi facă singuri activitatea de marketing, pentru că nu au
mijloacele financiare necesare pentru apelarea la specialişti. Multe firme româneşti care vor sa aibă
site-uri web de succes sunt în aceeaşi situaţie, din cauza dificultăţilor financiare neputând fi luată în
discuţie cumpărarea de spaţiu publicitar pe Internet sau angajarea unor specialişti în marketing.
Greul promovării 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
fără a fi nevoit să apeleze la profesionişti.
Metodele cele mai eficiente de promovare a unui site sunt următoarele:
1) Optimizarea site-ului web pentru indexarea adecvată de către motoarele de căutare
2) Înscrierea site-ului în cataloagele de adrese ale portalurilor internaţionale şi româneşti
3) Promovarea site-ului pe forumurile on-line sau în grupurile de discuţii
4) Participarea la clasamentele site-urilor care fac topuri
Primul pas este să alegem un domeniu pentru site-ul organizaţiei. Numele unui domeniu nu
trebuie să conţină spaţii de aceea dacă vom folosi un cuvânt compus trebuie să folosim o liniuţa pentru a
lega părţile sale componente. Al doilea pas care trebuie făcut este sa găzduim site-ul pe un server.
Spre exemplu există servere care permit găzduire gratis cum ar fi : www.home.ro , www.3x.ro etc.,
iar la altele trebuie plătită găzduirea: www.myx.ro , www.elite.ro/web-hosting/ ,
www.apis.ro/domeniu.html .
După ce am creat site-ul trebuie sa-l încărcăm pe serverul care îl găzduieşte. Acest lucru se
realizează foarte simplu dacă suntem familiarizaţi cu programele de tip client FTP. Tot cu ajutorul
programelor de acest tip se realizează şi actualizarea site-ului (ştergerea unor pagini, adăugarea unora
noi, înlocuirea unor pagini cu versiuni mai noi).
Aşa cum am mai spus, putem să scriem singuri conţinutul unui site şi să-l punem în pagină sau putem
apela la serviciile unor specialişti. Este recomandat să ne compunem singuri materialele pentru că
astfel putem să le revizuim ulterior introducând (fără a afecta stilul expunerii) anumite informaţii
care nu erau disponibile la
momentul scrierii iniţiale. Cu cât vom scrie mai mult cu atât 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ă apelăm la serviciile unor specialişti (de ex. studenţi la
filologie sau
jurnalistică). Noi putem să le dictăm acestora materialele iar ei se vor îngriji de partea stilistică a textelor.
Pentru a cunoaşte cât de vizitat este site-ul pe care l-aţi realizat şi pentru a afla mai multe date
despre numărul şi statistica vizitatorilor, informaţii care vă vor ajuta în realizarea unei campanii de
marketing online eficiente, este bine să folosiţi contoare de pagină.
Site-ul trebuie promovat. Mulţi manageri consideră că odată ce site-ul este finalizat şi postat
pe
Internet, lucrurile sunt încheiate. Din acest moment organizaţia este prezentă pe Internet iar
utilizatorii
interesaţi de serviciile şi produsele organizaţiei vor veni de la sine. Din păcate nu se întâmpla deloc
aşa. Cel
mai probabil, potenţialii dumneavoastră utilizatori / clienţi nu cunosc şi nu caută organizaţia
dumneavoastră. Ei
sunt în căutarea serviciilor sau produselor pe care le oferiţi, atât dumneavostră cât şi concurenţa. Dacă
atunci
când un utilizator caută produsele dumneavoastră, site-ul nu va fi printre primele afişate, cel mai
probabil acea
persoană va deveni clientul concurenţilor dumneavoastră. Un site nepromovat este la fel ca un
magazin
strălucitor şi plin de mărfuri plasat pe o străduţă întunecoasă, pe unde nu trece nimeni. Magazinul
va da
faliment în câteva luni. Site-ul va rămâne un obiect inutil care nu aduce organizaţiei dumneavostră
nici un
beneficiu.
Un sistem de promovare a site-ului este şi banner exchange-ul. Banner Exchange înseamnă
publicitate reciprocă în cadrul unei reţele de site-uri: în schimbul reclamelor (bannerelor) pe care le
publicaţi 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 condiţia ca schimbul să fie echitabil.
Un sistem centralizat de publicitate reciprocă (banner exchange / link exchange) asigură:
echitatea schimbului în reţele cu un numar mare de participanţi, numeroase dimensiuni şi formate de
banner, selecţia şi monitorizarea site-urilor participante, statistici ale campaniilor publicitare derulate etc.
Site-ul trebuie actualizat. Ca şi promovarea, întreţinerea şi actualizarea site-ului sunt nişte
operaţii foarte adesea neglijate. Nu odată am văzut pe Internet site-uri cu informaţii vechi, cu
date de contact neactualizate, cu oferte care nu mai sunt valabile, cu rubrici de Noutaţi al căror conţinut
nu a mai fost schimbat de la lansarea site-ului. Pentru un potenţial client care vizitează frecvent site-ul,
o asemenea situaţie este un motiv puternic de a pune la îndoială seriozitatea organizaţiei
dumneavoastră. Nu trebuie să uitaţi nici o clipă că, pe Internet, site-ul organizaţiei este însăşi
organizaţia. Iar un site neactualizat este la fel ca un magazin cu mărfuri prăfuite şi cu termenul de
garanţie expirat. Dumneavoastră aţi cumpăra ceva dintr-un asemenea magazin?
Site-ul trebuie sa funcţioneze corect Deşi buna funcţionare a site-ului pare o condiţie de la
sine înţeleasă, destul de des pot fi găsite site-uri cu pagini care nu se deschid, cu baze de date care
dau erori, cu formulare care funcţionează incorect. Un site care dă erori la funcţionare îi va îndepărta
definitiv pe potenţialii vizitatori care nu vor mai reveni pe site şi nici la organizaţia dumneavostră. Şi,
fără îndoială, justificat. Nici dumneavoastră nu aţi mai reveni într-un magazin în care liftul s-a blocat
între etaje sau casa de marcat s-a defectat tocmai când, după o aşteptare de jumătate de oră, aţi
ajuns să plătiţi.
Aşa încât, la finalizarea proiectului, rezervaţi-vă o oră pentru a vizita site-ul în întregime şi asiguraţi-vă
că totul funcţionează fără greş.

8. Optimizare site

Optimizarea paginilor web este o strategie aplicată de toţi specialiştii în marketingul site-urilor
web şi se referă la "cosmetizarea" paginilor, în aşa fel încât ele să se afle în fruntea listei de pagini
care este generată
de un motor de căutare atunci când un utilizator caută paginile care conţin un anumit cuvânt sau o
anumită sintagmă.
Optimizarea unui site web pentru a fi indexat adecvat de către motoarele de căutare este un
procedeu foarte simplu, însă în acelaşi 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
conţinutul fiecărei pagini în parte şi la aranjarea textului în pagină. În general se spune despre orice
pagină web că are o anumită temă şi conţine anumite cuvinte-cheie. Tema paginii este subiectul luat
în discuţie iar cuvintele-cheie sunt cuvintele foarte importante (pentru înţelegerea temei dezbătute)
care apar în text.
Orice pagină web are o parte vizibilă, care este afişată de explorator ("browser") şi pe care o
vedem noi când o vizităm. 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ă" conţine codul HTML al paginii şi unele marcaje
("tags") folosite în scopul unei indexări adecvate a paginii respective de către motoarele de căutare.
Codul HTML al unei pagini poate fi văzut atunci când avem pagina afişată în explorator dacă facem clic
pe meniul "View" şi apoi pe opţiunea "Source". Va fi lansat automat programul Notepad în care vom
vedea codul HTML.

8.1. Optimizarea conţinutului paginii Web

Motoarele de căutare sunt programate să utilizeze în mod optim baza de date obţinută de “roboţii
târâtori” 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 conţinut 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 târâtor nu vede paginile web aşa cum le văd oamenii, el acordă o importanţă covârşitoare
textului unei pagini, fără a fi impresionat deloc de aspectul ei grafic. Ca urmare bazele de date ale
motoarelor de
căutare conţin pagini indexate după conţinutul lor scris şi nu după cel grafic. Acest conţinut scris este
cel care dă 70% din relevanţa unei pagini web, restul de 30% fiind dat de optimizarea ("cosmetizarea")
paginii web.
Sarcina lingviştilor şi a matematicienilor implicaţi în dezvoltarea motoarelor de căutare a stat
tocmai în crearea şi optimizarea unui algoritm care să poată să ordoneze un număr mare de pagini
web în funcţie de utilitatea conţinutului lor scris. În mod evident, unele din caracteristicile algoritmului nu
sunt uşor de sesizat de către persoanele care nu au lucrat la el. Alte caracteristici pot fi însă deduse
analizând paginile web care apar în mod constant pe primele locuri ale listelor generate de motoarele
de căutare.
Este uşor de intuit faptul că algoritmul favorizează paginile web care au un conţinut de text important,
pentru că se consideră că aceste pagini conţin multă informaţie, iar utilizatorii caută în mod
special această caracteristică a paginilor web. Nu se ştie precis cum este evaluat de către algoritm
conţinutul de text al unei pagini dar este foarte posibil să fie luat în calcul numărul de caractere
(litere) din pagină aşa cum a fost calculat de robotul târâtor care a indexat pagina. Asta nu
înseamnă că pentru ca paginile noastre să aibă succes suntem obligaţi să le umplem cu text până la
refuz, fără să ţinem cont şi de alte aspecte, cum este de exemplu calitatea expunerii informaţiilor din
textul respectiv.
Paginile cu mult text sunt pe placul algoritmilor dar oamenii sunt mai rafinaţi, 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 aşa fel încât să fie plăcut de citit. Un alt aspect care nu trebuie neglijat este actualizarea periodică a
conţintului site-ului şi adăugarea de noi materiale.
Atunci când scriem textul dintr-o pagină trebuie să ne asigurăm că folosim şi sinonime pentru
cuvintelecheie şi de asemenea că folosim şi variante mai puţin folosite ale acestora. De exemplu
într-o pagină web care tratează un subiect despre site-urile web (găzduire de ex.) trebuie folosit în
principal cuvântul "site" dar trebuie pusă în paranteză şi varianta "sit". În acest fel dacă un utilizator va
căuta paginile care conţin sintagma "găzduire site web" avem toate şansele ca şi pagina noastră care
tratează acest subiect să fie luată în seamă de motorul de căutare pentru includere pe lista rezulatelor
căutării.

8.2. Înregistrarea site-ului la motoarele de căutare

În general se consideră că nu este nevoie să ne înregistrăm site-ul la motoarele de căutare


pentru că acestea îl vor indexa atunci când robotul târâtor îl va întâlni în "plimbările" sale periodice
pe internet. Mulţi webmasteri preferă însă să fie siguri că site-ul va fi indexat cât mai repede şi atunci
apelează la serviciul de propunere de site-uri prezent la toate motoarele de căutare. Acest serviciu
este fie gratuit fie cu plată ( Looksmart , Lycos). Dacă site-ul nostru apare în listele generate de un
robot de căutare nu mai trebuie să îl înregistrăm, este evident că paginile sale au fost deja indexate.
Fiecare motor de căutare are o pagină specială numită "Add URL" (adaugă adresa unui site) sau cu un
titlu asemănător ("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 nişte
cuvintecheie) şi apăsăm butonul "Add URL". Nu este nevoie să înregistrăm decât adresa paginii gazdă a
site-ului. Robotul motorului de căutare va indexa toate paginile site-ului pornind de la aceasta.
În final, am căutat câteva modalităţi de urmărire a traficului pe site-ul web. Am setat două
contoare de trafic. Unul românesc (www.trafic.ro) şi unul străin (www.sitemeter.com). Ambele sunt
gratuite şi oferă o mulţime de informaţii utile despre numărul de vizitatori şi pagini web (page views)
accesate, împărţite pe ani, luni, săptămâni. În plus, mai sunt precizate tipul de browser folosit, IP-ul,
prima şi ultima pagină accesată etc. După ce vă înscrieţi la aceste site-uri web, veţi primi un cod HTML
pe care trebuie să-l inseraţi (fără nici un fel de modificare) în pagina web, acolo unde doriţi ca el să
apară. La Trafic trebuie să alegeţi categoria în care se încadrează site-ul dvs. Apoi, veţi putea urmări
în fiecare săptămână evoluţia site-ului dvs. (nr. de vizitatori, creşterea faţă de săptămâna încheiată,
poziţia obţinută în cadrul secţiunii respective etc.).

9. Protejarea conţinutului unui site

Termenul de copyright este specific american, dar se foloseşte şi în Europa sau pe alte
continente, cu aceeaşi semnificaţie: drept de autor. În România, dreptul de autor este reglementat
juridic prin Legea nr. 8 / 1996. În conformitate cu prevederile acestei legi, opera de creaţie intelectuală
este recunoscută şi protejată, independent de aducerea la cunoştinţă publică, prin simplul fapt al
realizării 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). Aşadar, un site web reprezintă o operă de creaţie intelectuală şi poate constitui obiect al
dreptului de autor. Aceasta înseamnă că informaţiile pe care le introduceţi într-o pagină personală vă
aparţin şi dreptul de
autor vă revine în întregime asupra textului respectiv. Dacă însă lucraţi într-o echipă sau sunteţi
angajat al unei firme de webdesign atunci sunteţi co-autor şi veţi fi protejat prin drepturi de autor
asupra imaginilor pe care le-aţi creat, machetării paginii sau programelor pe care le-aţi realizat. Mulţi
oameni consideră, în mod
eronat, că se pot copia fără a cere acordul nimănui diverse materiale disponibile online (texte, imagini,
sunete, fişiere video etc.) Există într-adevăr site-uri de unde se pot copia astfel de fişiere sau de
unde se poate încărca software gratuit. Pe aceste site-uri veţi găsi o notă explicită care vă permite
utilizarea acestora. Dacă nu găsiţi o notă în acest sens, este indicat să cereţi prin e-mail acordul
webmasterului site-ului web de la care vreţi să copiaţi materialele respective. În majoritatea cazurilor vi
se va răspunde afirmativ. De asemenea, este bine să includeţi o notiţă de copyright în subsolul fiecărei
pagini în care se vor preciza simbolul de copyright (©), autorul şi anul în care a fost făcută publică
pagina respectivă. Dacă consideraţi necesar, puteţi să treceţi şi alte menţiuni specifice.
Pe lângă protejarea conţinutului unui site, şi aspectul acestuia, modul tehnic de realizare,
interacţiunea între componentele acestuia pot fi obiectul protecţiei. Sunt numeroase situaţiile în care un
site poate fi protejat în sine, ca operă independentă, fără ca protejarea conţinutului acestuia să fie
impusă sau să existe. În egală măsură, conţinutul unui site poate constitui obiectul protecţiei în timp ce
elementele grafice şi funcţionale ale acestuia să fie libere.

10. Feedback (interacţiunea cu vizitatorii)

Până acum, principala formă de comunicare între comercianţi şi clienţii lor era publicitatea. Dar
această comunicare nu oferea o oportunitate de interacţiune între cele două părţi sau feedback. Odată
cu răspândirea Internetului se poate realiza foarte uşor o comunicare în ambele sensuri.
Îmbunătăţirea metodelor prin care
utilizatorii interacţionează cu paginile unui site web este esenţială pentru crearea unui site bun.
Folosirea feedback-ului este foarte importantă pentru creşterea numărului de vizitatori şi oferă
posibilitatea ca aceştia să-şi exprime opiniile, sugestiile şi comentariile în legătură cu un site web. E-
mailul este cea mai importantă şi
mai uşoară cale de a recepţiona mesaje de la cititori. Vă recomand să nu scrieţi nici o adresă de e-mail
în clar, ci să o inseraţi 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ă răspundă în timp scurt pentru a menţine o relaţie de încredere
reciprocă. Există pe Internet mii de site-uri web care vă oferă posibilitatea să vă creaţi gratuit unul sau
mai multe conturi de e-mail. Câteva dintre cele mai cunoscute sunt următoarele:
- http://www.hotmail.com
- http://www.yahoo.com
- http://www.geocities.com
- http://www.freeservers.com
- http://www.netadress.com
- http://www.home.roCărţi de oaspeţi (guestbooks)
Completarea formularelor este o practică des întâlnită pe Internet. Acestea permit
colectarea de feedback-uri de la cititori într-un mod organizat. Un formular web se poate realiza uşor
folosind direct codul HTML sau cu ajutorul unui editor HTML. Un exemplu de formular des întâlnit îl
reprezintă aşa numitele cărti de oaspeţi unde cititorul poate să-şi scrie impresiile şi comentariile după
vizitarea unui site. O carte de oaspeţi gratuită se poate obţine vizitând site-urile web următoare:
- 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 cât mai mulţi vizitatori la site-ul pe care l-aţi creat, puteţi să setaţi 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 discuţii
Pentru a creşte gradul de interactivitate cu vizitatorii puteţi să setaţi în pagină o listă de discuţii.
Există multe site-uri, ca de exemplu Topica sau Yahoogroups care oferă gratuit această
facilitate. Mai multe informaţii despre acest subiect găsiţi în capitolul “Promovarea site-ului web”.

11. Greşeli Frecvente

1. Prea multe imagini

Unii web designeri fac exces de zel în împodobirea paginilor cu grafică şi animaţii, din convingerea ca
astfel vor fi mai atrăgătoare. 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 încărcare a paginii
drastic scăzută. Mai mult, nici un motor de căutare nu indexează încă imagini, deci un home page
constituit din imagini năucitor de atrăgătoare, şi nici o linie de text (html, nu desenat pe bitmap) va
genera un număr constant de listări pe cuvinte cheie în Google: zero. În consecinţă, la ce foloseşte o
pagină foarte frumos desenată, dacă doar câţiva ajung să o vadă (cei care nu s-au plictisit aşteptând 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, greşeala frecventă la cei care au un background în design grafic. Pe web, mărimea
contează. Programe de editare de imagine ca Adobe Photoshop oferă opţiuni de optimizare pentru
web, dar există şi unelte mai simple şi mai putin costisitoare pentru optimizarea de imagini.

3. Exces agasant de animaţii

Mulţi designeri cred că o pagină pe care se mişcă ceva în permanenţă este mult mai atractivă.
Numai că principiul de „eye catching” se referă la un SINGUR element care focalizează atenţia. Şi
deja am descoperit greşeala. În loc să atragă atenţia, elementele animate dintr-o pagină distrag atenţia
cititorului, funcţionând ca nişte viziuni periferice. Acelaşi rezultat îl au şi efectele de tip Blink: ajung să
agaseze vizitatorul, alungându-l de pe site, la fel de nedumerit cum a a venit. Aşadar, atenţie la
dozarea animaţiilor!

4. Cod redundant şi dezordonat

Oricine poate vedea conţinutul-cod al unei pagini web selectând opţiunea „View source”.
Deocamdată, nu există un procedeu de ascundere a sursei unei pagini web. Nu încurajăm scripturile
java de blocare a afişării conţinutului, acesta fiind un motiv de penalizare în motoarele de căutare, şi
o metodă sigură de agasare a vizitatorului (care e obişnuit să folosească butonul dreapta al mouse-
ului) însă dacă aveţi stiluri proprii în pagină, de pildă, este de preferat să le introduceţi într-un
document separat (.css), către care să se lege fiecare pagină din site. Motivul principal este
optimizarea codului: nu mai e nevoie să introduceţi stilul în
fiecare pagină, reducând astfel considerabil codul. Pe de altă parte, la fel de important este de
reţinut că executând modificări repetate în pagină cu ajutorul unui editor vizual de html, aveţi toate
şansele să obţineti un
cod încâlcit, redundant, cu taguri inutile rămase din porţiuni şterse etc - de aceea este
recomandabil să executaţi codul „de mână” pe cât posibil. Suficient de „ameţit”, codul va genera
rapid şi funcţionarea
defectuoasă a site-ului.

5. Testare

Evident, când creaţi o pagină web o verificaţi în browserul vostru să vedeţi cum arată. Dar nu e
suficient, nici pe departe. O pagină care arată super în Internet Explorer 6.x, la rezoluţia voastră de
1024x768 se poate transforma într-un dezastru vizual la o rezoluţie diferită, cu un font size diferit, în
Netscape, Opera sau Mozilla.
Ţineţi cont şi de utilizatorii care au browserul setat să nu afişeze imagini, de cei care folosesc alt
sistem de operare decât Windows. Creaţi-vă tabelele, imaginile, textele (daca nu folosiţi CSS) astfel
încât să fiecompatibile cu vizualizarea în majoritatea situaţiilor (ideal în toate).

6. Feeback

Formularele sunt o parte interactivă a unui site. Într-o pagină cu formular, te apropii de vizitator mai mult
decât în celelalte. E stabilirea unei relaţii, şi începutul unui schimb. E poate partea cea mai personală
a unui site, acolo unde userul iţi dă informaţii despre el, iţi împărtăşeşte opiniile sale, tu îi oferi
un serviciu sau o
oportunitate etc. De aceea modul în care execuţi formularele este foarte important pentru succesul
site-ului tău. O relaţie se bazează pe respect şi încredere: dă-i vizitatorului ceea ce i-ai promis;
afişează-i o pagină de confirmare / mulţumire după completarea formularului; afişează-i o pagină de
eroare în cazul în care a completat greşit câmpurile sau a omis un câmp obligatoriu. Feedback,
feedback, feedback. Şi bineînţeles, verifică-ţi scripturile, ca să te asiguri că formularul funcţionează.

7. Prea mult text

Avem obişnuinţe rămase de la pagina de hârtie, şi de multe ori se vede pe web. O pagină de web nu e
citită în autobuz sau în tren (să numărăm cate laptopuri cu conexiune wireless se plimbă acum cu
rapidul Bucureşti-
Constanţa?). Pentru cărţi, există varianta e-Book. Nu faceţi exces de text, pentru că nu va fi citit.
Spargeţi textul în paragrafe, cu titluri relevante. În plus, sub 15% din utilizatori fac scroll pe o pagină
web, aşa încât încercaţi să păstraţi informaţia esenţială în partea de sus a paginii. Internetul e un
mediu dinamic, utilizatorii
obişnuiesc să acceseze mai multe pagini în acelaşi timp, şi evident sunt mai uşor distraşi de la
conţinutul fiecăreia dintre ele. Evident, un text dozat pentru astfel de condiţii de citire nu înseamnă
nicidecum un text laconic, din care vizitatorul să nu poată extrage nici o informaţie utilă. Dimpotrivă,
oferiţi-i un coctail de esenţe,
astfel încât să obţină cât mai multe informaţii într-un mod cât mai clar organizat, în cât mai puţin spaţiu.

8. Prea puţin text

Totuşi, nu fiţi laconici. Cine ajunge pe pagină, doreşte să se infomeze. Oferiţi suficiente date,
suficient conţinut, pentru vizitatori şi pentru motoarele de căutare. Oricum, de obicei site-urile web
păcătuiesc prin prea mul text, nu prea puţin.

9. Text de tip sp@m / reclama

Nu scrieţi: „Cel mai tare site de pe web”, „Cea mai bună firmă de consultanţă” sau "Cea mai mare
colecţie de mp3-uri". Lasaţi-l pe vizitator să decidă, arătaţi-i respect. În plus, formulări prea comerciale
au toate şansele să piardă vizitatorul. Şi el e sătul de reclamă, ca oricare dintre noi. Dacă a venit în
căutarea unei informaţii, oferiţii informaţia, nu laude de sine. Sunteţi îndeajuns bun în ceea ce faceţi ca
să-l convingeţi cu fapte, nu cu vorbe goale şi locuri comune care trec pe lângă ureche fără a fi
procesate. Sublinierile (underline) se folosesc doar pe linkuri, lăsaţi-le acolo. Nu folosiţi cuvinte scrise
cu majuscule, aceasta este o marcă a sp@mului, de care Internauţii s-au săturat până dincolo. Nu vreţi
să fiţi asociaţi cu un fenomen negativ.

10. Site map

Cu cât e mai mare un site, cu atât mai necesar devine un ghid de navigare. Utilizatorii sunt grăbiţi, deci
trebuie să le arătaţi exact unde găsesc ceea ce caută. De asemena, şi agenţii de căutare găsesc
foarte prietenoasă harta site-ului, din aceleaşi motive.

11. Mentenanţă

Un site trebuie întreţinut. Nu lăsaţi informaţii vechi, „expirate”. Aduceţi mereu conţinut nou pentru
vizitatori, dar şi pentru motoarele de căutare - dacă vreţi să aveţi un ranking bun. În fond, natura
Internetului este dată de însuşi dinamismul său. Ţineţi 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 tag-
ul <HTML> trebuie sa fie primul lucru care apare intr-un fisier HTML, iar tag-ul </HTML> trebuie sa fie
ultimul:

<HTML>
...aici se completeaza informatia de prezentat in pagina...
</HTML>

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 SRL</TITLE>
</HEAD>
<BODY>
...aici se completeaza continutul paginii...
</BODY>
</HTML>

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 SIZE=4 COLOR=#0000AA><B>ABC SRL - Lider pe piata serviciilor</B></FONT>
<BR>

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 tag-
ului 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 link-
urile 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):

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 WIDTH=80% HEIGHT=200 BORDER=1 CELLPADDING=0 CELLSPACING=5>


..........
</TABLE>

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:

<TABLE>
<TR><TD>CELULA 1</TD><TD>CELULA 2</TD><TD>CELULA 3</TD></TR>
<TR><TD COLSPAN=3>CELULA 4</TD></TR>
</TABLE>

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 3
CELULA 4 CELULA 5

Si codul este:

<TABLE>
<TR><TD>CELULA 1</TD><TD>CELULA 2</TD>
<TD ROWSPAN=2>CELULA 3</TD></TR>
<TR><TD>CELULA 4</TD><TD>CELULA 5</TD></TR>
</TABLE>

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 a 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 NAME=unu>Sectiunea 1</A>


...text pentru sectiunea 1...
<A NAME=doi>Sectiunea 2</A>
...text pentru sectiunea 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>e-
mail</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 e-
mail 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 FACE=ARIAL SIZE=1>
Toate drepturile rezervate.
Pagina realizata in anul 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 BACKGROUND=bkg.gif>

Efectul unei asemenea comenzi va fi (presupunand ca avem deja fisierul 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 COLS="120,*" FRAMEBORDER="NO" BORDER="0" FRAMESPACING="0">
<FRAME NAME="index" SRC=ex11_idx.html>
<FRAME NAME="main page" SRC=ex11_dat.html>
</FRAMESET>
</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 cele doua cadre se codifica astfel:

<HTML>
<FRAMESET ROWS="50%,*" FRAMEBORDER="NO" BORDER="1" FRAMESPACING="0">
<FRAME NAME="index" SRC=ex11_dat.html>
<FRAME NAME="main page" SRC=ex11b_dat.html>
</FRAMESET>
</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
• 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
de
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
cât ş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; font-
size: 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; border-
width: 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; border-
color: 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), iniţial a fost gândit a fi o simplă aplicaţie CGI pentru
interpretarea formularelor definte prin HTML şi procesate de un program scris într-un limbaj Perl, script
shell, executat pe server. În cazul interfeţei 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 fişierelor HTML, limbaj asemănător 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ă
incărcarea fişierelor 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ă aplicaţie este disponibilă gratuit pe Internet, pentru medii Unix şi mai nou pentru medii Windows
(inclusiv sursele), integrându-se în popularul sever Apache.
Istoria PHP-ului începe la sfârşitul anului 1994, când Rasmus Lerdorf dezvoltă prima versiune, ca proiect
personal. PHP-ul este făcut public în debutul anului 1995 sub denumirea de Personal Home Page Tools,
fiind considerat un analizor simplist care interpreta câteva macrouri ce puteau fi incluse în cadrul
documentelor HTML, permiţând contorizarea accesului la paginile Web sau accesarea unei carţi de
oaspeţi (guestbook). Analizorul a fost rescris la mijlocul aceluiaşi an şi denumit PHP/FI 2.0, unde FI era o
37
alta aplicaţie scrisă de Rasmus Lenford, un interpreter de formulare HTML. A fost adăugat ş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 sfârşitul lui 1996 cel puţin 15 mii de site-uri Web utilizau PHP/FI, iar în anul 1997
numărul acestora era de 50 de mii.
Programatorii Zeev Suraski şi Andi Gutmans rescriu analizorul PHP şi noua aplicaţie 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, utilizând 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 accesării documentelor XML via DOM.
Se estimează că numărul site-urilor care folosesc în prezent PHP este de peste un milion. Deja, pe Web,
exista o multitudine de aplicaţii şi utilitare concepute în PHP, care se regăsesc grupate şi în aşa-numitul
PEAR (PHP Extension and Add-on Repository).
Ce este PHP?
PHP este un limbaj de script care funcţionează alături 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 diferenţa 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 afişate în final într-o pagină HTML, veţi scrie o pagină
HTML cu codul inclus pentru a realiza o acţiune precisă (în cazul nostru se va afişa un text).
Codul PHP este inclus între tag-urile speciale de început şi de sfârşit 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 decât rezultatul execuţiei scriptului, fără a avea nici o
posibilitate de acces la codul care a produs rezultatul. Vă puteţi configura serverul de Web să prelucreze
(analizeze) toate fişierele HTML ca fişiere 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ă aceleaşi funcţii ca alte limbaje permiţând 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 număr mare de baze de date.
A realiza o pagină web dinamic cu o baza de date este extrem de simplu. Următoarele baze de date sunt
suportate de către PHP:
Adabas D InterBase PostgreSQL
dBase FrontBase Sesam
Empress mSQL Solid
FilePro Direct MS-SQL Sybase
Hyperwave MySQL Velocis
IBM DB2 ODBC Unix dbm

38
Informix Oracle
Ingres Ovrimos
Limbajul PHP are deasemenea suport pentru diverse servicii server utilizând 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ă instalaţi şi să configuraţi 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


Următoarele etape trebuie parcurse la orice instalare, înainte de instrucţiunile specifice serverului:
• Dezarhivaţi fişierele din distribuţie într-un director pe care îl doriţi, de exemplu "c:\php";
• Copiaţi fişierul "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
• Editaţi fişierul "php.ini":
o Modificaţi setarea 'extension_dir' pentru a indica directorul în care a fost instalat PHP, sau
directorul unde se află fişierele "php_*.dll", de exemplu "c:\php";
o Dacă folosiţi Omni Httpd, săriţi peste pasul următor. Setaţi 'doc_root' astfel încât să indice
documentul root ('document_root') al serverului web, de exemplu c:\apache\htdocs sau
c:\webroot;
o Alegeţi modulele care vreţi să fie încăcate atunci când porneş PHP-ul. Puteţi decomenta
liniile 'extension=php_*.dll' pentru a încărca aceste module. Unele module necesită ca
unele librării suplimentare să fie instalate pe sistemul dumneavoastră pentru a funcţiona
corespunzător. PHP FAQ conţine mai multe informaţii despre locul de unde puteţi obţine
librăriile necesare. Deasemenea, puteţi încărca dinamic module în scriptul dumneavoastră
folosind dl("php_*.dll");
o Pe PWS şi IIS, puteţi 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
Fişierele DLL pentru extensiile PHP sunt prefixate cu 'php_'. Aceasta previne confuzia între extensiile
PHP şi librăriile necesare.

Windows 95/98/NT şi PWS/IIS 3


Modul de configurare recomandat pentru aceste servere este utilizarea fişierului INF inclus în distribuţie
(php_iis_reg.inf). Puteţi edita acest fişier pentru a vă asigura că extensiile şi directorul de instalare al PHP
corespund configuraţiei dumneavoastră. Puteţi urma etapele de mai jos pentru a face acest lucru.
Observaţie: aceste etape implică lucrul direct cu regiţtrii Windows. O eroare provocată aici poate aduce
sistemul într-o stare instabilă. Vă recomandăm să faceţi mai întâi o copie a regiştrilor. Dezvoltatorii de
PHP nu vor fi responsabili dacă veţi distruge regiştrii.
• Rulaţi regedit;
• Mergeţi la HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc
/Parameters /ScriptMap;
• Din meniul Edit selectaţi New->String Value;
• Introduceţi extensia pe care doriţi să o folosiţi pentru scripturile php, de exemplu .php;
• Daţi dublu-click pe această valoare şi introduceţi calea spre php.exe în câmpul "Value data" (de
exemplu c:\php\php.exe %s %s). '%s %s' este foarte important, PHP nu va funcţiona corect fară el;
• Repetaţi aceşti paşi pentru fiecare extensie pe care doriţi să o asociaţi cu scripturile PHP;
• În continuare mergeţi la HKEY_CLASSES_ROOT;
• Din meniul Edit selectaţi New->Key;
• Denumiţi cheia cu numele extensie pe care l-aţi introdus în secţinuea precedentă, de exemplu
.php;
• Selectaţi noua cheie în panelul din partea dreaptă, daţi dublu-click pe "Default value" şi
introduceţi phpfile;
• Repetaţi ultimul pas pentru fiecare extensie introdusă în secţiunea precedentă;
• În continuare creaţi o nouă cheie în HKEY_CLASSES_ROOT şi numiţi-o phpfile;
• Selectaţi noua cheie (phpfile) în panelul din partea dreaptă, daţi dublu-click pe "Default value" şi
introduceţi PHP Script;
• Daţi click dreapta pe cheia phpfile şi selectaşi New->Key, pe care o veţi numi Shell;
• Daţi click dreapta pe cheia Shell, selectaşi New->Key şi denumiţi-o open;
• Daţi click dreapta pe cheia open, selectaşi New->Key şi denumiţi-o command;
• Selectaţi noua cheie (command) în panelul din partea dreaptă, daţi dublu-click pe "Default value"
şi introduceţi calea spre php.exe, de exemplu c:\php\php.exe -q %1;
• Închideţi regedit

Windows NT şi IIS 4
Pentru a instala PHP pe un server NT care rulează IIS 4 urmaţi următoarele instrucţiuni:
• În Internet Service Manager (MMC), selectaţi site-ul Web sau directorul unei aplicaţi;
• Deschideţi foaia de proprietăţi a directorului şi selectaţi Home Directory, Virtual Directory sau
Directory;

40
• Daţi click pe butonul Configuration, şi apoi pe App Mappings;
• Daţi click pe Add, şi introduceţi în căsuţa Executable c:\path-to-php-dir\php.exe %s %s;
• În căsuţa Executable introduceţi extensia pe care doriţi să o asociaţi cu scripturile PHP. (Repetaţi
paşii 5 şi 6 pentru fiecare extensie pe care doriţi să o asociaţi cu scripturile PHP. De obicei se
folosesc extensiile .php şi .phtml.);
• Setatţi modul de securitate corespunzător. Acest lucru este realizat în Internet Service Manager,
iar dacă serverul dumneavoastră NT foloseşte sistemul de fişiere NTFS adăugaţi drepturi de
execuţi pentru I_USR_ directorului care conţine php.exe.

Windows 9x/NT şi Apache 1.3.x


Pentru a configura Apache astefel încât să lucreze cu interpretorul PHP CGI trebuie să editaţi fişierele
srm.conf sau httpd.conf.
Deşi pot exista unele variaţii în configurarea PHP sub Apache, metoda următoare este destul de simplă
pentru a putea fi folosită de începători. Pentru următoarele directive de configurare vă recomandăm să
consultaţi documentaţia 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, creaţi un script PHP şi adăugaţii următorul cod: <?
php show_source ("original_php_script.php"); ?;>. Înlocuiţi original_php_script.php cu numele
fişierului a cărui sursă vreţi să fie afiştă (acesta este doar una din metodele de a face acest lucru).
Notă: în Apache pentru Windows toate back-slash-urile din numele unei căi 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: Instalaţi serverul Omni
• Pasul 2: Daţi click dreapta pe icoana OmniHTTPd din system tray şi selectaţi Properties
• Pasul 3: Daţi click pe Web Server Global Settings
• Pasul 4: La 'External', introduceţi: virtual = .php | actual = c:\path-to-php-dir\php.exe
• Pasul 5: La 'Mime', introduceţi: virtual = wwwserver/stdcgi | actual = .php
• Pasul 6: Daţi Ok.
Repetaţi paşi 2-6 pentru fiecare extensie pe care vreţi să o asociaţi cu PHP.

Modulele PHP
php_calendar.dll Funcţii de convesie a calendarului
php_crypt.dll Funcţi de cryptare
php_dbase.dll Funcţii DBase
php_dbm.dll Emulare GDBM via librăria Berkely DB2
php_filepro.dll Acces doar pentru citire a bazelor de date filepro

41
php_gd.dll Funcţii din librăria GD pentru lucrul cu gif-uri
php_hyperwave.dll Funcţii HyperWave
php_imap4r2.dll Funcţii IMAP 4
php_ldap.dll Funcţii LDAP
php_msql1.dll Client mSQL 1
php_msql2.dll Client mSQL 2
php_mssql.dll Client MSSQL (necesită librăriile MSSQL DB)
php3_mysql.dll (construit în PHP 4) Funcţii MySQL
php_nsmail.dll Funcţii de mail pentru Netscape
php_oci73.dll Funcţii Oracle
php_snmp.dll Funcţii SNMP "get and walk"(doar pentru NT)
php_zlib.dll Funcţii 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 editoare nu accepta tag-uri necunoscute (de exemplu
FrontPage)");
</script>

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


A doua metodă este cea mai utilizată, pentru că permite o implementare uşoara a PHP-ului cu generaţia
urmatoare XHTML.

Separatori de instrucţiuni
Instrucţiunile sunt separate, ca în C sau ca în Perl, prin punct şi virgulă la sfârşitul unei instrucţiuni.
Semnele de sfârşit, '?>', implică sfârşitul instrucţiunii, 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 făcute î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 alt test";

echo "Ultimul test"; # Un comentariu in stil Unix

42
Stilul de comentariu pe o linie ţine până la sfârşitul 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 următor (exemplul 2.2.1):
$a = 1234; # Numar intreg in baza 10
$a = -123; # Numar intreg negativ
$a = 0123; # Numar intreg in baza 8, octal (echivalent cu 83 in baza 10)
$a = 0x12; # Numar intreg 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 următoare
(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.
Observaţii:
• de obicei fracţiile zecimale simple, precum 0.1 sau 0.7, sunt convertite intern cu o mică pierdere
de precizie; aceasta poate să ducă la rezultate mai puţin exacte. De exemplu: floor( 0,1 + 0,7*10)
întoarce de obicei 7 în loc de aşteptatul 8, rezultatul reprezentării interne fiind de genul
7,9999999999;
• este imposibil să se exprime cu exactitate fracţiile zecimale cu număr infinit de cifre; de exemplu,
1/3 în formă zecimală devine 0,33333333...;
• dacă aveţi nevoie de o precizie mai mare în compararea valorilor în virgulă mobilă trebuie să
utilizaţi funcţiile matematice de precizie arbitrară.

Şiruri de caractere
Şirurile de caractere pot fi delimitate de ghilimele sau apostrofuri, în ultimul caz inhibându-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.

Secvenţe escape Valoare

\n Linie nouă (linefeed, LF sau 0x0A in ASCII)

\r Întoarcere la linie (carrige return, CR sau OxOD in ASCII)

\t Tab orizontal (HT sau 0x09 in ASCII)

\\ Backslash

\$ Semnul dolarului

\" Ghilimele

43
\[0-7] {1,3} Ordinea caracterelor corespunzând expresiei normale este un caracter în baza 8

\x[0-9A-Fa-f] {1,2} Ordinea caracterelor corespunzând 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 secvenţe escape
înţelese 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, acelaşi 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 utilizând operatorul '.', operatorul '+' fiind impropriu pentru această operaţie.
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
Când 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ă conţine 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 (opţional),
una sau mai multe cifre (opţional un puct zecimal), încheiate eventual cu un exponent. Acest
exponent ('e' sau 'E') este urmat de una sau mai multe cifre. Când prima expresie este un şir tipul
varibilei va depinde de a doua expresie.
Exemplul 2.2.5:
$aaa = 1 + "10.5"; // $aaa este double (11.5)
$aaa = 1 + "-1.3e3"; // $aaa este double (-1299)
$aaa = 1 + "bob-1.3e3"; // $aaa este integer (1)
$aaa = 1 + "bob3"; // $aaa este integer (1)
$aaa = 1 + "10 Small Pigs"; // $aaa este integer (11)
$aaa = 1 + "10 Little Piggies"; // $aaa este integer (11)
$aaa = "10.0 pigs" + 1; // $aaa este double (11)
$aaa = "10.0 pigs" + 1.0; // $aaa este double (11)

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

Tablouri unidimensionale
PHP acceptă atât tablouri scalare cât şi asociative. De fapt nu există nici o diferenţă între cele două. În
PHP tabolurile se pot crea utilizând funcţiile 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 adăugându-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 sortaţi utilizând funcţii specializate: asort(), arsort(), ksort(), rsort(), sort(), uasort(),
usort(), şi uksort().
Puteţi număra elementele tabloului utilizând funcţia count().
Puteţi parcurge un tablou utilizând funcţiile next(), prev() şi each().

Tablouri multidimensionale
Tablourile multidimensionale sunt în realitate tablouri simple. Pentru fiecare dimensiune a tabloului
trebuie adăugată o altă dimensiune [dim] la final.
$a[1] = $f; // Tablou unidimensional
$a["aaa"] = $f; // Tablou unidimensional
$a[1][0] = $f; // Tablou bidimensional
$a["aaa"][2] = $f; // Indicii asociativi si numerici se pot combina
$3[3]["bar"] = $f; // Indicii numerici si asociativi se pot combina
$a["aaa"][4]["bar"][0] = $f; // Tablou cu patru dimensiuni
În PHP nu este posibilă referirea tablourilor multidimensionale direct într-un şir.
Exemplul următor nu va furniza rezulatul aşteptat:

45
$a[3]['bar'] = 'Bob';
echo "Acesta nu merge: $a[3][bar]";
Exemplul de mai sus va afişa: 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ă incluzând referinţa la tabloul din interiorul şirului între
acolade ca în exemplul de mai jos:

$a[3]['bar'] = 'Bob';
echo "Acesta nu merge: {$a[3][bar]}";
Puteţi completa o matrice în multe moduri, dar important este să inţelegeţi cum puteţi să utilizaţi funcţia
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" => "rosu",
"aroma" => "dulce",
"forma" => "rotund",
"nume" => "mar",
3 => 4
);
Pentru tablouri asociative multidimensionale putem imbrica funcţia 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 iniţializa, se foloseşte 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ă atribuiţi variabilei var un şir de
caractere, var va deveni şir. Dacă îi atribuiţi 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 toţi operanzii sunt evaluaţi la double, şi rezultatul va fi un double. Altfel, operanzii vor fi
interpretaţi ca întregi şi rezultatul va fi tot un întreg. Reţineţi că acest mod de evaluare nu modifică tipul
operanzilor care intervin în expresie, ci numai modul în care ei sunt evaluaţi.
Exemplul 2.2.10:
$bbb = "0"; // $bbb este sir de caractere (ASCII 48)
$bbb++; // $bbb este sirul de caractere "1" (ASCII 49)
$bbb += 1; // $bbb este acum de tip intreg (2)
$bbb = $bbb + 1.3; // $bbb este acum de tip double (3.3)
$bbb = 5 + "10 Little Piggies"; // $bbb este de tip intreg (15)
$bbb = 5 + "10 Small Pigs"; // $bbb este de tip intreg (15)
Observaţie: conversia automată de la un tip simplu la tipul tablou este uzual nedefinită.
$a = 1; // $a este un intreg
$a[0] = "f"; // $a devine un vector de forma "f"
Deşi aparent variabila $a a fost transformată într-un tablou cu primul element f, exemplul următor nu
oferă un rezultat la fel de clar:
$a = "1"; // $a este un sir
$a[0] = "f"; // Ce se intampla cu offset-ul sirului?

Conversia explicită a tipurilor


Conversia explicită a tipurilor (cast) se face în acelaşi mod ca în C: numele tipului dorit este scris în
paranteze înaite de numele variabilei.
$a = 10; // $a este un intreg
$bar = (double) $a; // $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
Observaţi că eticheta şi spaţiile sunt permise între paranteze, deci liniile următoare 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
Când convertiţi 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 faţa numelui variabilei. Numele variabilelor
sunt formate după aceleaşi 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 liniuţe de subliniere.
PHP este un limbaj case-senzitiv (exemplul 2.3.1).
$var = "Jean";
$Var = "Paul";
echo "$var, $Var"; // Afiseaza Jean, Paul
$4site = 'nu inca'; // Incorect: incepe printr-o cifra
$_4site = 'nu inca'; // Corect: incepe printr-o liniuta de subliniere
$maïs = 'jaune'; // Corect: 'ï' este ASCII 239
În PHP 3, variabilele sunt asignate întotdeauna prin valoare. Astfel, când atribuim unei variabile o
expresie, întreaga valoare a expresiei este copiată în variabila destinaţie. 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 decât 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
determinând modificarea celeilalte. Deoarece nu are loc copierea şi actualizarea valorilor, asignarea prin
referinţă este mai rapidă. Diferenţa devine notabilă în cazul execuţiilor repetate sau la asignarea
tablourilor mari, respectiv a abiectelor.
Pentru a atribui prin referinţă, se introduce un ampersand, '&', în faţa variabilei care este atribuită
(variabila sursă). În exemplul următor, Numele meu este Pierre se va afişa de două ori (exemplul 2.3.2):
$aaa = 'Pierre'; // Atribui valoarea Pierre lui $aaa
$bar = &$aaa; /* Atribuire prin referinta
$aaa si $bar refera aceeasi locatie de memorie */
$bar = "Numele meu este $bar"; // Modific $bar , deci inmplicit si $aaa
echo $aaa;
echo $bar;
Observaţie: numai variabilele pot fi asigante prin referinţă.
Exemplul 2.3.3:
$a = 25;
$bar = &$a; // Atribuire posibila
$bar = &( 24 * 7); // Atribuire eronata: referinta unei expresii fara nume
function test()
{
return 25;
}
$bar = &test(); // Incorect: functia returneaza o valoare, nu o variabila

Variabile predefinite
PHP furnizează un mare număr 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 alţi factori. Unele dintre aceste variabile nu vor fi disponibile când 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 fişierele incluse într-un script.
Exemplu:
$a = 1;
include "b.inc";
Aici variabila $a va fi accesibilă în fişierul inclus b.inc. Implicit, toate variabilele utilizate într-o funcţie
sunt prin definiţie locale.
Exemplul 2.3.4:
$a = 1; // Influenta globala
function test()
{
echo $a; // Influenta locala
}
test();
Scriptul nu afişează nimic pe ecran deoarece instrucţiunea 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 absenţa unei referiri locale, variabilele globale din C sunt valabile în orice funcţie 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. Declarând variabilele $a şi $b globale în interiorul funcţiei Sum(),
orice referire la acestea în domeniul funcţiei se va face la declaraţiile globale. Numărul variabilelor
globale care pot fi manipulate de către o funcţie 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
conţinutul 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 funcţii dar nu îşi pierde valoarea când execuţia
programului părăseşte acest domeniu.
function Test()
{
$a = 0;
echo $a;
$a++;
}

49
Această funcţie este inutilă de vreme ce la fiecare apel variabila $a este setată la valoarea 0 care va fi
tipărită. Deşi în funcţie există instrucţiunea $a++ care incrementeză valoarea variabilei, la încheierea
execuţiei funcţiei această valoare se pierde, variabila $a având domeniu local. Pentru a păstra valoarea
incrementată a variabilei $a între două execuţii ale funcţiei, ea va fi declarată ca variabilă statică aşa cum
reiese din exemplul următor:
function Test()
{
static $a = 0;
echo $a;
$a++;
}
În acest caz la fiecare apel al funcţiei Test() va fi tipărită valoarea lui $a, apoi se va incrementa.
Variabilele statice oferă de asemeni posibilitatea de a implementa şi funcţiile recursive. O funcţie este
recursivă dacă se autoapelează. Proiectarea funcţiilor recursive trebuie făcută cu atenţie pentru a evita
recursia infinită. Trebuie asigurată o modalitate adecvată de încheiere a apelurilor recursive. Următoarea
funcţie recursivă numără până 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ă lucrăm cu nume de variabile ce pot fi tratate în mod dinamic. O variabilă
variabilă este un nume de variabilă care poate fi iniţializată şi utilizată în mod dinamic. O variabilă
normală este setată printr-o instrucţiune de forma:
$a = "hello";
O variabilă variabilă primeşte valoarea unei alte variabile şi o tratează ca şi cum ar fi un nume de
variabilă. În exemplul următor valoarea hello atribuită anterior poate fi tratată ca un nume de variabilă
utilizând de două ori semnul dolar:
$$a = "world";
În acest moment două variabile au fost definite şi memorate în tabela de simboluri PHP: $a conţinând
"hello" şi $hello conţinând şirul "world". Astfel instrucţiunea:
echo "$a $($a)";
produce aceeaşi ieşire ca şi instrucţiunea:
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ă precizăm dacă dorim să utilizăm $a[1] ca variabilă sau $$a şi apoi să indexăm
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 defineşte o serie de constante şi oferă un mecanism pentru definirea altora în timpul execuţiei.
Constantele seamănă mult cu variabilele; sunt definite cu jutorul funcţiei define() şi valoarea lor nu poate
fi modificată ulterior. Constantele predefinite (disponibile întotdeauna) sunt :
__FILE__
50
Se utilizează cu un fişier care a fost inclus sau solicitat, când numele fişierului inclus este dat;
__LINE__
Numărul liniei din scriptul curent care este analizat. Se utilizează împreună cu un fişier care a fost
inclus sau solicitat, când poziţia în fişierul inclus este dată;
PHP_VERSION
Un şir de caractere reprezentând versiunea PHP utilizată;
PHP_OS
Numele sistemului de operare în care rulează PHP;
TRUE
O valoare adevărată;
FALSE
O valoare falsă;
E_ERROR
Indică o eroare, alta decât o eroare de analizare, pentru care corectarea nu este posibilă;
E_WARNING
Indică o situaţie în care PHP ştie că ceva este greşit, dar continuă oricum;
E_PARSE
Semnalează o sintaxă invalidă în fişierul script; corectarea nu este posibilă;
E_NOTICE
S-a întâmplat ceva care poate fi sau nu o eroare; execuţia continuă. Spre exemplu am accesat o
variabilă care nu a fost iniţializată sau am folosit un şir neîncadrat între ghilimele ca index
asociativ.
Puteţi defini constante suplimentare utilizând funcţia define(). Reţineţi 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 construcţii ale PHP; în PHP aproape orice scrieţi 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ă construcţie 5 este o expresie constantă. De asemeni, funcţiile sunt expresii deoarece returnează
valoare.
Exemplu:
function f()
{
return 5;
}
Deoarece f() returnează valoarea 5, valoarea expresiei f() este 5. Bineînţeles, valorile nu trebuie să fie
neapărat î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 către funcţie.

51
PHP este un limbaj orientat pe expresii în sensul că aproape orice este o expresie. Operatorii de pre şi
postincrementare funcţionează analog cu cei din C. Un tip uzual de expresii îl reprezintă expresiile de
comparare. Aceste expresii sunt evaluate la 0 sau 1 reprezentând FALSE, respectiv TRUE.
PHP acceptă operatorii de comparaţie >, >=, ==, != (diferit), <, <=. Aceste expresii sunt utilizate uzual în
construirea condiţiilor. Ca şi în C se pot folosi operatorii de atribuire compuşi. În afară de faptul că
utilizarea acestor operatori compuşi duce la scurtarea codului, şi execuţia este mai rapidă. De asemeni,
PHP acceptă operatorul ternar condiţional '?', cu aceeaşi semnificaţie ca şi în C.
Următoarele exemple ilustrează utilizarea operatorilor compuşi ş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 adevăr 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 conţine elemente
este considerată FALSE, altfel este considerată TRUE.

I.6 Operatori
Operatori aritmetici
Exemplu Numele operaţiei Rezultat
$a + $b Adunare Suma dintre $a şi $b
$a - $b Scădere Diferenţa dintre $a şi $b
$a * $b Înmulţire Produsul dintre $a şi $b
$a / $b Împărţire Împărţirea lui $a la $b
$a % $b Modul Restul împărţirii lui $a la $b
Operatorul de împărţire ('/') întoarce o valoare întreagă (rezultatul împărţirii întregi) dacă cei doi operatori
sunt întregi (sau dacă şirurile sunt convertite la întregi). Dacă unul din operatori este număr cu virgulă
mobilă, sau rezultatul unei operaţii returnează o valoare care nu este întreagă, va fi returnată o valoare în
virgulă mobilă.

Operatori de atribuire
Operatorul de atribuire simplă este '='. Are semnificaţia: valoarea expresiei din dreapta se atribuie
variabilei din stânga (variabilă simplă sau structurată).
Putem spune că instrucţiunea de atribuire este formată din trei elemente: expresia care urmează să fie
atribuită, operatorul de atribuire '=' şi variabila destinatară.

52
Când este executată instrucţiunea de atribuire, este evaluată expresia şi valoarea rezultată este depusă la
destinaţia specificată.
Exemplu:
$a = ( $b = 4) + 5;
/* $a este egal cu 9 si $b cu 4 */
În operaţiile aritmetice şi pe şiruri de caractere se pot folosi şi operatorii compuşi, aşa cum reiese din
exemplul următor (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ţă, utilizând sintaxa $var = &$othervar;, dar acest lucru
nu este posibil în PHP3. Atribuirea prin referinţă înseamnă că cele două variabile referă aceeaşi locaţie de
memorie şi că modificarea uneia dintre ele o afectează şi pe cealaltă.

Operatori pe biţi
Operatorii pe biţi vă permit să manipulaţi numerele întregi în reprezentare binară.
Numele
Exemplu Rezultat
operatorului
$a & $b ŞI (AND) Biţii poziţionaţi pe 1 în $a ŞI în $b sunt poziţionaţi la 1 în rezultat
$a | $b SAU (OR) Biţii poziţionaţi pe 1 în $a SAU $b sunt poziţionaţi la 1 în rezultat
$a ^ $b XOR Biţii poziţionaţi pe 1 în $a SAU în $b sunt poziţionaţi la 1 în rezultat
~ $a NOT Biţii care sunt poziţionaţi pe 1 în $a vor fi poziţionaţi pe 0 şi vice versa
Deplasează biţii din $a cu $b poziţii spre stânga (fiecare pas înseamnă
$a << $b Deplasare la stânga
multiplicare cu 2)
Deplasează biţii din $a cu $b poziţii spre dreapta (fiecare pas înseamnă
$a >> $b Deplasare la dreapta
împărţire cu 2)

Operatori de comparaţie
Operatorii de comparaţie permit compararea a două valori.
Exemplu Numele operatorului Rezultat
$a == $b Egal Adevărat dacă $a este egal cu $b
Adevărat dacă $a este egal cu $b şi ei sunt de acelaşi tip (numai în PHP
$a === $b Identic
4)
$a != $b Diferit Adevărat dacă $a este diferit de $b
$a < $b Mai mic decât Adevărat dacă $a este mai mic strict decât $b.
$a > $b Mai mare decât Adevărat dacă $a este mai mare strict decât $b
$a <= $b Mai mic sau egal Adevărat dacă $a este mai mic sau egal ca $b
$a >= $b Mai mare sau egal Adevărat dacă $a este mai mare sau egal ca $b
Un alt operator condiţional este operatorul ternar ('?:'), care funcţionează 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 '@'. Când acest operator precede o expresie în PHP,
orice eroare care poate fi generată va fi ignorată. Dacă opţiunea 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 verificaţi-o la timp dacă doriţi să o utilizaţi.
Exemplu:
/* Eroare SQL intentionata (apostrofuri suplimentare) */
$res = mysql_query( "select name, code from 'namelist") or
die( "Query failed: error was '$php_errormsg'.");

Operatori de execuţie
PHP are un operator de execuţie '``' (backticks). Este diferit de ghilimelele simple.
PHP va încerca să execute conţinutul dintre aceste ghilimele oblice ca o comandă shell. Rezultatul va fi
returnat (nu va fi descărcat 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 Pre-incrementare Incrementează $a cu 1, apoi îl returnează
$a++ Post-incrementare Returnează $a, apoi incrementează $a cu 1
--$a Pre-decrementare Decrementează $a cu 1, apoi îl returnează
$a-- Post-decrementare Returnează $a, apoi decrementează $a cu 1
Exemplul 2.6.2:
echo "<h3>Post-incrementare</h3>";
$a = 5;
echo "Obtin valoarea 5: " . $a++ . "<br>";
echo "Obtin valoarea 6: " . $a . "<br>";

echo "<h3>Pre-incrementare</h3>";
$a = 5;
echo "Obtin valoarea 6: " . ++$a . "<br>";
echo "Obtin valoarea 6:" . $a . "<br>";

echo "<h3>Post-decrementare</h3>";
$a = 5;
echo "Obtin valoarea 5: " . $a-- . "<br>";
echo "Obtin valoarea 4: " . $a . "<br>";

echo "<h3>Pre-decrementare</h3>";
$a = 5;
echo "Obtin valoarea 4: " . --$a . "<br>";
echo "Obtin valoarea 4: " . $a . "<br>";

Operatori logici
Operatorii logici sunt:
Exemplu Numele operatorului Rezultat

54
$a and $b ŞI (AND) Adevărat dacă $a ŞI $b sunt adevărate
$a or $b SAU (OR) Adevărat dacă $a SAU $b este adevărat
! $a NON (NOT) Adevărat dacă $a este fals
Adevărat dacă $a SAU $b este adevărat , dar nu amândouă în acelaşi
$a xor $b XOR (XOR)
timp
$a && $b SI (AND) Adevărat dacă $a ŞI $b sunt adevărate
$a || $b SAU (OR) Adevărat dacă $a SAU $b este adevărat
Motivul pentru care există două tipuri de 'ŞI' şi 'SAU' este că ele au priorităţi diferite.

Precedenţa operatorilor
Precedenţa operatorilor specifică ordinea în care se aplică operatorii. De exemplu, în expresia 1 + 5 * 3
rezultatul este 16 şi nu 18, căci înmulţirea ('*') are prioritate superioară în raport cu adunarea ('+').
Tabelul următor conţine operatorii disponibili în PHP în ordinea crescătoare a priorităţilor.
Asociativitate Operatori
Stânga ,
Stânga or
Stânga xor
Stânga ŞI
Dreapta print
Stânga =, +=, -=, *=, /=, .=, %=, &=, |=, ^=, ~=, <<=, >>=
Stânga ?:
Stânga ||
Stânga &&
Stânga |
Stânga ^
Stânga &
Non-asociativ ==, !=, ===, !==
Non-asociativ <, <=, >, >=
Stânga <<, >>
Stânga +-
Stânga */, %
Stânga !, ~, ++, --, (int), (double), (string), (array), (obiect), @
Stânga [
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 stângă.
$a = "Hello";

55
$b = $a . "World!"; // $b contine sirul Hello World!

$a = "Hello";
$a .= "World!"; // $a contine sirul Hello World!

.7 Structuri de control
Toate scripturile PHP sunt o suită de instrucţiuni. O instrucţiune poate fi o atribuire, un apel de funcţie, o
instrucţiune condiţională sau chiar o instrucţiune vidă. O instrucţiune se termină de obicei prin punct şi
virgulă, ';'. Instrucţiunile pot fi grupate în blocuri delimitate de acolade, '{}'. Un bloc este considerat ca o
instrucţiune. Diferitele tipuri de instrucţiuni sunt descrise în capitolul următor.

if
Instrucţiunea if este importantă în toate limbajele, inclusiv în PHP. Ea permite execuţia condiţionată a
unei părţi de cod. Sintaxa instrucţiunii if este aceeaşi ca şi în C:
if( expresie)
{
listă de instrucţiuni
}
Cum am văzut în paragraful care se referă la expresii, expresie este evaluată la o valoare de adevăr. Dacă
expresia expresie este TRUE, PHP va executa instrucţiunile din lista de instrucţiuni, iar dacă ea este
FALSE, instrucţiunile vor fi ignorate.
Exemplu:
if( $a > $b)
echo "$a este mai mare decat $b";
Dacă dorim ca un grup de instrucţiuni să fie executate condiţionat, este suficient să închidem aceste
instrucţiuni între acolade pentru a forma un bloc.
Exemplu:
if( $a > $b)
{
echo "$a este mai mare decat $b";
$b = $a;
}
Instrucţiunile if pot fi imbricate pe oricâte niveluri dorim obţinându-se o structură condiţională extrem de
flexibilă.

else
Dacă dorim să executăm două instrucţiuni diferite în funcţie de valoarea de adevăr a unei expresii vom
folosi o instrucţiune if-else ca în exemplul următor:
if( $a > $b)
{
print "$a este mai mare decat $b";
}
else
{
print "$b este mai mare decat $a";
}
Instrucţiunile de după else sunt executate doar dacă expresia condiţională este evaluată la FALSE.

elseif
Aşa cum sugerează numele, este o combinaţie a instrucţiunilor if şi else. Ca şi else, instrucţiunea elseif
extinde o instrucţiune if pentru a executa alte instrucţiuni în cazul în care expresia condiţională din if este
FALSE. Spre deosebire de else, instrucţiunea alternativă va fi executată doar dacă expresia condiţională
din elseif este TRUE.
Spre exemplu, fragmentul următor de cod va afişa care este relaţia 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";
}
Instrucţiunile elseif se pot imbrica pe mai multe niveluri, după un if iniţial. Primul elseif care va fi evaluat
la TRUE va fi executat. În PHP, instrucţiunea poate fi scrisă şi în două cuvinte: else if. Comportamentul
său va fi acelaşi.

Sintaxa alternativă
PHP propune o sintaxa alternativă pentru instrucţiunile 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ă funcţionează de asemenea cu else şi elseif. Exemplul următor 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 instrucţiunii while este:
while( expresie)
{
listă de instrucţiuni
}
Execuţia unei bucle while este foarte simplă. PHP execută instrucţiunile din lista de instrucţiuni atât timp
cât expresia buclei while, expresie, este evaluată la TRUE. Valoarea expresiei este verificată la fiecare
început al buclei şi, dacă valoarea se schimbă pe durata execuţiei instrucţiunilor, execuţia nu se va sfârşi
decât la următoarea iteraţie (de fiecare dată când PHP execută instrucţiunile are loc o iteraţie). Dacă
expresia buclei while este FALSE înaintea primei interaţii, instrucţiunea nu va fi niciodată executată.
Mai multe instrucţiuni pot fi executate într-o buclă while grupându-le între acolade pentru a forma un
bloc sau utilizând sintaxa alternativă după modelul de mai jos:
while( expresie):
listă de instrucţiuni
endwhile;
Următoarele exemple sunt identice ca efect şi afişează 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 seamănă mult cu buclele while, dar expresia condiţională este testată la sfârşitul
fiecarei iteraţii şi nu la început. Principala diferenţă faţă de bucla while este că prima iteraţie a buclei
do..while este întotdeauna executată (expresia nu este testată decât la sfârşitul iteraţiei). Nu există decât o
sintaxă posibilă pentru buclele do..while:
do
{
listă de instrucţiuni
}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 obţinem
FALSE (deoarece variabila $i nu este mai mare decât 0) şi execuţia buclei se opreşte.
Utilizatorii familiari cu C sunt obişnuiţi să utilizeze în mod diferit buclele do..while, care permite oprirea
execuţiei buclei, prin introducerea instrucţiunii break într-o buclă do..while. Codul următor
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 funcţionează la fel ca buclele for din limbajul C.
Instrucţiunea are următoarea sintaxă:
for( expr1; expr2; expr3)
{
listă de instrucţiuni
}
Prima expresie (expr1) este evaluată (executată) o singură dată, necondiţionat, la începutul buclei.
La începutul fiecărei iteraţii, expresia expr2 este evaluată. Dacă evaluarea devine TRUE, bucla continuă
şi instrucţiunile din lista de intrucţiuni sunt executate. Dacă evaluarea devine FALSE, execuţia buclei se
opreşte.
La sfârşitul fiecărei iteraţii, 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 când dorim să
terminăm bucla cu instrucţiunea break.
În exemplele următoare vor fi afişate 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 foloseşte următoarea sintaxă alternativă pentru buclele for:
for( expr1; expr2; expr3):
listă de instrucţiuni
endfor;

foreach
PHP4 (nu şi PHP3) dispune de comanda foreach, ca Perl sau alte limbaje. Instrucţiunea 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 dintâi :
foreach( array_expresion as $value)
{
listă de instrucţiuni
}
foreach( array_expresion as $key => $value)
{
listă de instrucţiuni
}
Prima formă trece în revistă tabloul array_expression. La fiecare iteraţie, valoarea elementului curent este
atribuită lui $value şi pointerul intern al tabloului este avansat cu un element (astfel, la următoarea iteraţie
aveţi acces la următorul element).
A doua formă face acelaşi lucru, dar cheia (indicele) elementului curent va fi atribuită variabilei $key la
ficare iteraţie.

59
Notă: când foreach începe să fie executat, pointerul intern al fişierului este automat repoziţionat la primul
element al tabloului. Acest lucru înseamnă că nu veţi avea nevoie să faceţi apel la reset() înainte de
foreach. De asemeni, foreach lucrează cu o copie a tabloului astfel încât pointer-ul intern al tabloului nu
este modificat ca în cazul utilizării constructorului each.
Următoarele două exemple funcţionează în acelaşi mod:
reset( $arr);
while( list( , $value) = each( $arr))
{
echo "Valoare: $value<br>\n";
}

foreach( $arr as $value)


{
echo "Valoare: $value<br>\n";
}
Exemplele următoare funcţionează, 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
Instrucţiunea break permite ieşirea dintr-o instrucţiune if, for, while sau switch. Instrucţiunea break
acceptă un argument numeric opţional care va indica numărul de instrucţiuni 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
Instrucţiunea continue este utilizată într-o buclă pentru a sări peste instrucţiunile de după continue şi
până la sfârşitul blocului; execuţia iteraţiei curente este întrerupă şi se trece la execuţia iteraţiei următoare.
Instrucţiunea continue acceptă un argument numeric opţional care va indica câte 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
Instrucţiunea switch este echivalentă cu o serie de instrucţiuni if. Cu numeroase ocazii, veţi avea nevoie
să comparaţi aceeaşi variabilă (sau expresie) cu mai multe valori diferite şi să executaţi diferite parţi din
cod în funcţie de valoarea obţinută. Acesta este modul de execuţie al instrucţiunii switch.
Următorul exemplu ilustrează două modalităţi diferite de a scrie acelaşi lucru, una utilizează o serie de if
şi alta utilizează instrucţiunea 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ă înţelegem modul de execuţie al instrucţiunii switch pentru a evita apariţia erorilor.
Instrucţiunea switch se execută secvenţial, linie după linie. La început nu este executat nici un cod.
Numai când se gaseşte o valoare a selectorului identică cu o constantă case, PHP execută instrucţiunile
corespunzătoare respectivei constante case. PHP continuă să execute instrucţiunile pâna la sfârşitul
blocului de instrucţiuni switch sau până când întâlneşte instrucţiunea break. Dacă nu utilizaţi
instrucţiunea break la sfârşitul unui bloc case, PHP va continua să execute instrucţiunile din următorul
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 instrucţiunile print. Dacă $i este egal cu 1,
PHP va executa ultimele două instrucţiuni print şi numai dacă $i este egal cu 2 veţi obţine rezultatul
scontat, adică se va afişa $i este egal cu 2. Deci, imporatant este sa folosiţi corect instrucţiunea break.
În comanda switch, condiţia este evaluată o singură dată şi rezultatul este comparat cu fiecare constantă
case. Într-o instrucţiune elseif, condiţia este reevaluată. Dacă condiţia voastră este mai complicată decât o
simplă comparaţie sau apare într-o buclă, instrucţiunea switch se poate dovedi mai rapidă.
Lista de instrucţiuni a unei constante case poate fi vidă; în acest caz PHP va utiliza lista de instrucţiuni
din case-ul următor.
switch( $i)
{
case 0:
case 1:
case 2:
print "$i este mai mic decât 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";
}
Observaţie: expresia predefinită default poate fi folosită oriunde în instrucţiunea 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 dereferenţiate la un tip simplu.
Sintaxa alternativă pentru această structură de control este următoarea:
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;
default:
print "$i nu este egal cu 0, 1 sau 2";
endswitch;

include()
Funcţia include() introduce şi evaluează fişierul specificat în argument. Dacă URL fopen wrappers nu
sunt disponibile în PHP (aşa cum sunt în configuraţia implicită), puteţi specifica fişierul care trebuie
inclus utilizând un URL în locul unui pathname local. Pentru a evita utilizarea eronată a fişierului inclus,
orice cod din fişierul destinaţie care trebuie executat ca un cod PHP trebuie încadrat de tag-uri de început
şi sfârşit valide în PHP. De asemeni, se poate folosi o instrucţiune include() într-o buclă pentru a include
mai multe fişiere diferite, aşa cum reiese din exemplul următor:
$files = array( 'unu.inc', 'doi.inc', 'trei.inc');
for( $i = 0; $i < count( $files); $i++)
{
include( $files[ $i]);
}
Instrucţiunea include() este reevaluată de fiecare dată când este întâlnită într-un cod PHP. Deoarece
include() este o construcţie specială a limbajului, trebuie să o includeţi într-un bloc de instrucţiuni dacă ea
apare într-un bloc condiţional.
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, cât şi în PHP3, se poate executa o instrucţiune return în interiorul unui fişier inclus cu
include(), execuţia determinând încheierea procesului în respectivul fişier şi revenirea în scriptul care l-a
solicitat. De asemeni, PHP4 permite să returnaţi valori din fişierele incluse cu include(). Puteţi folosi
aceste valori ca şi cum ar fi returnate de o funcţie 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 când 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 conţine codul următor:
include( 'test.inc');
echo "Intoarcere in main.html<br>\n";
În PHP4 se va afişa:
Inainte de return
Intoarcere in main.html
Din contră, PHP3 afişează:
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ă instrucţiunea return este inclusă împreună cu
test.inc în acelaşi bloc. Dacă instrucţiunea return este mutată în afara blocului, se afişează:
Inainte de return
27 Intoarcere in main.html
"27" arată că PHP3 nu suportă returnarea valorilor din fişiere în acest mod.
Este important de notat că atunci când un fişier este inclus cu include() codul pe care îl conţine
moşteneşte domeniul variabilelor corespunzator liniei pe care apare instrucţiunea include() în cod. Orice
variabilă disponibilă pe respectiva linie va fi disponibilă şi în fişierul inclus.

include_once
Instrucţiunea include_once include şi evaluează fişierul specificat în timpul execuţiei scriptului.
Comportamentul este similar cu cel al instrucţiunii include(), deosebirea majoră fiind aceea că dacă codul
din fişier a fost deja inclus în script operaţia nu va fi repetată. Vom folosi această instrucţiune când un
fişier ar putea fi inclus şi evaluat de mai multe ori în execuţia unui anumit script şi dorim să ne asigurăm
că includerea sa se va efectua numai odată pentru a evita problemele care pot să apară la redefinirea
funcţiilor, reiniţializarea variabilelor etc.

II.8 Funcţii
Funcţiile definite de utilizator
O funcţie poate fi definită de utilizator conform sintaxei următoare:
function nume_functie( $arg1, $arg2, ..., $argN)
{
echo "Exemplu de functie.\n";
return $retval;
}
Într-o funcţie poate să apară orice cod PHP valid, chiar alte funcţii şi definiţii de clase.

64
În PHP3, funcţiile trebuie să fie definite înainte de a fi referenţiate; în PHP4 nu există o asemenea
restricţie. PHP nu susţine funcţii de supraîncarcare, nu se poate anula definirea sau redefini o funcţie
declarată anterior.
PHP3 nu acceptă număr variabil de argumente în antetul funcţiilor, dar acceptă argumente implicite.

Argumentul funcţiilor
Informaţiile pot fi transmise funcţiilor 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 număr variabil de argumente sunt acceptate doar în versiunea PHP4. Un efect similar
poate fi obţinut în PHP3 transmiţând funcţiei un tablou de argumente.
Exemplu:
function takes_array( $input)
{
echo "$input[0] + $input[1] = ", $input[0] + $input[1];
}

Transmiterea argumentelor prin referinţă


Implicit, argumentele funcţiilor sunt transmise prin valoare (în sensul că schimbarea valorii argumentului
în interiorul funcţiei nu se reflectă şi în afara funcţiei). Dacă doriţi să permiteţi unei funcţii să modifice
argumentele sale, acestea trebuie transmise prin referinţă.
Dacă vreţi ca un argument al unei funcţii să fie transmis prin referinţă, trebuie să precedaţi cu un '&'
numele argumentului în definiţia funcţiei, 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ă vreţi să transmiteţi o variabilă prin referinţă unei funcţii care nu face acest lucru în mod implicit,
trebuie să precedaţi cu un '&' numele argumentului în apelul funcţiei (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 funcţie 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ă. Observaţi
că atunci când folosiţi argumente implicite, orice astfel de argument trebuie să fie în lista argumentelor în
dreapta orcărui argument neimplicit, altfel nu vom obţine rezultatul aşteptat.
Consideraţi exemplul următor:
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 comparaţi cu acesta:
function makeyogurt( $flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry"); // Merge!!!
/* Afişează:
Making a bowl of acidophilus raspberry. */

Liste cu număr variabil de argumente


PHP4 acceptă liste cu număr variabil de argumente în funcţiile definite de utilizator. Acest lucru se obţine
uşor, utilizând funcţiile funct_num_args, funct_get_arg şi funct_get_args.

Valorile returnate de funcţii


Valorile sunt returnate folosind opţional instrucţiunea return. Poate fi returnat orice tip de rezultat,
inclusiv tablouri şi obiecte:
function square( $num)
{
return $num * $num;
}
echo square( 4); // Se afişează 16
Nu puteţi returna valori multiple dintr-o funcţie, dar rezultate asemănătoare pot fi obţinute 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 funcţie, trebuie folosit operatorul '&' atât în declaraţia funcţiei dar şi
când atribuiţi valoarea returnată unei variabile, ca în exemplul de mai jos:
function &returns_reference()
{
return &$someref;
}
$newref = &returns_reference();

Funcţii variabile
PHP susţine conceptul de funcţii variabile. Aceasta înseamnă că dacă numele unei variabile este urmat de
paranteze, PHP va caută o funcţie cu acelaşi 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 colecţie de variabile şi de funcţii care utilizează aceste variabile. O clasă se defineşte
utilizând următoarea 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;
}
}
}
Construcţia de mai sus defineşte o clasă Cart formată dintr-un tablou asociativ de articole şi două funcţii
pentru a adăuga şi a elimina articole din tablou.
Notă: în PHP4 sunt permişi doar iniţializatori constanţi pentru variabile var. Pentru iniţializatorii
neconstanţi trebuie folosiţi 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 foloseşte operatorul new.
67
$cart = new Cart;
$cart->add_item( "10", 1);
Acest cod crează un obiect $cart din clasa Cart. Funcţia add_item() a acestui obiect este apelată pentru a
adăuga un articol cu numărul 10 în tabloul $cart->items.
Clasele pot fi extensii ale altor clase. Această noţiune se numeşte moştenire. Clasa extinsă sau derivată
posedă toate variabilele şi funcţiile clasei de bază alături de variabilele şi funcţiile definite în extensie.
Acest lucrul se realizează utilizând cuvântul cheie extends. Moştenirea multiplă nu este acceptată.
class Named_Cart extends Cart
{
var $owner;

function set_owner( $an_owner)


{
$this->owner = $an_owner;
}
}
Codul de mai sus defineşte o clasă Named_Cart care are toate variabilele şi funcţiile din Cart plus o
variabilă suplimentară $owner şi o funcţie suplimentară set_owner(). Puteţi crea un obiect $ncart cu
operatorul new şi apoi puteţi seta proprietăţile obiectului.
Exemplu:
$ncart = new Named_Cart; // Creaza un nou obiect
$ncart->set_owner( "Kris"); // Seteaza proprietatea owner
print $ncart->owner;
$ncart->add_item( "10", 1); // Mostenire de la clasa de baza
În funcţiile unei clase variabila $this înseamnă obiectul curent. Pentru a accesa o variabilă sau funcţie a
obiectului curent, numită $proba, trebuie să utilizăm construcţia $this->proba. Atât în interiorul cât şi în
afara obiectului, nu este necesar semnul '$' ( în faţa unei "proprietăţi") când accesaţi o proprietate a
acestuia.
Exemplu:
$ncart->owner = "Chris"; // Fără $ în faţa proprietăţii $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 funcţiile dintr-o clasă care au acelaşi nume cu clasa. Ei sunt automat apelaţi când creaţi
o nouă instanţă a clasei.
class Auto_Cart extends Cart
{
function Auto_Cart()
{
$this->add_item( "10", 1);
}
}
Acest cod defineşte o clasă Auto_Cart care extinde clasa Cart plus un constructor care iniţializează
obiectul cu un articol, având numărul 10 de fiecare dată când un nou obiect de tipul Auto_Cart este creat
cu operatorul new.
Constructorii pot avea argumente (pot fi opţionale), 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 Referinţe
Ce sunt referinţele?
În PHP referinţele reprezintă posibilitatea de a referi conţinutul unei variabile prin nume diferite. În PHP
numele unei variabile diferă de conţinutul variabilei, deci un anumit conţinut poate fi identificat prin
nume diferite.

Ce fac referinţele?
Referinţele PHP permit referirea aceluiaşi conţinut prin două variabile diferite. Când scrieţi:
$a = &$b;
înseamnă că $a şi $b indică aceeaşi variabilă.
Al doilea lucru pe care îl realizează referinţele este să transmită variabile prin referinţă. Acest lucru se
realizează folosind variabila locală a funcţiei şi variabila cu care se face apelul drept referinţe către acelaşi
conţinut.
Exemplu:
function fct( &$var)
{
$var++;
}

$a = 5;
fct( $a);
Apelul de mai sus va duce la obţinerea valorii 6 în variabila $a. Acest lucru se întâmplă deoarece în
funcţia fct() variabila $var referă acelaşi conţinut ca şi variabila $a.
Al treilea lucru pe care îl pot face referinţele este întoarcerea unei valori prin referinţă.

Ce nu sunt referinţele?
Referinţele nu sunt pointeri. Astfel, următoarea construcţie nu va întoarce rezultatul aşteptat:
function fct( &$var)
{
$var = &$GLOBALS[ "baz"];
}

fct( &bar);
În momentul apelului $var va intra în corespondenţa cu $bar din apelator, dar va fi redirectată către
$GLOBALS[ "baz"].

Întoarcerea referinţelor
Întoarcerea prin referinţă este utilă când doriţi să utilizaţi funcţii pentru a găsi variabile care ar trebui
legate cu acestea. Când returnaţi referinţe folosiţi sintaxa:
function &find_var( $param)
{
//... code...
return &$found_var;
}

$fnc = &find_var( $bar);


În acest exemplu proprietatea obiectului returnat de funcţia find_var() trebuie setată, nu copia acesteia
cum s-ar întâmpla dacă nu am utiliza sintaxa prin referinţă.

69
Observaţie: spre deosebire de transmiterea parametrilor, trebuie să utilizaţi '&' în ambele locuri pentru a
indica ce întoarceţi prin referinţăa (şi nu prin valoare cum este uzual) şi pentru a spune cui i se atribuie
respectiva referinţă.

Resetarea referinţelor
Când resetaţi o referinţă rupeţi practic legatura dintre numele şi conţinutul variabilei. Aceasta nu
înseamnă ca acel conţinut al variabilei va fi distrus.
Exemplu:
$a = 1;
$b = &$a;
unset( $a);
Secvenţa de cod de mai sus nu va reseta $b ci numai variabila $a.
Multe construcţii sintactice în PHP sunt implementate prin mecanismul referinţelor, deci modul lor de
funcţionare se poate aplica acestor construcţii. Unele construcţii, cum ar fi transmiterea şi întoarcerea prin
referinţă, au fost deja menţionate. Alte construcţii care folosesc referinţele sunt referinţele globale. Când
declaraţi variabila $var ca variabilă globală creaţi defapt o referinţă la o variabilă globală. Semnificaţia
este aceeaşi 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.

Funcţii pentru gestionarea fişierelor


basename
Are sintaxa:
string basename( string path)
Funcţia primeşte ca parametru un şir reprezentând un nume de cale şi returnează numele fişierului 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 fişierului filename în group. Doar superuserul poate schimba grupul unui fişier arbitrar;
ceilalţi utilizatori pot schimba doar grupul unui fişier la care sunt membri. Funcţia returnează TRUE în
caz de succes şi FALSE în caz contrar.
Notă: funcţia nu este disponibilă pe platformele Windows.

chmod
Are sintaxa:
int chmod (string filename, int mode)
Schimbă drepturile de acces ale fişierului filename în mode.

70
Observaţie: 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ă veţi obţine rezultatul dorit, trebuie să
prefixaţi 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
Funcţia returnează TRUE în caz de succes şi FALSE în caz contrar.
Notă: funcţia nu este disponibilă pe platformele Windows.

chown
Are sintaxa:
int chown( string filename, mixed user)
Schimbă proprietarul fişierului filename cu user. Doar superuserul poate schimba proprietarul unui fişier.
Funcţia returnează TRUE în caz de succes şi FALSE în caz contrar.
Notă: funcţia nu este disponibilă pe platformele Windows.

copy
Are sintaxa:
int copy( string source, string dest)
Funcţia copie un fişier sursă într-un fişier destinaţie. 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)
Funcţia returnează numele directorului din calea path.
Exemplu:
$path = "/etc/passwd";
$file = dirname( $path); // $file ia valoarea /etc

diskfreespace
Are sintaxa:
float diskfreespace( string directory)
Funcţia returnează numărul octeţilor disponibil în directorul sau partiţia de disc precizată prin şirul
directory.
Exemplu:
$df = diskfreespace( "/"); // $df conţine numărul octeţilor disponibili în "/"

fclose
Are sintaxa:
int fclose( int fp)
Închide fişierul referit prin fp. Întoarce TRUE în caz de succes şi FALSE în caz contrar.
Variabila fp trebuie să indice un fişier valid, adică un fişier deschis cu fopen() sau fsockopen().
71
feof
Are sintaxa:
int feof( int fp)
Returnează TRUE dacă pointerul de fişier este poziţionat pe EOF sau în caz de eroare, altfel returnează
FALSE.
Variabila fp trebuie să indice un fişier valid, adică un fişier deschis cu fopen(), popen() sau fsockopen().

fflush
Are sintaxa:
int fflush( int fp)
Forţează scrierea tuturor bufferelor de ieşire în fişierul indicat de fp. Returnează TRUE în caz de succes şi
FALSE în caz contrar.
Variabila fp trebuie să indice un fişier valid, adică un fişier deschis cu fopen() sau fsockopen().

fgetc
Are sintaxa:
string fgetc( int fp)
Returnează un caracter citit din fişierul fp. Returnează FALSE în cazul în care caracterul citit este EOF.
Variabila fp trebuie să indice un fişier valid, adică un fişier deschis cu fopen(), popen() sau fsockopen().

fgets
Are sintaxa:
string fgets( int fp, int length)
Returnează un şir de maxim length-1 octeţi citiţi din fişierul indicat de fp. Citirea se încheie când au fost
citiţi length-1 octeţi, când se citeşte new line (este inclus în valoarea returnată) sau EOF. Dacă apare o
eroare la citire returnează FALSE.
Variabila fp trebuie să indice un fişier valid, adică un fişier 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 funcţia readfile(), cu excepţia faptului că, conţinutul fişierului este returnat într-un tablou.
Fiecare element al tabloului corespunde unei linii din fişier (inclusiv caracterul new line ataşat).
Se poate folosi un parametru opţional setat cu "1" dacă doriţi ca fişierul să fie căutat în calea specificată.
Exemplu:
/* Scrie conţinutul unei pagini web într-un tablou şi apoi îl tipăreşte */
$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 conţinutul 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ă fişierul specificat prin filename există şi FALSE în caz contrar.

filesizes
Are sintaxa:
int filesize( string filename)
Întoarce dimensiunea fişierului specificat prin filename dacă acesta există şi FALSE în caz de eroare.

filetype
Are sintaxa:
string filetype( string filename)
Întoarce tipul fişierului 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])
Funcţia deschide un fişier sau un URL. În cazul deschiderii unui URL se stabileşte o conexiune către
serverul Web specificat.
În cazul unui fişier obişnuit acesta este căutat în sistemul propriu de fişiere şi deschis. Dacă deschiderea
eşuează funcţia returnează FALSE. Argumentul mode poate avea una din următoarele valori:
• 'r'
Deschide un fişier numai pentru citire plasând indicatorul de fişier la începutul acestuia;
• 'r+'
Deschide un fişier pentru citire şi scriere plasând indicatorul de fişier la începutul acestuia;
• 'w'
Deschide un fişier numai pentru scriere, plasează indicatorul de fişier la începutul acestuia şi
trunchează fişierul la lungimea 0. Dacă fişierul nu există aşteaptă să fie creat;
• 'w+'
Deschide un fişier pentru citire şi scriere, plasează indicatorul de fişier la începutul acestuia şi
trunchează fişierul la lungimea 0. Dacă fişierul nu există aşteaptă să fie creat;
• 'a'
Deschide un fişier numai pentru scriere (adăugare) şi plasează pointer-ul de fişier la sfârşitul
acestuia. Dacă fişierul nu există aşteaptă să fie creat;
• 'a+'
Deschide un fişier pentru citire şi scriere (adăugare) şi plasează pointer-ul de fişier la sfârşitul
acestuia. Dacă fişierul nu există aşteaptă să fie creat.
73
Argumentul mode poate conţine 'b'. Această opţiune este utilă în sistemele care fac diferenţa între fişierele
binare şi fişierele text. Dacă nu este necesar, respectivul caracter va fi ignorat. Dacă doriţi ca fişierul să fie
căutat în calea specificata (path), folosiţi al treilea parametru setat cu "1".
Exemplu:
$fp = fopen( "/home/rasmus/file.txt", "r");
$fp = fopen( "/home/rasmus/file.gif", "wb");
$fp = fopen( "http://www.php.net/", "r");
$fp = fopen( "ftp://user:password@example.com/", "w");

fpassthru
Are sintaxa:
int fpassthru( int fp)
Funcţia citeşte fişierul fp pâna la EOF şi afişează rezultatul la ieşirea standard.
În cazul unei erori funcţia returnează FALSE. Variabila fp trebuie să indice un fişier valid, adică un fişier
deschis cu fopen(), popen() sau fsockopen(). După citire funcţia închide fişierul.

fputs
Are sintaxa:
int fputs( int fp, string str [, int length])
Funcţia scrie şirul string în fişierul fp în întregime (dacă argumentul length lipseşte) sau numai length
octeţi din acesta. fputs() este un alias pentru fwrite() şi este identic cu aceasta.

fread
Are sintaxa:
string fread( int fp, int length)
Funcţia citeşte cel mult length octeţi din fişierul binar fp. Citirea se încheie când s-au citit length octeţi
sau EOF.
Exemplu:
/* Citeşte conţinutul unui fişier î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...])
Funcţia citeşte informaţiile din fişierul indicat de fp şi interpretează aceste informaţii conform formatului
specificat prin parametrul format. Dacă funcţia primeşte doar doi parametri valorile analizate vor fi
returnate ca un tablou, altfel funcţia va returna numărul valorilor asignate. Parametrii opţionali trebuie
transmişi 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])
Funcţia setează poziţia indicatorului de fişier în fişierul indicat de fp. Noua poziţie, măsurată în octeţi faţa
de începutul fişierului se obţine adăugând valoarea offset la poziţia specificată prin argumentul whence.
Aceste valori sunt definite astfel:
• SEEK_SET
Setează poziţia indicatorulului de fişier la offset bytes faţă de începutul fişierului;
• SEEK_CUR
Setează poziţia indicatorului de fişier la offset bytes faţă de poziţia curentă (poziţia curentă plus
offset);
• SEEK_END
Setează poziţia indicatorului de fişier la offset bytes faţă de sfârşitul fişierului (sfârşitul fişierului
plus offset).
Dacă argumentul whence nu este specificat se consideră a fi SEEK_SET. În caz de succes funcţia
returnează 0, altfel returnează -1. Trecerea peste EOF nu este considerată eroare.

ftell
Are sintaxa:
int ftell( int fp)
Funcţia returnează poziţia curentă a indicatorului de fişier asociat fişierului referit prin fp. În caz de eroare
întoarce FALSE. Variabila fp trebuie să indice un fişier valid, adică un fişier deschis cu fopen() sau
popen().

ftruncate
Are sintaxa:
int ftruncate( int fp, int size)
Funcţia truncheaza fişierul 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])
Funcţia scrie conţinutul argumentului string în fişierul indicat de fp. Dacă argumentul length este precizat
scrierea se opreşte după length octeţi 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 fişier obişnuit.

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ă funcţie 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 fişierul indicat de fp. Variabila fp trebuie să indice un fişier valid care a fost deschis cu popen() .

popen
Are sintaxa:
int popen( string command, string mode)
Deschide un pipe către un proces executat conform comenzii dată prin argumentul command. Funcţia
întoarce identificatorul fişierului deschis, la fel ca fopen(), doar că este unidirecţional (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
Citeşte conţinutul fişierului filename şi îl tipăreşte la ieşirea standard. În caz de succes întoarce numărul
de octeţi citiţi din fişier şi FALSE în caz de eşec. Dacă doriţi ca fişierul să fie căutat în calea specificată
prin path al doilea parametru va fi setat cu "1".

rename
Are sintaxa:
int rename( string oldname, string newname)
Redenumeşte un fişier schimbându-i numele din oldname în newname. Returnează TRUE în caz de
succes şi FALSE în caz de eşec.

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 fişierul filename şi returnează 0 sau FALSE în caz de eroare.
Notă: funcţia nu este disponibilă în sistemele Windows.

cţii pentru tablouri


Aceste funcţii vă permit să gestionaţi tablourile în diferite moduri. Tablourile sunt esenţiale pentru
memorarea, gestionarea şi operarea cu mulţimi 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 funcţie obişnuită.
Sintaxa index => valori, separată prin virgulă, defineşte indexul şi valorile. Indexul poate fi de tip şir sau
numeric. Când indicele este omis, un index întreg este automat produs începând de la 0. Dacă indexul este
un întreg, indexul următor produs va fi indexul întreg mai mare cu 1. Notaţi că atunci când se definesc doi
indecşi identici cu valori diferite, ultima valoare o suprascrie pe prima.
Următorul 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(
"fruits" => array( "a" => "orange", "b" => "bannana", "c" =>
"apple"),
"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);
Conţinutul este:
array( [0] => 1, [1] => 1, [2] => 1, [3] => 13, [4] => 1, [8] => 1, [9] => 19)

77
Notaţi că indicele 3 este definit de două ori şi ţine valoarea sa finală, 13. Indexul 4 este definit după
indexul 8 şi indexul următor devine 9 (pentru a estima 19), de vreme ce indicele cel mai mare era 8.
Următorul 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 conţine:
array( [1] => 'ianuarie', [2] => 'februarie', [3] => 'martie')

array_count_values
Are sintaxa:
array array_count_values( array input)
Funcţia returnează un tablou folosind valorile din tabloul de intrare, input, drept chei şi frecvenţa 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 ...])
Funcţia returnează un tablou care conţine toate valorile tabloului array1 care nu sunt prezente în nici unul
din celelalte argumente; cheile sunt păstrate.
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 ...])
Funcţia returnează un tablou conţinând toate valorile lui array1 care sunt prezente în toate celelalte
argumente; cheile sunt păstrate.
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])
Funcţia returnează cheile (numerice sau şiruri de caractere) ale tabloului input.
Dacă argumentul search_value este specificat, atunci doar cheile corespunzătoare 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 ...])
Funcţia concatenează elementele a două sau mai multe tablouri astfel încât elementele unui tablou se
adaugă la sfârşitul tabloului precedent. Returnează tabloul obţinut.
Dacă tablourile de intrare au aceleaşi 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 obţinut este:
array( "color" => "green", 2, 4, "a", "b", "shape" => "trapezoid", 4)

array_multisort
Are sintaxa:
bool array_multisort( array ar1 [, mixed arg [, mixed ... [, array ...]]])
Funcţia poate fi utilizată pentru a sorta mai multe tablouri odată sau un singur tablou multidimensional în
funcţie 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 funcţii este puţin neobişnuită, 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 crescătoare;
• SORT_DESC
Ordonare în ordine descrescătoare.
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 acelaşi tip după un argument. Funcţia întoarce TRUE dacă sortarea a
reuşit ş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 conţine 10, "a", 100,100. Al doilea conţine 1, 1, 2, "3".
Intrarea în al doilea tablou corespunde intrărilor 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 conţine 10, 100, 100, "a" (a fost sortat ca şiruri de
caractere în ordine crescătoare), iar al doilea va conţine 1, 3, "2", 1 (sortat ca numere în ordine
descrescătoare).

array_pad
Are sintaxa:
array array_pad( array input, int pad_size, mixed pad_value)
Funcţia returnează o copie a tabloului input având 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 stânga. 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); // Tabloul $result conţine (12, 10, 9, 0,
0)
$result = array_pad( $input, -7, -1); // Tabloul $result conţine (-1, -1, -1, -1,
12, 10, 9)
$result = array_pad( $input, 2, "noop"); // Umplerea nu are loc

array_pop
Are sintaxa:
mixed array_pop( array array)
Funcţia extrage şi returnează ultimul element din tabloul array şi micşorează 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 ...])
Funcţia tratează tabloul ca pe o coadă şi introduce valorile primite ca argumente la sfârşitul tabloului.
Lungimea tabloului creşte cu numărul de variabile introduse. Are acelaşi efect ca şi instrucţiunea:
$array[] = $var;
repetată pentru fiecare $var.
Exemplu:
$queue = array( 1, 2);
array_push( $queue, "+", 3);
// Tabloul $queue va conţine: 1, 2, "+" şi 3
80
Funcţia returnează noul număr de elemente din tablou.

array_reverse
Are sintaxa:
array array_revers( array array [, bool preserve_keys])
Funcţia returnează un nou tablou care conţine elementele tabloului array în ordine inversă.
Exemplu:
$input = array( "php", 4.0, array( "green", "red"));
$result = array_reverse( $input);
// Tabloul $result va conţine ( array( "green", "red"), 4.0, "php")
Notă: funcţia nu modifiă cheile tabloului dacă argumentul preserve_key este TRUE.

array_shift
Are sintaxa:
mixed array_shift( array array)
Funcţia extrage şi returnează primul element din tabloul array, mută elementele cu o poziţie spre stânga şi
reduce dimensiunea tabloului cu 1.
Exemplu:
$args = array( "-v", "-f");
$opt = array_shift( $args);
/* Tabloul $argc va conţine elementul "-f";
variabila $opt va fi "-v" */

array_slice
Are sintaxa:
array array_splice( array input, int offset [, int length [, array replacement]])
Funcţia extrage o porţiune dintr-un tablou; returnează secvenţa elementelor din argumentul input
specificată prin parametrii offset şi length.
Dacă offset este pozitiv, secvenţa va începe la acea poziţie din tablou. Dacă offsset este negativ, secvenţa
va începe la aceea poziţie faţă de sfârşitul tabloului.
Dacă length este precizat şi este pozitiv, atunci secvenţa va avea length elemente. Dacă length este
precizat şi este negativ, atunci secvenţa se va opri la length elemente faţă de sfârşitul tabloului. Dacă
length lipseşte secvenţa va conţine toate elementele începând de la poziţia offset până la sfârşitul
tabloului.
Exemplu:
$input = array( "a", "b", "c", "d", "e");
$output = array_slice( $input, 2); // Returnează "c", "d" şi "e"
$output = array_slice( $input, 2, -1); // Returnează "c" şi "d"
$output = array_slice( $input, -2, 1); // Returnează "d"
$output = array_slice( $input, 0, 3); // Returnează "a", "b" şi "c"

array_sum
Are sintaxa:
mixed array_sum( array arr)
Funcţia calculează şi returnează suma elementelor din tabloul arr ca un număr întreg sau float.

array_unique
Are sintaxa:
array array_unique( array array)

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

array_unshift
Are sintaxa:
int array_unshift( array array, mixed var [, mixed ...])
Funcţia inserează valorile specificate în listă la începutul tabloului array în aceeaşi ordine. Valorile
iniţiale sunt deplasate spre dreapta şi dimensiunea tabloului creşte cu numărul valorilor introduse;
returnează noua dimensiune a tabloului.
Exemplu:
$stack = array( "p1", "p3");
array_unshift( $stack, "p4", "p5", "p6");
// Tabloul $stack va conţine: "p4", "p5", "p6", "p1" şi "p3"

array_values
Are sintaxa:
array array_values( array input)
Funcţia 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])
Funcţia sortează descrescător tabloul array astfel încât legăturile dintre indicii asociativi şi valorile
indicate de către aceştia să se menţină. Veţi folosi această funcţie 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 obţine:
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple
Fructele au fost sortate în ordine alfabetică descrescătoare păstrând legătura dintre indec7#351;ii
asociativi şi elemente.

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

82
Funcţia sortează crescător tabloul array astfel încât legăturile dintre indicii asociativi şi valorile indicate
de către aceştia să se menţină. Veţi folosi această funcţie 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ă păstrând legătura dintre indec7#351;ii asociativi şi elemente.
Exemplul de mai sus va furniza rezultatul:
fruits[c] = apple
fruits[b] = banana
fruits[d] = lemon
fruits[a] = orange

count
Are sintaxa:
int count( mixed var)
Funcţia returnează numărul 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 iniţializată.
Exemplu:
$a [0] = 1;
$a [1] = 3;
$a [2] = 5;
$result = count( $a); // $result == 3

each
Are sintaxa:
array each( array array)
Funcţia returnează cheia curentă şi valoarea corespunzătoare 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 conţin numele elementului din tablou, iar 1 şi value conţin valoarea.
Dacă s-a ajuns la sfârşitul tabloului funcţia each() returnează FALSE.
Exemplu:
$my_list = array( "bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each( $my_list);
Variabila $bar va conţine conţine următoarele 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 conţine conţine următoarele perechi key/value:
0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'
Funcţia each() este utilizată în conjuctură cu funcţia 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)
Funcţia poziţionează poinerul intern al tabloului pe ultimul element.

in_array
Are sintaxa:
bool in_array( mixed needle, array haystack)
Funcţia caută valoarea needl în tabloul haystack şi întoarce TRUE dacă o găseşte ş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)
Funcţia întoarce indicele elementului corespunzător poziţiei curente în tablou.

list
Are sintaxa:
void list(...)
Nu este o funcţie reala ci un constructor de limbaj. Este utilizată pentru a asigna o listă de variabile printr-
o singură operaţie.
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ă funcţie implementează un algoritm de sortare care ordonează alfanumeric şirurile, aşa cum ar
proceda un operator uman. Această ordonare se numeşte ordonare naturală. Diferenţa dintre acest
84
algoritm şi modul uzual în care un calculator sortează şirurile - utilizând 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 ieşire:
Standard sorting
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)

Natural order sorting


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

natcasesort
Are sintaxa:
void natcasesort( array array)
Această funcţie implementează un algoritm case-insenzitiv de sortare care ordonează alfanumeric şirurile,
aşa cum ar proceda un operator uman.

next
Are sintaxa:
mixed next( array array)
Funcţia avansează pointer-ul intern la următorul element din tablou care este returnat drept rezultat. Dacă
tabloul nu mai are elemente se returnează FALSE.

prev
Are sintaxa:
mixed prev( array array)
Funcţia devansează pointer-ul intern cu o poziţie şi returnează elementul respectiv. Dacă tabloul nu mai
are elemente se returnează FALSE.

range
Are sintaxa:
array range( int low, int high)
Funcţia crează şi returnează un tablou de întregi cu valori cuprinse între low şi high, inclusiv.

reset
Are sintaxa:
mixed reset( array array)

85
Funcţia poziţioneaza 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])
Funcţia sortează un tablou în ordine descrescătoare.
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 afişează:
fruits[0] = orange
fruits[1] = lemon
fruits[2] = banana
fruits[3] = apple

sizeof
Are sintaxa:
int sizeof( array array)
Funcţia returnează numărul de elemente dintr-un tablou.

sort
Are sintaxa:
void sort( array array [, int sort_flags])])
Funcţia sortează elementele unuii tablou în ordine crescătoare.
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 afişează:
fruits[3] = apple
fruits[2] = banana
fruits[1] = lemon
fruits[0] = orange
Parametrul sort_flags poate fi utilizat pentru a modifica modul de sortare, fiind disponibile următoarele
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 funcţii este asemănătoare cu cea din functiile Perl. Orice
expresie trebuie delimitată de 2 aceleaşi caractere, de exemplu slash (/). Ca delimtatori pot fi folosiţi 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 sfârşit pot apărea modiifcatorii care fac potrivirea. Vezi Modificatori
pattern
Exemplu 1. Exemple de pattern valide
• /<\/\w+>/
• |(\d{3})-\d+|Sm
• /^(?i)php[34]/
Exemplu 2. Exemple de pattern invalide
• /href='(.*)' - lipseşte delimitatorul de sfârşit
• /\w+\s*\w+/J - modificator necunoscut 'J'
• 1-\d3-\d3-\d4| - lipseşte delimitatorul de început
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 înlocuieşte
• 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 căutării este stocat în acest tablou. $matches[0] va conţine
subşirul care se potriveşte întregului pattern, $matches[1] va avea subsirul care se potriveşte primului
subpattern dintre paranteze, şi.a.m.d.
Întoarce true dacă s-a găsit un subşir din subject ce se potriveşte pattern dat, sau false în caz contrar.
Exemplu 1. Caută subşirul "php"
// caracterul "i" de după pattern indică o căutare 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ă cuvântul "web"
// sirul \b din pattern indică marginea unui cuvânt, deci întregul cuvântul
// "web" este căutat, şi nu părţi 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);

// afişează subsirul ce s-a potrivit celui de-al 2-lea subpattern dintre paranteze
echo "domain name is: ".$matches[2]."\n";
Acest exemplu v-a afişa:
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 găsită, urmatoarele căutări încep de la sfârşitul 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 subşiruri 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 afişa:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
Deci, $out[0] conţine un tablou de string care s-au potrivit întregului pattern, şi $out[1] conţine 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 afişa:
<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ă numărul potrivirilor pentru întregul pattern, sau false dacă nu s-a găsit 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 afişa:
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 înlocieşte 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 conţine referinţe 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 numărate de la stânga la dreapta(pornind de la 1)
pentru a obtine numărul de subpattern-uri care capturează textul.
Dacă nu se găseşte 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 căutarea ş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
foloseşte pentru a face căutarea şi înlocuirea în subject. Dacă replacement are mai putine valori decât
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. Indicaţie: aveţi 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 afişa:
$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 adăugat în PHP 4 Beta 3.
Întoarce ca valoare un tablou ce conţine subşiruri din subject ce se potrivesc cu pattern.
Dacă apare limit, atunci doar limit subşiruri sunt returnate
Dacă flags este PREG_SPLIT_NO_EMPTY atunci doar partile nevide vor fi prelucrate de preg_split().
Exemplu 1. Aflarea părţilor componente ale unui şir.
// împarte fraza în cuvinte despărţite de virgulă sau spaţii 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 faţa fiecărui caracter care face parte din sintaxa expresiilor regulate un backslash.
Aceasta este util când şirul conţine caractere speciale
Dacă este specificat si parametrul opţional 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 cuvânt 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. Funcţiile pentru expresii regulate
sunt:
• ereg()
• ereg_replace()
• eregi()
• eregi_replace()
• split()
• spliti()
Toate funcţiile au ca prim argument o expresie regulată. PHP foloseşte 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 găsit oriunde în $string. */

ereg ("^abc", $string);


/* Returneaza true dacă "abc"
este găsit la începutul şirului $string. */

ereg ("abc$", $string);


/* Returneaza true dacă "abc"
este găsit la sfârşitul ş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 spaţii
î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 sfârşitul ş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 - Înlocuieşte o expresie regulată
• eregi - Caută o potrivire pentru o expresie regulată (case insensitive)
• eregi_replace - Înlocuieşte 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 găsite potriviri pentru subşirurile dintre paranteze din pattern, şi tabloul regs apare ca argument
în funcţie, atunci potrivirile vor fi puse în acest tablou. $regs[1] va conţine subşirul potrivit pentru prima
paranteză, $regs[2] pentru a 2-a, s.a.m.d. $regs[0] va conţine o copie a şirului string.
Dacă ereg() găseşte potriviri în orice caz, $regs va fi completat cu exact 10 elemente, chiar dacă s-au
potrivit mai multe sau mai puţine de 10 subşiruri. Dacă nu s-a găsit nici o potrivire $regs rămâne
eschimbat.
Căutarea este case sensitive.
Returnează true dacă a fost găsită o potrivire în şir, sau false în caz contrar.
Următorul cod ia la intrare o dată calendaristică în format ISO (aaaa-ll-zz) şi o afişează î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)
Funcţia caută în string potriviri pentru pattern, apoi le înlocuieşte cu replacement.
String-ul modificat este returnat. (Dacă nu se găseşte nici o potrivire este returnat string-ul iniţial.)
Dacă pattern conţine subşiruri între parenteze, replacement poate conţine subşiruri de forma \\număr, care
vor fi înlocuite cu textul care se potriveşte cu al număr-elea subşir dintre paranteze; \\0 va fi întregul şir.
Pot fi folosite până la 9 subşiruri. Parantezele pot fi imbricate.
Dacă nu este găsită nici o potrivire, string este returnat neschimbat.
De exemplu, următorul cod afişează "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);
Atenţie la următorul lucru: dacă folosiţi un număr pentru textul de înlocuit, nu veţi obţine rezultatul dorit.
Aceasta deoarece ereg_replace() va interpreta numărul ca fiind codul unui caracter. De exemplu:
Exemplu 2. Exemplu ereg_replace()
<?php
/* Codul nu va da rezultatul aşteptat. */
$num = 4;
$string = "This string has four words.";

93
$string = ereg_replace('four', $num, $string);
echo $string; /* Ieşire: 'This string has words.' */

/* Însă acesta da. */


$num = '4';
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Ieşire: 'This string has 4 words.' */
?>

eregi
(PHP3 , PHP4 )
Descriere
int eregi (string pattern, string string [, array regs])
Funcţia se comportă identic cu ereg() nefăcând distincţie între literele mari şi mici la căutarea unei
potriviri (nu este case sensitive).

eregi_replace
(PHP3 , PHP4 )
Descriere
string eregi_replace (string pattern, string replacement, string string)
Funcţia se comportă identic cu ereg_replace() nefăcând distincţie între literele mari şi mici la căutarea
unei potriviri (nu este case sensitive).

split
(PHP3 , PHP4 )
Descriere
array split (string pattern, string string [, int limit])
Returnează un tablou de string-uri, având ca elemente subşiruri ale string rezultate din împărţirea string
conform pattern. Dacă apare şi limit, tabloul va conţine maximum limit elemente, ultimul element
conţinând restul rămas din string. Dacă apare o eroare, split() va întoarce false.
Pentru a prelua primele 5 câmpuri 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 despărţire(-)
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";
Atenţie, pattern este case-sensitive.
Dacă nu aveţi nevoie explicit de expresii regulate, folosiţi unlinked explode(). Este mai rapidă.

De asemenea pattern este o expresie regulată. Dacă doriţi să împărţiţi string după caractere speciale, va
trebui să le securizaţi mai întâi. Dacă funcţia split() (sau orice altă funcţie regex) se comportă ciudat, citiţi
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])
Funcţia se comportă identic cu split() nefăcând distincţie între literele mari şi mici la căutarea unei
potriviri (nu este case sensitive).

95

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