You are on page 1of 98

PROGRAMUL DE FORMARE PROFESIONALA- CALIFICARE

- PENTRU OCUPATIA -

WEB DESIGNER

SUPORT DE CURS
CUPRINS

1. Analiza si proiectarea structurii site-ului


2. Limbajul HTML
3. Limbajul PHP

I ANALIZA SI PROIECTAREA STRUCTURII SITE-ULUI

1. Noiuni introductive

Pentru a lucra pe internet este necesar s nelegei notiunile de client i


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

Browser Este un program care ofer o interfa ntre utilizator i serverul de web
de pe Internet. Browserul contacteaz serverul i transmite cererea de
informaie apoi primete informaia i o afieaz pe calculatotul
clientului
CGI Common Gateway Interface - standard care definete o modalitate
prin care serverele Web comunic cu programe externe i vice-versa,
astfel nct programele externe pot produce cod HTML sau imagini, iar
serverul le trateaz la fel ca orice cod HTML sau imagini care nu sunt
generate de programe externe.
CSS Cascading Style Sheet Stilurile pun la dispoziia creatorilor de site-uri
web noi posibiliti de personalizare a paginilor HTML. Un stil
reprezint un mod de formatare exact a unui bloc de text (spre
exemplu anumite caracteristici pentru font, mrime, culoare, aranjare n
pagin, distanare fa de margini etc).
Flash Flash este un instrument cu ajutorul cruia se pot construi pagini web
animate sau interactive
FTP File Transfer Protocol, cel mai simplu mod de a transmite fiiere ntre
calculatoare pe Internet
GET Metod n protocolul HTTP, prin care datele dintr-un formular sunt
trimise adugnd la sfrsitul URL-ului un semn de ntrebare i
coninutul formularului. Se creeaz un URL extins coninnd adresa
paginii i parametrii care trebuie trimii scriptului (de exemplu
http://www.domeniu.dom/cgi-bin/script.pl?name=John& tel=1274).
hiperlink Legturile (link-urile) reprezint partea cea mai important a unei
pagini Web. Ele transform un text obinuit n hipertext sau
hiperlegtur, care permite trecerea rapid de la o informaie aflat pe
un anumit server la alt informaie memorat pe un alt server aflat
oriunde n lume.
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, permind scrierea de secvene de program care se
execut la apariia 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, asemntor javascript, n sensul c amndou permit
introducerea unor programe (scripturi) n paginile web
Plug-in Aplicaiile de tip plug-in sunt similare celor de tip helper (Se folosesc
pentru executarea fiierelor audio sau video sau pentru a afia diverse
formate grafice necunoscute de browser.), dar, spre deosebire de
acestea, ele lucreaz direct n interiorul browserelor
POST Metod din protocolul HTTP prin care datele din formular nu sunt
trimise ca parte a URL-ului, ci sub forma unui fiier codat cu standardul
MIME nglobat n corpul mesajului trimis ctre server.
URL Uniform Resouce Locator - reprezint unui site
www World Wide Web este un univers de informaie disponibil prin protocol
HTTP
XML eXtensible Markup Language - Xml este un limbaj creat pentru a
structura, stoca i transmite informaiile. Spre deosebire de HTML, care
a fost creat pentru a afia datele, XML a fost proiectat pentru a descrie
datele
3.Tipuri de site-uri

n funcie de rolul pe care si+l propun siteurile web, acestea sunt de mai
multe tipuri.

Site-uri de prezentare de companie


Site-uri care ofer informaii despre o companie, incluznd profilul, istoricul,
portofoliul, produsele i serviciile, locaia i alte informaii.
Site-uri de prezentare de produs / eveniment
Site-uri care ofer informaii despre un produs, o gam unitar de produse sau un
eveniment.
Portaluri generaliste
Acestea sunt site-uri care intesc publicul larg. Este vorba despre portaluri
"orizontale" care ofer linkuri sau directoare ctre alte site-uri, reunesc coninut
intern i extern i ofer servicii diverse pentru utilizatori, de tipul conturilor de
e-mail.

Magazine online

Site-uri care vnd online produse sau servicii i faciliteaz tranzaciile.

Comuniti virtuale
Site-uri care faciliteaz interaciunea i comunicarea. Accentul este pus pe
instrumente i elemente care ntresc sentimentul de apartenen precum
tirile comunitii, chat-uri, forum-uri.
Servicii i tranzacii online
Site-uri care ofer servicii de recrutare, de vnzare a spaiilor publicitare, servicii
matrimoniale, servicii de trimitere a felicitrilor, albume foto online, agende,
servicii de e-mail, calendare online, arhivarea fiierelor, download-uri,
nregistrarea domeniului, etc.

Mass-media
Versiuni online ale publicaiilor, televiziunilor sau radio-urilor care ofer tiri,
inclusiv site-uri de tiri care au doar versiune online.
Divertisment
Site-uri dedicate jocurilor, hobby-urilor, sportului, muzicii sau umorului.

Activism social
Site-uri care promoveaz o cauz social i au ca obiectiv mobilizarea sau
obinerea sprijinului unor categorii de public.
Celebriti i personaliti
Site-uri care prezint personaliti publice, punnd accentul pe rezultate
deosebite, pe interese sau pe biografia complet etc. Site-uri dedicate unor
muzicieni, actori sau actrie, simboluri ale culturii, echipe de sport, personaliti
de televiziune, politicieni.
E-guvernare
Site-uri care au legtur cu serviciile guvernamentale, incluznd siteurile care
ofer acces la serviciile online ale instituiilor guvernamentale i site-uri
care disemineaz informaii despre decizii guvernamentale.

Art i cultur
Site-uri de arte vizuale i expresie artistic, teatru, literatur, muzic clasic,
arhitectur. Siteurile includ elemente de coninut precum cronici, recenzii,
expoziii, galerii, portofolii, etc. Pentru site-uri al cror obiectiv principal este
vnzarea online a unor produse, inclusiv artistice, este recomandat seciunea
"Magazine online".
Portaluri tematice
Site-uri care acoper ct mai mult un domeniu anume al cunoaterii. Ofer
referine i informaii pe o tem bine conturat.

Site-uri ale instituiilor


Site-uri de prezentare a unor instituii, primrii, coli, licee, universiti, care
cuprind informaii, istoric
etc.

Site-uri personale
Site de prezentare; conine CV, fotografii, date de contact, etc.

4.Structura unei pagini Web

n afar de unele pri opionale, majoritatea paginilor Web conin


urmtoarele elemente. Aceste elemente trebuie cunoscute deoarece diversele
browsere interpreteaz n mod diferit aceste pri. Elementele prezentate sunt de obicei
vizibile prin intermediul browserului:
1. Titlu - este afiat pe bara de titlu a ferestrei n care apare pagina.
2. Text - trasmite scopul i coninutul paginii
3. Semntura - este afiat n partea de jos a paginii, identific autorul paginii
i adesea include i o
adres de e-mail a autorului (webmaster).
4. Linii orizontale - decoreaz pagina i o mpart n seciuni logice.
5. Imagini - ofer mai multe informaii n pagin.
6. Culoare sau model de fundal - reprezint o culoare solid sau o imagine
integrat care este afiat n
spatele textului.
7. Animaii - text sau imagini care se mic ntr-un anumit fel.
8. Legturi - conduc vizitatorul ctre alte locaii (alte pagini Web, adrese de e-mail,
fiiere tip document,
videoclipuri, etc)
9. Hri de imagini - imagini
10. Formulare - locaii unde vizitatorii pot rspunde la un chestionar online.

Exist i alte elemente care aparin paginii Web, dar care nu sunt vizibile:
1. Elementele de identificare - numele sau adresa de e-mail a autorului, un
sistem special de codare,
care ajut motoarele de cutare s descopere subiectul i coninutul paginii.
2. Comentarii - textul pe care autorul dorete s l fac vizibil doar atunci cnd
este citit direct codul
HTML, nu atunci cnd pagina este vizualizat cu un browser.
3. HTML - formatul de fiier n care paginile Web sunt stocate pe un computer.
4. Codul JavaScript - adaug elemente dinamice paginii Web
5. Applet-uri Java - mbuntesc interaciunea dintre browser i server.
5. Structura unui site

Modul de structurare a site-ului se refer la navigarea n cadrul acestuia. O


navigare uoar ntre pagini presupune prezena unei bare de navigare n care s fie
prezente alturi de pagina gazd i paginile cele mai importante. Toate seciunile unui
site trebuie s se mbine armonios n structura acestuia perminduse astfel trecerea
uoar de la o seciune la alta. O structur bun se aseamn cu structura unui arbore
care ar avea i nite conexiuni ntre ramurile sale cele mai mari.
Pe Web se ntlnesc mai multe moduri de organizare logic a informiei ntr-un site:
1. Structura de tip panou de prezentare - o singur pagin simpl care descrie o
person, o afacere sau
un produs. Multe pagini personale sunt realizate n acest mod: conin legturi
ctre resurse preferate
pe Internet, dar nu i ctre pagini din cadrul aceluiai document.
2. Structura liniar de o pagin - o pagin Web creat pentru a fi citit de sus pn
jos. Poate fi utilizat un
cuprins pentru a-i ajuta pe vizitatori s fac salturi rapide ctre orice seciune.
3. Structura liniar pe mai multe pagini - aceeai structur ca mai sus, numai c
paginile curg una dup
alta. Vizitatorii sunt ghidai prin plasarea n josul fiecarei pagini a unei
legturi care conduce ctre
pagina precedent i cea urmtoare.
4. Structura ierarhic - structura clasic ntlnit pe Web. Pagina gazd (sau o
pagina special) trebuie
sa conin un fel de "cuprins" al site-ului, cu legturi ctre paginile cele mai
importante. Acestea din
urm sunt practic nite pori de intrare ctre seciuni specializate ale site-ului,
coninnd i ele table de
materii cu adresele paginilor web subordonate.

5. . Structura de tip reea - este o structur ierarhic fr ierarhie. Orice pagin


poate conine o legtur
ctre alt pagin. Exist o pagin principal, dar apoi vizitatorii se pot plimba
prin acea reea fr o
cale anume.
Se pot realiza site-uri web, pornind de la cel de prezentare i pn la
dezvoltarea de module dinamice
i soluii pentru comerul electronic i vnzarea online. Tehnicile folosite sunt: HTML,
Javascript, CSS, PHP,
MySQL, Flash, XML, WML, WAP etc. Dac dorim s crem singuri site-ul va trebui s
nvm limbajul HTML
i s nvm s folosim un program de editare HTML. Exist i opiunea
(recomandat pentru nceptori) s
folosim un program de editare HTML de tipul VIZINT (vizual-intuitiv) care ne permite s
crem pagini web i s
adugam elemente HTML la ele fr sa cunoatem limbajul HTML. Programele de
tip vizit sunt numite n
limba engleza WYSIWYG ("what you see is what you get" - ceea ce vezi este
ceea ce vei obine) i ele
necesit din partea utilizatorului doar pricepere n aranjarea n pagina a coninutului
acesteia.
Exist foarte multe programe de editare HTML, dintre care o parte sunt
gratuite. Un program de tipul
VIZINT este "FrontPage" produs de compania Microsoft. Alte programe de editare
HTML de tipul VIZINT sunt
"OpenOffice.org HTML Editor" care este disponibil n suita gratuit OpenOffice.org
(prezenta n mod periodic
pe CD-urile unor reviste cu specific IT) i "Trellian WebPage" (necesit nregistrare
gratuit pe site-ul productorului).
6. Criterii
In realizarea proiectelor, un webdesigner se poate baza pe urmtoarele criterii:

6.1. Coninut

- obiectul declarat este uor de recunoscut;


- coninutul este relevant, folositor i captivant pentru vizitatori;
- informaia este clar i concis.
- evitai folosirea unui limbaj strict tehnic, care nu poate fi ineres pe deplin de toat
audiena
Un site trebuie s aib un coninut original, bogat, interesant i actualizat
periodic pentru a deveni popular n rndul utilizatorilor. Un astfel de site va fi vizitat
frecvent chiar dac aspectul su grafic nu este la cel mai nalt nivel. Un rol important l
are alturi de coninutul n informaie i modul de scriere al materialelor. Acestea
trebuie s fie redactate ntr-un stil uor de citit, fr fraze excesiv de lungi i
complicate. Toate materialele trebuie s fie verificate pentru a nu conine greeli de
ortografie.

6.2. Uurin n folosire

- textul este lizibil, iar imaginile i celelalte elemente multimedia sunt optimizate
pentru specificul publicului int;
- organizarea informaiilor este intuitiv;
- folosii CSS (Cascading Style Sheets). Folosii fiiere css pentru formatarea
textului. Putei
schimba astfel foarte uor formatarea ntregului site iar dimensiunea paginilor se
micoreaz.
- informaiile importante sunt uor de gsit.
- adugai o nota la paginile web prin care s reamintii vizitatorilor s fac un
bookmark (semn de carte). Acest lucru va duce la creterea anselor ca vizitatorii s
se ntoarc.
6.3. Design

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


- conceptul creativ este uor de identificat i coerent;
- designul nu atrage atenia de la coninut;
- folosii aceleai fonturi, dimensiune a textului i culoare a fundalului pentru tot site-ul
- folosii acelai aliniament (stnga, dreapta sau centru) pentru machetarea paginilor
- designul este suficient de diversificat pentru a pstra atenia utilizatorilor.
Aspectul grafic al unui site se refer la aezarea n pagin a materialelor i la
gama de culori folosite.
Materialele de pe site trebuie s fie uor de citit, adic trebuie s aib un corp de liter
adecvat, s fie scrise pe un fundal plcut i odihnitor pentru ochi i s fie formatate
(mprite n paragrafe, etc.) special pentru o citire uoar. De asemenea trebuie
luat n calcul adugarea de imagini i tabele dac este necesar acest lucru.
Trebuie evitat cu orice pre suprancrcarea cu elemente grafice inutile a site-ului
pentru c n caz contrar afiarea paginilor devine greoaie. Utilizatorii din toata lumea
au drept caracteristic lipsa de rbdare i ca urmare este foarte probabil s nu
atepte pn la capt descrcarea paginii i s prefere mai degrab vizitarea unui
alt site. Elementele grafice cu dimensiuni n KB importante (de tipul animaiilor
Flash sau a imaginilor mari) trebuie folosite cu moderaie i doar dac este necesar.
Pe web mrimea conteaz. Pe de alt parte autorul unui site specializat n grafic
web poate s pun pe site-ul su oricte animaii Flash i imagini dorete pentru c
site-ul este cartea sa de vizit i i pune n eviden talentul.
6.4. Funcionaliti

- site-ul este compatibil cu mai multe platforme;


- timpul de ncrcare al paginii este sczut;
- toate link-urile i formularele funcioneaz corect;
Accesibilitatea reprezint una dintre cerinele de baz atunci cnd se
proiecteaz o pagina web. Aceasta nseamn c orice netsurfer poate s aib
acces la site-ul pe care l-ai realizat, indiferent de browserul pe care-l folosete
(inclusiv browsere text ca Lynx), rezoluia sau dimensiunile ecranului, setrile
calculatorului sau eventualele disfuncii ale vederii.
Din aceste motive, nu trebuie s proiectai un sit web pentru un browser specific
sau pentru o anumit rezoluie a monitorului. Cutai s evitai inserarea n pagina
principal a unor anunuri de forma: "Acest site se vede cel mai bine cu Internet
Explorer 5.5 " sau "Folosii o rezoluie de 768 x 1024" n acest fel nu facei dect
s ndeprtai cititorii care folosesc un alt browser sau o alt rezoluie. Este puin
probabil ca acetia s ncarce browserul IE 5.5 sau s schimbe rezoluia monitorului
numai pentru a vedea n cele mai bune condiii paginile dvs. Prin accesibilitate se
nelege i oferirea unor informaii necesare unui alt tip de vizitatori ai siteurilor web.
Acetia sunt roboii motoarelor de cutare. Pentru ei trebuie s completai cu atenie
etichetele META corespunztoare (TITLE, DESCRIPTION, KEYWORDS etc). Foile de
stiluri (style sheets), scripturile, appleturile Java i tehnologia Flash sunt noi apariii n
arsenalul webdesignerilor. Toate acestea trebuiesc ns folosite cu maxim atenie
deoarece nu toate browserele le pot suporta, iar unii utilizatori au dezactivate
opiunile respective. De asemenea, nu uitai s folosii atributele ALT, WIDTH i
HEIGHT asociate etichetei IMG. Realizarea unui site accesibil unor categorii ct mai
largi de utilizatori implic imaginaie i mult munc, dar rezultatele vor fi pe msura
efortului depus.

6.5. Culori

Culoarea, pentru un designer grafic reprezent o simpl noutate, fiind


destinat doar pentru proiectele de anvergur i pentru designul ambalajelor. Dei
anterior a fost considerat prea scump pentru a fi folosit fr rost, acum ea este ceva
obinuit. Alb-negrul a devenit avangardist i artistic.
Au trecut de asemenea zilele n care culoarea era folosit doar pentru a ne
bucura de ea. Culorile au o semnificaie cultural. Dumneavoastr, ca designer, avei
responsabilitatea de a cunoate semnificaia lor dar i de a fi n pas cu tendinele
coloristice.
Folosii culori pastelate pe fonduri albe. Identitatea voastr, dar nu n mod
necesar sigla, poate fi asociat cu orice culoare pe care o dicteaz tendinele actuale.
Alte influene asupra preferinelor coloristice le reprezint problemele sociale
i stilul de via. Dac cineva este interesat de o problem sau de o cauz,
persoanele respective pot s prefere culorile asociate acelei cauze. De exemplu, un
ecologist poate fi subiectiv n faa unor culori cum ar fi brunul sau verdele. Un
militant al homosexualilor poate prefera culori mai vii i mai vibrante, deoarece
curcubeul este folosit foarte des pentru imaginea cauzei acestora. Un cretin
conservator se va nclina spre culori conservatoare cum ar fi bleu-marin i gri. Ar fi
indicai s avei n vedere asemenea factori, cnd v adresai unui anumit public-int.
Interesul culorilor
Culorile au n general anumite implicaii sociale. n timp ce nici o semnificaie
preconceput nu poate fi considerat universal, cercettorii consider c urmtoarele
nelesuri sunt oarecum precise:

Negru:
Semnificaie: Autoritate sau putere i, uneori, rutate. Darth Vader era negru din
toate aceste motive.
Alb:
Semnificaie: Puritate, sterilitate sau inocen. Miresele poarta alb pentru a sugera
puritatea i inocena.
Rou:
Semnificaie: Furie, avertizare, conflict i dragoste. Culoarea roie poate chiar s
provoace puls ridicat i respiraie accelerat. Folosit n anumite contexte, poate avea
un efect negativ, pe cnd n altele poate avea un efect benefic.
Albastru:
Semnificaie: Calm, pace - dar rece i deprimant -, nobilitate, loialitate. Costumele
pentru afaceri sunt de multe ori bleu-marin pentru c aceasta implic loialitate; n
acelai timp, slile de clas sunt deseori zugrvite
n albastru deschis, datorit efectului calmant al albastrului. n limbaj muzical, se
vorbete deseori de blues (n englez, blue = albastru), deoarece att acest stil
muzical ct i culoarea pot avea un efect deprimant.
Verde:
Semnificaie: Naturalee, prospeime i fertilitate. Legtura clar cu verdele este
natura, dar folosirea acestei culori n spitale este similar cu efectul albastrului, verdele
fiind i el o culoare care calmeaz.
Galben:
Semnificaie: Fericire, optimism i concentrare. Galbenul mbuntete capacitatea
de concentrare i ea poate contrasta cu aproape toate culorile.
Violet:
Semnificaie: Regalitate, lux i romantism. De-a lungul istoriei, familiile regale au
fost asociate cu violetul datorit faptului c se ntlnete rareori n natur i trebuiau
cheltuite sume mari pentru a putea crea vopsea de aceast culoare.
Maro:

Semnificaie: solid, de ncredere i terestru.

7. Publicarea i promovarea unui site

Orice webmaster vrea, fie c o recunoate deschis sau nu, ca site-ul su s fie
vizitat de ct mai muli utilizatori i dac se poate, ct mai des. Aceast dorin (care
ine de considerente financiare sau de ego) nu este ns realizabil dect dac
webmasterul i toi ceilali implicai n administrarea site-ului depun un efort constant
pentru a menine coninutul i aspectul site-ului ct mai aproape de cerinele
utilizatorilor. Succesul unui site, ca de altfel al oricrui produs, se datoreaz n mare
msur i modului n care este promovat, cu alte cuvinte marketingul este aproape la fel
de important ca i calitatea unui produs.
n aceast lume a internetului nc foarte tnr, experii n crearea de site-uri
Web sau redactorii de articole interesante nu sunt de obicei i experi n marketing.
Tocmai din aceast cauz promovarea eficient a unui site web este fcut de cele mai
multe ori de ctre profesioniti. Acetia i ofer serviciile contra cost i la ei apeleaz
companiile care vor s-i construiasc o prezen important pe Web. Sumele
investite n marketingul profesional sunt impresionante i n permanent cretere.
O caracteristic a Internetului este ca acesta, n calitatea sa de spaiu virtual permite
oricrui utilizator s-i construiasc un site Web, existnd, spre deosebire de spaiul
real, destul loc pentru toat lumea. Mai mult, utilizatorul respectiv nu trebuie s aib
cunotine avansate de limbaj HTML sau s plteasc vreun ban pentru locul de pe
Internet unde vrea s-i construiasc site-ul (se exclud bineneles cheltuielile legate
de conectare). Exist n momentul de fa poate zeci de milioane de site-uri Web n
toat lumea, cele mai multe dintre ele aparinnd unor utilizatori obinuii i nu unor
companii sau instituii.
Site-urile mici sunt ns poteniale surse de ctig material pentru proprietari,
pentru c exist companii interesate s cumpere spaiu publicitar chiar i pe site-urile
mici, cu condiia ca acestea s fie vizitate des. Un site bine fcut i care i-a
dobndit deja o "clientel" de utilizatori constant, poate fi la un moment dat
cumprat pentru o sum important de ctre o companie mult mai mare, existnd
n plus posibilitatea ca administratorii site-ului s-i pstreze locurile de munc pentru
a continua s menin i s mbunteasc site-ul.
innd cont de faptul ca utilizatorii romni care sunt n acelai timp i webmasteri
vor s le fie vizitate siteurile, ei trebuie s nvee s-i fac singuri activitatea de
marketing, pentru c nu au mijloacele financiare necesare pentru apelarea la
specialiti. Multe firme romneti care vor sa aib site-uri web de succes sunt n
aceeai situaie, din cauza dificultilor financiare neputnd fi luat n discuie
cumprarea de spaiu publicitar pe Internet sau angajarea unor specialiti n
marketing. Greul promovrii site-ului cade astfel pe umerii webmasterului,
transformat peste noapte i n responsabil cu marketingul.
n cele ce urmeaz vor fi prezentate metodele prin care orice utilizator poate s-i
promoveze site-ul fr a fi nevoit s apeleze la profesioniti.
Metodele cele mai eficiente de promovare a unui site sunt urmtoarele:
1) Optimizarea site-ului web pentru indexarea adecvat de ctre motoarele de cutare
2) nscrierea site-ului n cataloagele de adrese ale portalurilor internaionale i romneti
3) Promovarea site-ului pe forumurile on-line sau n grupurile de discuii
4) Participarea la clasamentele site-urilor care fac topuri
Primul pas este s alegem un domeniu pentru site-ul organizaiei. Numele unui
domeniu nu trebuie s conin spaii de aceea dac vom folosi un cuvnt compus
trebuie s folosim o liniua pentru a lega prile sale componente. Al doilea pas care
trebuie fcut este sa gzduim site-ul pe un server. Spre exemplu exist servere
care permit gzduire gratis cum ar fi : www.home.ro, www.3x.ro etc., iar la altele
trebuie pltit gzduirea: www.myx.ro , www.elite.ro/web-hosting/,
www.apis.ro/domeniu.html.
Dup ce am creat site-ul trebuie sa-l ncrcm pe serverul care l gzduiete.
Acest lucru se realizeaz foarte simplu dac suntem familiarizai cu programele de tip
client FTP. Tot cu ajutorul programelor de acest tip se realizeaz i actualizarea site-ului
(tergerea unor pagini, adugarea unora noi, nlocuirea unor pagini cu versiuni mai noi).
Aa cum am mai spus, putem s scriem singuri coninutul unui site i s-l punem n
pagin sau putem apela la serviciile unor specialiti. Este recomandat s ne compunem
singuri materialele pentru c astfel putem s le revizuim ulterior introducnd (fr a
afecta stilul expunerii) anumite informaii care nu erau disponibile la
momentul scrierii iniiale. Cu ct vom scrie mai mult cu att vom progresa n
domeniul expunerii clare a propriilor idei. Dac socotim c "nu ne pricepem la scris"
sau pur i simplu nu avem timp pentru a scrie i
revizui materialele de pe site putem s apelm la serviciile unor specialiti (de ex.
studeni la filologie sau
jurnalistic). Noi putem s le dictm acestora materialele iar ei se vor ngriji de partea
stilistic a textelor.
Pentru a cunoate ct de vizitat este site-ul pe care l-ai realizat i pentru a afla
mai multe date despre numrul i statistica vizitatorilor, informaii care v vor ajuta n
realizarea unei campanii de marketing online eficiente, este bine s folosii contoare
de pagin.
Site-ul trebuie promovat. Muli manageri consider c odat ce site-ul este
finalizat i postat pe
Internet, lucrurile sunt ncheiate. Din acest moment organizaia este prezent pe
Internet iar utilizatorii
interesai de serviciile i produsele organizaiei vor veni de la sine. Din pcate nu se
ntmpla deloc aa. Cel
mai probabil, potenialii dumneavoastr utilizatori / clieni nu cunosc i nu caut
organizaia dumneavoastr. Ei
sunt n cutarea serviciilor sau produselor pe care le oferii, att dumneavostr ct i
concurena. Dac atunci
cnd un utilizator caut produsele dumneavoastr, site-ul nu va fi printre primele
afiate, cel mai probabil acea
persoan va deveni clientul concurenilor dumneavoastr. Un site nepromovat este
la fel ca un magazin
strlucitor i plin de mrfuri plasat pe o strdu ntunecoas, pe unde nu trece
nimeni. Magazinul va da
faliment n cteva luni. Site-ul va rmne un obiect inutil care nu aduce organizaiei
dumneavostr nici un
beneficiu.
Un sistem de promovare a site-ului este i banner exchange-ul. Banner Exchange
nseamn publicitate reciproc n cadrul unei reele de site-uri: n schimbul reclamelor
(bannerelor) pe care le publicai pe site-ul dumneavoastr, site-urile partenere public
reclamele (bannerele) dumneavoastr.
O astfel de publicitate reciproc prin schimb de bannere se poate realiza ntre
oricare dou sau mai multe site-uri, cu condiia ca schimbul s fie echitabil.
Un sistem centralizat de publicitate reciproc (banner exchange / link
exchange) asigur: echitatea schimbului n reele cu un numar mare de participani,
numeroase dimensiuni i formate de banner, selecia i monitorizarea site-urilor
participante, statistici ale campaniilor publicitare derulate etc.
Site-ul trebuie actualizat. Ca i promovarea, ntreinerea i actualizarea site-
ului sunt nite operaii foarte adesea neglijate. Nu odat am vzut pe Internet site-
uri cu informaii vechi, cu date de contactneactualizate, cu oferte care nu mai sunt
valabile, cu rubrici de Noutai al cror coninut nu a mai fost schimbat de la lansarea
site-ului. Pentru un potenial client care viziteaz frecvent site-ul, o asemenea situaie
este un motiv puternic de a pune la ndoial seriozitatea organizaiei dumneavoastr.
Nu trebuie s uitai nici o clip c, pe Internet, site-ul organizaiei este nsi
organizaia. Iar un site neactualizat este la fel ca un magazin cu mrfuri prfuite i cu
termenul de garanie expirat. Dumneavoastr ai cumpra ceva dintr-un asemenea
magazin?
Site-ul trebuie sa funcioneze corect Dei buna funcionare a site-ului pare o
condiie de la sine neleas, destul de des pot fi gsite site-uri cu pagini care nu se
deschid, cu baze de date care dau erori, cu formulare care funcioneaz incorect. Un
site care d erori la funcionare i va ndeprta definitiv pe potenialii vizitatori care nu
vor mai reveni pe site i nici la organizaia dumneavostr. i, fr ndoial, justificat.
Nici dumneavoastr nu ai mai reveni ntr-un magazin n care liftul s-a blocat ntre
etaje sau casa de marcat s-a defectat tocmai cnd, dup o ateptare de jumtate de
or, ai ajuns s pltii.
Aa nct, la finalizarea proiectului, rezervai-v o or pentru a vizita site-ul n ntregime
i asigurai-v c totul funcioneaz fr gre.

8. Optimizare site

Optimizarea paginilor web este o strategie aplicat de toi specialitii n


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

8.1. Optimizarea coninutului paginii Web

Motoarele de cutare sunt programate s utilizeze n mod optim baza de date


obinut de roboii trtori care indexeaz paginile de pe internet. Scopul lor este s
prezinte foarte rapid utilizatorilor liste cu pagini web n care primele locuri s fie
ocupate de pagini cu un coninut informativ, util. Deci algoritmul de sortare a
paginilor trebuie s fie foarte bine conceput pentru c el are rolul de a sorta mii sau
zeci de mii de pagini ntrun timp foarte scurt i cu un rezultat care s fie pe placul
utilizatorilor.
Un robot trtor nu vede paginile web aa cum le vd oamenii, el acord o
importan covritoare textului unei pagini, fr a fi impresionat deloc de aspectul ei
grafic. Ca urmare bazele de date ale motoarelor de
cutare conin pagini indexate dup coninutul lor scris i nu dup cel grafic. Acest
coninut scris este cel care d 70% din relevana unei pagini web, restul de 30% fiind
dat de optimizarea ("cosmetizarea") paginii web.
Sarcina lingvitilor i a matematicienilor implicai n dezvoltarea motoarelor de
cutare a stat tocmai n crearea i optimizarea unui algoritm care s poat s
ordoneze un numr mare de pagini web n funcie de utilitatea coninutului lor scris. n
mod evident, unele din caracteristicile algoritmului nu sunt uor de sesizat de ctre
persoanele care nu au lucrat la el. Alte caracteristici pot fi ns deduse analiznd
paginile web care apar n mod constant pe primele locuri ale listelor generate de
motoarele de cutare.
Este uor de intuit faptul c algoritmul favorizeaz paginile web care au un coninut de
text important, pentru c se consider c aceste pagini conin mult informaie, iar
utilizatorii caut n mod special aceast caracteristic a paginilor web. Nu se tie
precis cum este evaluat de ctre algoritm coninutul de text al unei pagini dar este
foarte posibil s fie luat n calcul numrul de caractere (litere) din pagin aa cum
a fost calculat de robotul trtor care a indexat pagina. Asta nu nseamn c pentru
ca paginile noastre s aib succes suntem obligai s le umplem cu text pn la refuz,
fr s inem cont i de alte aspecte, cum este de exemplu calitatea expunerii
informaiilor din textul respectiv.
Paginile cu mult text sunt pe placul algoritmilor dar oamenii sunt mai rafinai, ei
prefer de cele mai multe ori o cantitate rezonabil de text i care n plus trebuie s fie
interesant, util, bine scris i formatat n aa fel nct s fie plcut de citit. Un alt aspect
care nu trebuie neglijat este actualizarea periodic a conintului site-ului i adugarea
de noi materiale.
Atunci cnd scriem textul dintr-o pagin trebuie s ne asigurm c folosim i
sinonime pentru cuvintelecheie i de asemenea c folosim i variante mai puin
folosite ale acestora. De exemplu ntr-o pagin web care trateaz un subiect despre
site-urile web (gzduire de ex.) trebuie folosit n principal cuvntul "site" dar trebuie
pus n parantez i varianta "sit". n acest fel dac un utilizator va cuta paginile care
conin sintagma "gzduire site web" avem toate ansele ca i pagina noastr care
trateaz acest subiect s fie luat n seam de motorul de cutare pentru includere pe
lista rezulatelor cutrii.

8.2. nregistrarea site-ului la motoarele de cutare

n general se consider c nu este nevoie s ne nregistrm site-ul la motoarele


de cutare pentru c acestea l vor indexa atunci cnd robotul trtor l va ntlni n
"plimbrile" sale periodice pe internet. Muli webmasteri prefer ns s fie siguri c
site-ul va fi indexat ct mai repede i atunci apeleaz la serviciul de propunere de
site-uri prezent la toate motoarele de cutare. Acest serviciu este fie gratuit fie cu
plat (Looksmart, Lycos). Dac site-ul nostru apare n listele generate de un robot de
cutare nu mai trebuie s l nregistrm, este evident c paginile sale au fost deja
indexate. Fiecare motor de cutare are o pagin special numit "Add URL" (adaug
adresa unui site) sau cu un titlu asemntor ("Submit a Site").
n pagina respectiv scriem ntr-o caset de text adresa site-ului (de
exemplu http://www.masinidespalat.home.ro) i n alt caset un mic comentariu
(descrierea site-ului sau nite cuvintecheie) i apsm butonul "Add URL". Nu este nevoie
s nregistrm dect adresa paginii gazd a site-ului. Robotul motorului de cutare va
indexa toate paginile site-ului pornind de la aceasta.
n final, am cutat cteva modaliti de urmrire a traficului pe site-ul web. Am
setat dou contoare de trafic. Unul romnesc (www.trafic.ro) i unul strin
(www.sitemeter.com). Ambele sunt gratuite i ofer o mulime de informaii utile
despre numrul de vizitatori i pagini web (page views) accesate, mprite pe ani, luni,
sptmni. n plus, mai sunt precizate tipul de browser folosit, IP-ul, prima i ultima
pagin accesat etc. Dup ce v nscriei la aceste site-uri web, vei primi un cod HTML
pe care trebuie s-l inserai (fr nici un fel de modificare) n pagina web, acolo unde
dorii ca el s apar. La Trafic trebuie s alegei categoria n care se ncadreaz site-ul
dvs. Apoi, vei putea urmri n fiecare sptmn evoluia site-ului dvs. (nr. de
vizitatori, creterea fa de sptmna ncheiat, poziia obinut n cadrul seciunii
respective etc.).

9. Protejarea coninutului unui site

Termenul de copyright este specific american, dar se folosete i n Europa sau


pe alte continente, cu aceeai semnificaie: drept de autor. n Romnia, dreptul de
autor este reglementat juridic prin Legea nr. 8 / 1996. n conformitate cu prevederile
acestei legi, opera de creaie intelectual este recunoscut i protejat, independent
de aducerea la cunotin public, prin simplul fapt al realizrii ei, chiar neterminat
(Art. 1, Alin.
2). Dreptul de autor este legat de persoana autorului i comport atribute de ordin
moral i patrimonial (Art. 1, Alin.1). Aadar, un site web reprezint o oper de creaie
intelectual i poate constitui obiect al dreptului de autor. Aceasta nseamn c
informaiile pe care le introducei ntr-o pagin personal v aparin i dreptul de
autor v revine n ntregime asupra textului respectiv. Dac ns lucrai ntr-o echip
sau suntei angajat al unei firme de webdesign atunci suntei co-autor i vei fi
protejat prin drepturi de autor asupra imaginilor pe care le-ai creat, machetrii paginii
sau programelor pe care le-ai realizat. Muli oameni consider, n mod
eronat, c se pot copia fr a cere acordul nimnui diverse materiale disponibile online
(texte, imagini, sunete, fiiere video etc.) Exist ntr-adevr site-uri de unde se pot
copia astfel de fiiere sau de unde se poate ncrca software gratuit. Pe aceste site-
uri vei gsi o not explicit care v permite utilizarea acestora. Dac nu gsii o not
n acest sens, este indicat s cerei prin e-mail acordul webmasterului site-ului web de
la care vrei s copiai materialele respective. n majoritatea cazurilor vi se va rspunde
afirmativ. De asemenea, este bine s includei o noti de copyright n subsolul fiecrei
pagini n care se vor preciza simbolul de copyright (), autorul i anul n care a fost
fcut public pagina respectiv. Dac considerai necesar, putei s trecei i alte
meniuni specifice.
Pe lng protejarea coninutului unui site, i aspectul acestuia, modul tehnic de
realizare, interaciunea ntre componentele acestuia pot fi obiectul proteciei. Sunt
numeroase situaiile n care un site poate fi protejat n sine, ca oper independent,
fr ca protejarea coninutului acestuia s fie impus sau s existe. n egal msur,
coninutul unui site poate constitui obiectul proteciei n timp ce elementele grafice i
funcionale ale acestuia s fie libere.

10. Feedback (interaciunea cu vizitatorii)

Pn acum, principala form de comunicare ntre comerciani i clienii lor era


publicitatea. Dar aceast comunicare nu oferea o oportunitate de interaciune ntre cele
dou pri sau feedback. Odat cu rspndirea Internetului se poate realiza foarte uor
o comunicare n ambele sensuri. mbuntirea metodelor prin care
utilizatorii interacioneaz cu paginile unui site web este esenial pentru crearea
unui site bun. Folosirea feedback-ului este foarte important pentru creterea
numrului de vizitatori i ofer posibilitatea ca acetia s-i exprime opiniile, sugestiile
i comentariile n legtur cu un site web. E-mailul este cea mai important i
mai uoar cale de a recepiona mesaje de la cititori. V recomand s nu scriei nici o
adres de e-mail n clar, ci s o inserai ca imagine, pentru a evita spamul. O alt
variant este prezentat n imagine:
De aceea, este obligatorie furnizarea adresei e-mail pe fiecare pagin. Pe de alt
parte, un webmaster trebuie s fie capabil s rspund n timp scurt pentru a menine
o relaie de ncredere reciproc. Exist pe Internet mii de site-uri web care v ofer
posibilitatea s v creai gratuit unul sau mai multe conturi de e-mail. Cteva dintre cele
mai cunoscute sunt urmtoarele:
- http://www.hotmail.com
- http://www.yahoo.com
- http://www.geocities.com
- http://www.freeservers.com
- http://www.netadress.com
- http://www.home.roCri de oaspei (guestbooks)
Completarea formularelor este o practic des ntlnit pe Internet. Acestea
permit colectarea de feedback-uri de la cititori ntr-un mod organizat. Un formular
web se poate realiza uor folosind direct codul HTML sau cu ajutorul unui editor
HTML. Un exemplu de formular des ntlnit l reprezint aa numitele crti de oaspei
unde cititorul poate s-i scrie impresiile i comentariile dup vizitarea unui site. O
carte de oaspei gratuit se poate obine vizitnd site-urile web urmtoare:
- http://www.theguestbook.com
- http://www.dreambook.com
- http://www.guestbooks.net
- http://www.countz.com/guestbook.html
- http://www.freecenter.com/guestbook.html
- http://www.lpage.com
- http://www.bravenet.com
- http://www.guestbook4free.com/en/

Camere de chat
Pentru a aduce ct mai muli vizitatori la site-ul pe care l-ai creat, putei s setai
un serviciu propriu de chat. Unele site-uri ofer gratuit aceast facilitate, ca de exemplu:
Action Chat ( http://www.ten-percent.com/ )
Ram-Page Chat ( http://www.ram-page.com/ )

Liste de discuii
Pentru a crete gradul de interactivitate cu vizitatorii putei s setai n pagin o
list de discuii. Exist multe site-uri, ca de exemplu Topica sau Yahoogroups care
ofer gratuit aceast facilitate. Mai multe informaii despre acest subiect gsii n
capitolul Promovarea site-ului web.

11. Greeli Frecvente

1. Prea multe imagini

Unii web designeri fac exces de zel n mpodobirea paginilor cu grafic i animaii, din
convingerea ca astfel vor fi mai atrgtoare. Este o eroare frecvent mai ales pentru
cei care intr n contact cu web designul prin graphic design. Imagini multe, mari,
neoptimizate nseamn vitez de ncrcare a paginii drastic sczut. Mai mult, nici un
motor de cutare nu indexeaz nc imagini, deci un home page constituit din imagini
nucitor de atrgtoare, i nici o linie de text (html, nu desenat pe bitmap) va
genera un numr constant de listri pe cuvinte cheie n Google: zero. n consecin, la
ce folosete o pagin foarte frumos desenat, dac doar civa ajung s o vad (cei
care nu s-au plictisit ateptnd s se descarce i cei cu conexiuni de nalta vitez), sau
cei care cunosc adresa din alte surse.

2. Imagini neoptimizate pentru web

Din nou, greeala frecvent la cei care au un background n design grafic. Pe


web, mrimea conteaz. Programe de editare de imagine ca Adobe Photoshop
ofer opiuni de optimizare pentru web, dar exist i unelte mai simple i mai putin
costisitoare pentru optimizarea de imagini.

3. Exces agasant de animaii

Muli designeri cred c o pagin pe care se mic ceva n permanen este mult
mai atractiv. Numai c principiul de eye catching se refer la un SINGUR element
care focalizeaz atenia. i deja am descoperit greeala. n loc s atrag atenia,
elementele animate dintr-o pagin distrag atenia cititorului, funcionnd ca nite viziuni
periferice. Acelai rezultat l au i efectele de tip Blink: ajung s agaseze vizitatorul,
alungndu-l de pe site, la fel de nedumerit cum a a venit. Aadar, atenie la dozarea
animaiilor!

4. Cod redundant i dezordonat

Oricine poate vedea coninutul-cod al unei pagini web selectnd opiunea View
source. Deocamdat, nu exist un procedeu de ascundere a sursei unei pagini web.
Nu ncurajm scripturile java de blocare a afirii coninutului, acesta fiind un motiv de
penalizare n motoarele de cutare, i o metod sigur de agasare a vizitatorului
(care e obinuit s foloseasc butonul dreapta al mouse-ului) ns dac avei stiluri
proprii n pagin, de pild, este de preferat s le introducei ntr-un document
separat (.css), ctre care s se lege fiecare pagin din site. Motivul principal este
optimizarea codului: nu mai e nevoie s introducei stilul n
fiecare pagin, reducnd astfel considerabil codul. Pe de alt parte, la fel de
important este de reinut c executnd modificri repetate n pagin cu ajutorul unui
editor vizual de html, avei toate ansele s obineti un
cod nclcit, redundant, cu taguri inutile rmase din poriuni terse etc - de aceea
este recomandabil s executai codul de mn pe ct posibil. Suficient de
ameit, codul va genera rapid i funcionarea
defectuoas a site-ului.

5. Testare

Evident, cnd creai o pagin web o verificai n browserul vostru s vedei cum arat.
Dar nu e suficient, nici pe departe. O pagin care arat super n Internet Explorer
6.x, la rezoluia voastr de 1024x768 se poate transforma ntr-un dezastru vizual la o
rezoluie diferit, cu un font size diferit, n Netscape, Opera sau Mozilla.
inei cont i de utilizatorii care au browserul setat s nu afieze imagini, de cei care
folosesc alt sistem de operare dect Windows. Creai-v tabelele, imaginile, textele
(daca nu folosii CSS) astfel nct s fiecompatibile cu vizualizarea n majoritatea
situaiilor (ideal n toate).

6. Feeback

Formularele sunt o parte interactiv a unui site. ntr-o pagin cu formular, te apropii de
vizitator mai mult dect n celelalte. E stabilirea unei relaii, i nceputul unui schimb. E
poate partea cea mai personal a unui site, acolo unde userul ii d informaii
despre el, ii mprtete opiniile sale, tu i oferi un serviciu sau o
oportunitate etc. De aceea modul n care execui formularele este foarte important
pentru succesul site-ului tu. O relaie se bazeaz pe respect i ncredere: d-i
vizitatorului ceea ce i-ai promis; afieaz-i o pagin de confirmare / mulumire dup
completarea formularului; afieaz-i o pagin de eroare n cazul n care a completat
greit cmpurile sau a omis un cmp obligatoriu. Feedback, feedback, feedback. i
bineneles, verific-i scripturile, ca s te asiguri c formularul funcioneaz.

7. Prea mult text

Avem obinuine rmase de la pagina de hrtie, i de multe ori se vede pe web. O


pagin de web nu e citit n autobuz sau n tren (s numrm cate laptopuri cu
conexiune wireless se plimb acum cu rapidul Bucureti-
Constana?). Pentru cri, exist varianta e-Book. Nu facei exces de text, pentru c
nu va fi citit. Spargei textul n paragrafe, cu titluri relevante. n plus, sub 15% din
utilizatori fac scroll pe o pagin web, aa nct ncercai s pstrai informaia
esenial n partea de sus a paginii. Internetul e un mediu dinamic, utilizatorii
obinuiesc s acceseze mai multe pagini n acelai timp, i evident sunt mai uor
distrai de la coninutul fiecreia dintre ele. Evident, un text dozat pentru astfel de
condiii de citire nu nseamn nicidecum un text laconic, din care vizitatorul s nu
poat extrage nici o informaie util. Dimpotriv, oferii-i un coctail de esene,
astfel nct s obin ct mai multe informaii ntr-un mod ct mai clar organizat, n ct
mai puin spaiu.
8. Prea puin text

Totui, nu fii laconici. Cine ajunge pe pagin, dorete s se infomeze. Oferii


suficiente date, suficient coninut, pentru vizitatori i pentru motoarele de cutare.
Oricum, de obicei site-urile web pctuiesc prin prea mul text, nu prea puin.

9. Text de tip sp@m / reclama

Nu scriei: Cel mai tare site de pe web, Cea mai bun firm de consultan sau
"Cea mai mare colecie de mp3-uri". Lasai-l pe vizitator s decid, artai-i respect. n
plus, formulri prea comerciale au toate ansele s piard vizitatorul. i el e stul de
reclam, ca oricare dintre noi. Dac a venit n cutarea unei informaii, oferiii
informaia, nu laude de sine. Suntei ndeajuns bun n ceea ce facei ca s-l convingei
cu fapte, nu cu vorbe goale i locuri comune care trec pe lng ureche fr a fi
procesate. Sublinierile (underline) se folosesc doar pe linkuri, lsai-le acolo. Nu folosii
cuvinte scrise cu majuscule, aceasta este o marc a sp@mului, de care Internauii s-
au sturat pn dincolo. Nu vrei s fii asociai cu un fenomen negativ.

10. Site map

Cu ct e mai mare un site, cu att mai necesar devine un ghid de navigare. Utilizatorii
sunt grbii, deci trebuie s le artai exact unde gsesc ceea ce caut. De asemena,
i agenii de cutare gsesc foarte prietenoas harta site-ului, din aceleai motive.

11. Mentenan
Un site trebuie ntreinut. Nu lsai informaii vechi, expirate. Aducei mereu coninut
nou pentru vizitatori, dar i pentru motoarele de cutare - dac vrei s avei un ranking
bun. n fond, natura Internetului este dat de nsui dinamismul su. inei pasul.

2. LIMBAJUL HTML

1. Structura paginii
Cu ajutorul limbajului HTML (Hyper Text Markup Language) poti construi pagini web nu
foarte pretentioase insa reprezinta un inceput pentru realizarea site-urilor profesionale.
. Editarea acestora se poate face in orice program de editare texte, pornind chiar cu banalul
Notepad din Windows. Toate notiunile prezentate in acest ghid pot fi puse in practica
utilizand Notepad, astfel incat poti deschide Notepad acum.
Desi exista mai multe programe care au grija de codul HTML atunci cand faci o pagina web,
pentru a usura folosirea lor este nevoie de cel putin cateva notiuni elementare de HTML.
Aceste programe se numesc editoare HTML si pot fi de doua tipuri: editoare clasice si
editoare de tipul WYSIWYG (What You See Is What You Get, care se traduce prin ceea ce
vezi este ceea ce obtii). In cazul celei de-a doua categorii de editoare HTML, utilizatorii nu
trebuie decat sa se ocupe de partea grafica, de asezarea in pagina etc., scrierea codului
HTML ramanand in seama acestor programe. O observatie demna de luat in seama este si
aceea ca cele mai bune editoare HTML nu sunt gratuite.
In concluzie, invatarea limbajului HTML are trei mari avantaje:
este foarte simpla si nu necesita mult timp
ofera controlul absolut asupra realizarii paginii web
poti folosi in cadrul paginilor pe care le vei realiza secvente de cod HTML "imprumutate" de
la alte pagini web (pentru a vedea codul sursa al unei pagini web, in Internet Explorer intra in
meniul View si apoi selecteaza Source)
Pentru a intra in posesia editoarelor HTML sau a variantelor demo ale editoarelor
profesionale, le poti descarca de pe internet, dar daca nu ai o conexiune buna la internet, le
poti gasi si pe CD-urile revistelor de IT.
Fisierul pe care il vom edita se va numi index.html. In general fisierul principal al unui site
internet (cel care se incarca atunci cand tastam o adresa de genul www.abc.abc) este numit
index.html.
Instructiunile pe care le folosim intr-o pagina HTML se numesc tag-uri si acestea indica
browser-ului (Netscape, Internet Explorer, etc) modul de prezentare a informatiei din pagina.
Tag-urile se scriu intre semnele < si >. Tag-urile nu trebuie scrise respectand reguli foarte
stricte (nu e nevoie sa scrii numai cate un tag pe rand sau sa foloseti numai litere mari,
etc).Un exemplu de utilizare a tag-ului FONT este:

<FONT FACE=ARIAL COLOR=#FF0000>ABC SRL - lider pe piata serviciilor</FONT>

Instructiunea de mai sus va determina afisarea textului "ABC SRL - Lider pe piata serviciilor"
cu font arial si culoarea rosie. Dupa cum se poate observa, exista un tag inaintea textului si
unul care incheie textul respectiv. Majoritatea tag-urilor functioneaza in acest mod: se
pun inaintea informatiei pe care dorim sa o prezentam intr-un anume mod iar apoi la
sfarsitul acesteia, ca in exemplul de mai sus.
Continutul oricarui fisier HTML trebuie inclus intre tag-urile <HTML> si </HTML>. Aceasta
inseamna ca 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
ct i proprietatea de stil list-style-type, marcajul de item va fi decis de proprietatea de stil.
Atributele i
proprietatile de stil pot fi aplicate intregii liste sau doar unor itemi ai listei, n functie de doleantele
realizatorului
documentului

10.9 Proprietati de stil pentru bordurile obiectelor

Desi par numeroase, proprietatile de stil care vizeaza bordurile obiectelor se pot retine usor
deoarece ele stabilesc doar trei atribute care se aplica fie tuturor bordurilor, fie uneia dintre cele 4
borduri posibile. Iata aceste proprietati:

BORDER-COLOR - determina culoarea bordurilor obiectului. Numarul de valori i semnificatia lor


sunt
sunt analoage celor prezentate la atributul "margin"
BORDER-STYLE - determina stilul liniei de bordura. Acelasi stil se va aplica celor 4 borduri
ale
obiectului. Optiunile posibile sunt:
NONE - nu se afieaza bordura
DOTTED - bordura se afiseaza cu linie punctata pe platforme Machintosh i cu linie
continua pe
platforma Windows sau Unix
DASHED - bordura se afiseaza cu linie intrerupta pe Machintosh i cu linie continua pe
platforma
Windows sau Unix
SOLID - bordura se afiseaza cu linie continua
DOUBLE - bordura se afiseaza cu linie dubla

Pentru a oferi un aspect tridimensional bordurilor folositi valorile:

GROOVE
RIDGE
INSET
OUTSET
BORDER-WIDTH stabileste grosimea liniei de bordura. Numarul i semnificatia valorilor este
analoaga
celor prezentate la atributul "margin".
BORDER - stabileste caracteristicile bordurii printr-un numar de 3 valori separate prin spatiu,
valori
specificand, n ordine, dimensiunea, stilul i culoarea bordurii.

Exemplu:

<H1 style="border:5 solid Blue">

Aceleasi proprietati se pot specifica fiecarei borduri n parte folosindu-va de :

BORDER-TOP
BORDER-RIGHT
BORDER-BOTTOM
BORDER-LEFT

10.10 Proprietati de stil pentru pozitionare

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

POSITION - determina modul de pozitionare al elementului. Optiunile posibile sunt:


ABSOLUTE - elementul este pozitionat relativ la obiectul container care il contine
RELATIVE - elementul este pozitionat relativ la pozitia pe care ar trebui n mod normal sa o
ocupe n
document

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

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

PADDING-TOP
PADDING-RIGHT
PADDING-BOTTOM
PADDING-LEFT

EXEMPLU:
<html>
<head>
<title>Proprietati de stil pentru pozitionarea
elementelor</title> </head>
<body style="background-image:
url(../Imagini/fond.jpg);"> <div style =
"position:absolute">
<img src="../Imagini/toamna.jpg" width="100" height="100" border="0" alt="">
<div style="position: absolute; left: 10; top: 10; width:200;font-size: large;
color:blue;">Acest pasaj de text se suprapune imaginii
</div>
<div style="position: absolute; left: 300px; top:100; width=400; height=100;
background-color: #CC99FF;color:red; font-size: x-large; text-align:center">
Pozitionarea straturilor...
</div>
<div border="0" cellspacing="2" cellpadding="2" style="position: absolute;
left:250; top:150; width=400; height=80; background-color: blue; color:red; 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:

39
In Photoshop, poti crea o imagine cu fond transparent selectand Transparent in campul
Contents din fereastra New File (File/New).

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

3.LIMBAJUL PHP

Inceputurile PHP
PHP (PHP: Hypertext Prepocessor), cunoscut n versiunile mai vechi i sub numele de PHP/FI
(Personal Homepage/Form Interpreter), iniial a fost gndit a fi o simpl aplicaie CGI pentru
interpretarea formularelor definte prin HTML i procesate de un program scris ntr-un limbaj Perl, script
shell, executat pe server. n cazul interfeei CGI era necesar permisiunea de a rula programe pe server,
ceea ce ducea la lacune n securitate i n plus la disocierea de documentul HTML a programului care
procesa datele.
PHP (n versiunea curent PHP 4.0) reprezint un pachet puternic care ofer un limbaj de programare
accesibil din cadrul fiierelor HTML, limbaj asemntor cu Perl sau C, plus suport pentru manipularea
bazelor de date ntr-un dialect SQL (dBase, Informix, MySQL, mSQL, Oracle, PostgreSQL, Solid,
Sybase, ODBC etc.) i acces la sisteme hipermedia precum Hyperwave. De asemeni, PHP suport
incrcarea fiierelor de pe calculatorul client: upload (standard propus de E. Nebel i L. Masinter de la
Xerox, descris n RFC 1867) i ofer suport pentru cookies (mecanism de stocare a datelor n navigatorul
client pentru identificarea utilizatorilor, propus de Netscape).
Aceast aplicaie este disponibil gratuit pe Internet, pentru medii Unix i mai nou pentru medii Windows
(inclusiv sursele), integrndu-se n popularul sever Apache.
Istoria PHP-ului ncepe la sfritul anului 1994, cnd Rasmus Lerdorf dezvolt prima versiune, ca proiect
personal. PHP-ul este fcut public n debutul anului 1995 sub denumirea de Personal Home Page Tools,
fiind considerat un analizor simplist care interpreta cteva macrouri ce puteau fi incluse n cadrul
documentelor HTML, permind contorizarea accesului la paginile Web sau accesarea unei cari de
oaspei (guestbook). Analizorul a fost rescris la mijlocul aceluiai an i denumit PHP/FI 2.0, unde FI era o
40
alta aplicaie scris de Rasmus Lenford, un interpreter de formulare HTML. A fost adugat i suportul
pentru bazele de date mSQL i astfel PHP/FI a nceput s aib succes, fiind disponibil gratuit pe Web. Se
estimeaz c la sfritul lui 1996 cel puin 15 mii de site-uri Web utilizau PHP/FI, iar n anul 1997
numrul acestora era de 50 de mii.
Programatorii Zeev Suraski i Andi Gutmans rescriu analizorul PHP i noua aplicaie formeaz nucleul
versiunii PHP 3.0 care include o parte din vechile surse PHP/FI 2.0. Relativ recent, la nceputul anului
2000, a fost facut public versiunea PHP 4.0, utiliznd puternicul motor de scriptare Zend i oferind
suport nu numai pentru servrul Apache ci i pentru alte servere Web. De asemeni, PHP 4.0 ofer
posibilitatea accesrii documentelor XML via DOM.
Se estimeaz c numrul site-urilor care folosesc n prezent PHP este de peste un milion. Deja, pe Web,
exista o multitudine de aplicaii i utilitare concepute n PHP, care se regsesc grupate i n aa-numitul
PEAR (PHP Extension and Add-on Repository).
Ce este PHP?
PHP este un limbaj de script care funcioneaz alturi de un server Web.
Exemplul 1.1.1 (exemplu introductiv):
<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "Salut, eu sunt un script PHP!";
?>
</body>
</html>
Este de notat diferena cu alte limbaje script CGI scrise n limbaje precum Perl sau C: n loc de a scrie un
program cu o multitudine de linii de comanda afiate n final ntr-o pagin HTML, vei scrie o pagin
HTML cu codul inclus pentru a realiza o aciune precis (n cazul nostru se va afia un text).
Codul PHP este inclus ntre tag-urile speciale de nceput i de sfrit care permit utilizatorului s treac
din "modul HTML" n "modul PHP".
Fa de alte limbaje script, precum Javascript, la PHP codul se execut pe server. Dac pe serverul Web se
afl un script similar, clientul nu va primi dect rezultatul execuiei scriptului, fr a avea nici o
posibilitate de acces la codul care a produs rezultatul. V putei configura serverul de Web s prelucreze
(analizeze) toate fiierele HTML ca fiiere PHP. Astfel nu exist nici un mijloc de a distinge paginile care
sunt produse dinamic de paginile statice.

Ce poate face PHP?


Limbajul PHP posed aceleai funcii ca alte limbaje permind s se scrie scripturi CGI, s colecteze date
i s genereze dinamic pagini web sau s trimit i s primeasc cookies.
Marea calitate i cel mai mare avantaj al limbajului PHP este suportul cu un numr mare de baze de date.
A realiza o pagin web dinamic cu o baza de date este extrem de simplu. Urmtoarele baze de date sunt
suportate de ctre PHP:

Adabas D InterBase PostgreSQL


dBase FrontBase Sesam
Empress mSQL Solid
FilePro Direct MS-SQL Sybase
Hyperwave MySQL Velocis
IBM DB2 ODBC Unix dbm
41
Informix Oracle
Ingres Ovrimos

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

.2.2 Instalarea pe sistemele Windows 95/98/NT


Acest gid de instalare v va ajuta s instalai i s configurai PHP pe serverele web ce ruleaz pe
sistemele Windows 9x/NT.
Acest gid afer suport pentru:
Personal Web Server
Internet Information Server 3 sau 4
Apache 1.3.x
Omni HTTPd 2.0b1

Principalele etape n instalare


Urmtoarele etape trebuie parcurse la orice instalare, nainte de instruciunile specifice serverului:
Dezarhivai fiierele din distribuie ntr-un director pe care l dorii, de exemplu "c:\php";
Copiai fiierul "php.ini-dist" m directorul "%windows%" i redenumi7i-l la "php.ini". Directorul
"%windows%" este de obicei:
- c:\windows pentru Windows 95/98
- c:\winnt sau c:\winnt40 pentru serverele NT
Editai fiierul "php.ini":
o Modificai setarea 'extension_dir' pentru a indica directorul n care a fost instalat PHP, sau
directorul unde se afl fiierele "php_*.dll", de exemplu "c:\php";
o Dac folosii Omni Httpd, srii peste pasul urmtor. Setai 'doc_root' astfel nct s indice
documentul root ('document_root') al serverului web, de exemplu c:\apache\htdocs sau
c:\webroot;
o Alegei modulele care vrei s fie nccate atunci cnd porne PHP-ul. Putei decomenta
liniile 'extension=php_*.dll' pentru a ncrca aceste module. Unele module necesit ca
unele librrii suplimentare s fie instalate pe sistemul dumneavoastr pentru a funciona
corespunztor. PHP FAQ conine mai multe informaii despre locul de unde putei obine
librriile necesare. Deasemenea, putei ncrca dinamic module n scriptul dumneavoastr
folosind dl("php_*.dll");
o Pe PWS i IIS, putei seta browscap.ini s indice 'c:\windows\system\inetsrv\browscap.ini'
(n Windows 95/98) i 'c:\winnt\system32\inetsrv\browscap.ini' (pe serverele NT).
42
Fiierele DLL pentru extensiile PHP sunt prefixate cu 'php_'. Aceasta previne confuzia ntre extensiile
PHP i librriile necesare.

Windows 95/98/NT i PWS/IIS 3


Modul de configurare recomandat pentru aceste servere este utilizarea fiierului INF inclus n distribuie
(php_iis_reg.inf). Putei edita acest fiier pentru a v asigura c extensiile i directorul de instalare al PHP
corespund configuraiei dumneavoastr. Putei urma etapele de mai jos pentru a face acest lucru.
Observaie: aceste etape implic lucrul direct cu regitrii Windows. O eroare provocat aici poate aduce
sistemul ntr-o stare instabil. V recomandm s facei mai nti o copie a regitrilor. Dezvoltatorii de
PHP nu vor fi responsabili dac vei distruge regitrii.
Rulai regedit;
Mergei la HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc
/Parameters /ScriptMap;
Din meniul Edit selectai New->String Value;
Introducei extensia pe care dorii s o folosii pentru scripturile php, de exemplu .php;
Dai dublu-click pe aceast valoare i introducei calea spre php.exe n cmpul "Value data" (de
exemplu c:\php\php.exe %s %s). '%s %s' este foarte important, PHP nu va funciona corect far el;
Repetai aceti pai pentru fiecare extensie pe care dorii s o asociai cu scripturile PHP;
n continuare mergei la HKEY_CLASSES_ROOT;
Din meniul Edit selectai New->Key;
Denumii cheia cu numele extensie pe care l-ai introdus n secinuea precedent, de exemplu .php;
Selectai noua cheie n panelul din partea dreapt, dai dublu-click pe "Default value" i
introducei phpfile;
Repetai ultimul pas pentru fiecare extensie introdus n seciunea precedent;
n continuare creai o nou cheie n HKEY_CLASSES_ROOT i numii-o phpfile;
Selectai noua cheie (phpfile) n panelul din partea dreapt, dai dublu-click pe "Default value" i
introducei PHP Script;
Dai click dreapta pe cheia phpfile i selectai New->Key, pe care o vei numi Shell;
Dai click dreapta pe cheia Shell, selectai New->Key i denumii-o open;
Dai click dreapta pe cheia open, selectai New->Key i denumii-o command;
Selectai noua cheie (command) n panelul din partea dreapt, dai dublu-click pe "Default value"
i introducei calea spre php.exe, de exemplu c:\php\php.exe -q %1;
nchidei regedit

Windows NT i IIS 4
Pentru a instala PHP pe un server NT care ruleaz IIS 4 urmai urmtoarele instruciuni:
n Internet Service Manager (MMC), selectai site-ul Web sau directorul unei aplicai;
Deschidei foaia de proprieti a directorului i selectai Home Directory, Virtual Directory sau
Directory;
Dai click pe butonul Configuration, i apoi pe App Mappings;
43
Dai click pe Add, i introducei n csua Executable c:\path-to-php-dir\php.exe %s %s;
n csua Executable introducei extensia pe care dorii s o asociai cu scripturile PHP. (Repetai
paii 5 i 6 pentru fiecare extensie pe care dorii s o asociai cu scripturile PHP. De obicei se
folosesc extensiile .php i .phtml.);
Setati modul de securitate corespunztor. Acest lucru este realizat n Internet Service Manager, iar
dac serverul dumneavoastr NT folosete sistemul de fiiere NTFS adugai drepturi de execui
pentru I_USR_ directorului care conine php.exe.

Windows 9x/NT i Apache 1.3.x


Pentru a configura Apache astefel nct s lucreze cu interpretorul PHP CGI trebuie s editai fiierele
srm.conf sau httpd.conf.
Dei pot exista unele variaii n configurarea PHP sub Apache, metoda urmtoare este destul de simpl
pentru a putea fi folosit de nceptori. Pentru urmtoarele directive de configurare v recomandm s
consultai documentaia serverului Apache.
ScriptAlias /php/ "c:/path-to-php-dir/"
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
Action application/x-httpd-php "/php/php.exe"
Pentru a folosi the source code highlighting feature, creai un script PHP i adugaii urmtorul cod: <?
php show_source ("original_php_script.php"); ?;>. nlocuii original_php_script.php cu numele
fiierului a crui surs vrei s fie afit (acesta este doar una din metodele de a face acest lucru).
Not: n Apache pentru Windows toate back-slash-urile din numele unei ci ca "c:\directory\file.ext",
tebuie transformate n slash-uri.

Omni HTTPd 2.0b1 pentru Windows


Acesta ar trebui s fie cel mai simplu mod de configurare:
Pasul 1: Instalai serverul Omni
Pasul 2: Dai click dreapta pe icoana OmniHTTPd din system tray i selectai Properties
Pasul 3: Dai click pe Web Server Global Settings
Pasul 4: La 'External', introducei: virtual = .php | actual = c:\path-to-php-dir\php.exe
Pasul 5: La 'Mime', introducei: virtual = wwwserver/stdcgi | actual = .php
Pasul 6: Dai Ok.
Repetai pai 2-6 pentru fiecare extensie pe care vrei s o asociai cu PHP.

Modulele PHP
php_calendar.dll Funcii de convesie a calendarului
php_crypt.dll Funci de cryptare
php_dbase.dll Funcii DBase
php_dbm.dll Emulare GDBM via librria Berkely DB2
php_filepro.dll Acces doar pentru citire a bazelor de date filepro
php_gd.dll Funcii din librria GD pentru lucrul cu gif-uri

44
php_hyperwave.dll Funcii HyperWave
php_imap4r2.dll Funcii IMAP 4
php_ldap.dll Funcii LDAP
php_msql1.dll Client mSQL 1
php_msql2.dll Client mSQL 2
php_mssql.dll Client MSSQL (necesit librriile MSSQL DB)
php3_mysql.dll (construit n PHP 4) Funcii MySQL
php_nsmail.dll Funcii de mail pentru Netscape
php_oci73.dll Funcii Oracle
php_snmp.dll Funcii SNMP "get and walk"(doar pentru NT)
php_zlib.dll Funcii ZLib

I.1 Structura limbajului

Sintaxa fundamental. Trecerea de la HMTL la PHP


Exist patru moduri pentru a trece de la HMTL la PHP. Exemplul 2.1.1:
1. <? echo ( "Cea mai simpla cale de introducere...\n"); ?>

2. <?php echo ( "Daca vreti sa afisati documente XML sau XHTML faceti ca aici.\n"); ?
>

3. <script language="php">
echo ( "Anumite 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 uoara a PHP-ului cu generaia
urmatoare XHTML.

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

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

/* Acesta este un comentariu pe mai multe linii;


inca o linie de comentariu */
echo "Acesta este un alt test";

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


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

I.2 Tipuri de date

Numere ntregi
Numerele ntregi se pot specifica n modul urmtor (exemplul 2.2.1):
$a = 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 urmtoare
(exemplul 2.2.2):
$a = 1.234;
$a = 1.2e3;
Dimensiunea numerelor n virgul mobil este independent de platform. Precizia uzual este de 14
cifre.
Observaii:
de obicei fraciile zecimale simple, precum 0.1 sau 0.7, sunt convertite intern cu o mic pierdere
de precizie; aceasta poate s duc la rezultate mai puin exacte. De exemplu: floor( 0,1 + 0,7*10)
ntoarce de obicei 7 n loc de ateptatul 8, rezultatul reprezentrii interne fiind de genul
7,9999999999;
este imposibil s se exprime cu exactitate fraciile zecimale cu numr infinit de cifre; de exemplu,
1/3 n form zecimal devine 0,33333333...;
dac avei nevoie de o precizie mai mare n compararea valorilor n virgul mobil trebuie s
utilizai funciile matematice de precizie arbitrar.

iruri de caractere
irurile de caractere pot fi delimitate de ghilimele sau apostrofuri, n ultimul caz inhibndu-se evaluarea
variabilelor din interiorul irului respectiv (exact ca la bash).
Dac irul de caractere este delimitat de ghilimele atunci variabilele din interiorul irului vor fi evaluate i
nlocuite prin valoarea lor. Ca i n C sau Perl, caracterul backslash (\) este utilizat pentru a proteja un
carcater special.

Secvene escape 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

46
\[0-7] {1,3} Ordinea caracterelor corespunznd expresiei normale este un caracter n baza 8

\x[0-9A-Fa-f] {1,2} Ordinea caracterelor corespunznd expresiei normale este un caracter in baza 16

Orice caracter se poate transforma, teoretic, n secve escape, dar se produce un avertisment la cel mai
nalt nivel. A doua metod ncadreaz irurile ntre apostrofuri; n acest caz singurele secvene escape
nelese sunt '\\' i '\'. Variabilele nu vor fi expandate ntr-un ir ncadrat ntre apostrofuri. O alt metod de
a delimita irurile este folosirea sintaxei doc '<<<'. Dup acest delimitator trebuie specificat un
identificator, apoi irul de caractere propriu-zis i, n ncheiere, acelai identificator care a precedat irul.
Exemplul 2.2.3:
$str = <<< EOD // Identificatorul de inceput
Exemplu de serie
ingloband linii multiple
utilizand sintaxa heredoc.
EOD; // Identificatorul de sfarsit

/* Exemplu mai complex cu mai multe variabile */


class joc
{
var $joc;
var $bar;
function joc()
{
$this->joc = 'Joc';
$this->bar = array( 'Bar 1', 'Bar 2', 'Bar 3');
}
}

$joc = new joc();


$name = 'MyName';
echo <<< EOT
My name is "$name". I am printing some $joc->joc.
Now, I am printing some {$joc->bar[1]}. This should print a capital 'A': \x41
EOT;
irurile pot fi concatenate utiliznd operatorul '.', operatorul '+' fiind impropriu pentru aceast operaie.
Exemplul 2.2.4:
/* Asignarea unui sir */
$str = "Aceasta este o serie";

/* Concatenarea sirului cu un text nou */


$str = $str . " Cu mai mult text";

/* Un alt mijloc de adaugare, folosind o secventa escape newline */


$str .= " si o nous linie la sfarsit.\n";

/* Variabilele dintr-un sir inclus intre apostrofuri se pot evalua */


$num = 9;
$str = '<p>Numar: $num</p>';

/* Obtine primul caracter al sirului */


$str = 'Un test.';
$first = $str[0];

/* Obtine ultimul caracter al sirului */


$str = 'Un alt test.';
$last = $str[ strlen( $str) - 1];

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

47
irul va fi evaluat ca un double dac conine unul din caracterele '.', 'e' sau 'E'. Altfel va fi evaluat
ca un ntreg;
valoarea este dat de nceputul irului. Dac irul ncepe cu o dat numeric valid, aceasta va fi
valoarea utilizat. Altfel valoara va fi 0. O dat numeric valid este format din semn (opional),
una sau mai multe cifre (opional un puct zecimal), ncheiate eventual cu un exponent. Acest
exponent ('e' sau 'E') este urmat de una sau mai multe cifre. Cnd prima expresie este un ir tipul
varibilei va depinde de a doua expresie.
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 att tablouri scalare ct i asociative. De fapt nu exist nici o diferen ntre cele dou. n
PHP tabolurile se pot crea utiliznd funciile list() i array() sau se poate seta explicit fiecare element din
tablou.
Exemplul 2.2.6:
# Exemplul A:
$a[0] = "abc";
$a[1] = "def";
$b["aaa"] = 13;
Se poate de asemenea crea un tablou adugndu-i valori. De exemplu, putem extinde tabloul $a ca n
exemplul de mai jos (exemplul 2.2.6):
# Exemplul B:
$a[] = "hello";
// $a[2] == "hello"
$a[] = "world";
// $a[3] == "world"
Vectorii pot fi sortai utiliznd funcii specializate: asort(), arsort(), ksort(), rsort(), sort(), uasort(),
usort(), i uksort().
Putei numra elementele tabloului utiliznd funcia count().
Putei parcurge un tablou utiliznd funciile next(), prev() i each().

Tablouri multidimensionale
Tablourile multidimensionale sunt n realitate tablouri simple. Pentru fiecare dimensiune a tabloului
trebuie adugat o alt dimensiune [dim] la final.
$a[1] = $f; // 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 urmtor nu va furniza rezulatul ateptat:

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

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

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

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

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

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

Conversia automat a tipurilor


PHP nu accept definirea explicit a tipului n definirea variabilelor, tipul unei variabile fiind determinat
de contextul n care acea variabil este utilizat. Acesta nseamn c dac atribuii variabilei var un ir de
caractere, var va deveni ir. Dac i atribuii o valoare ntreg, var va deveni un ntreg.
Un exemplu de conversie automat a tipului apare la utilizarea operatorului '+'. Dac vre-un operand este
double, atunci toi operanzii sunt evaluai la double, i rezultatul va fi un double. Altfel, operanzii vor fi
interpretai ca ntregi i rezultatul va fi tot un ntreg. Reinei c acest mod de evaluare nu modific tipul
operanzilor care intervin n expresie, ci numai modul n care ei sunt evaluai.
Exemplul 2.2.10:
$bbb = "0"; // $bbb 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)
Observaie: 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"
Dei aparent variabila $a a fost transformat ntr-un tablou cu primul element f, exemplul urmtor nu
ofer un rezultat la fel de clar:
$a = "1"; // $a 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 acelai 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
Observai c eticheta i spaiile sunt permise ntre paranteze, deci liniile urmtoare sunt echivalente:
$a = (int) $bar;
$a = ( int ) $bar;
$a = (int)$bar;
Este posibil ca rezultatul conversiei explicite ntre dou tipuri s nu fie evident.
De exemplu convertind un scalar sau un ir de caractere la tipul array, respectiva variabil va deveni
primul element al tabloului ca n exemplul de mai jos:
$var = 'ciao';
$arr = (array) $var;
echo $arr[0]; // Afiseaza ciao

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

I.3 Variabile
Reprezentarea varibilelor
Variabilele n PHP sunt reprezentate de semnul dolar, '$', n faa numelui variabilei. Numele variabilelor
sunt formate dup aceleai reguli ca alte etichete din PHP. Un nume de variabil valid trebuie s nceap
printr-o liter sau liniu de subliniere, '_', urmat de un ir de litere, cifre sau liniue de subliniere.
PHP este un limbaj case-senzitiv (exemplul 2.3.1).
$var = "Jean";
$Var = "Paul";
echo "$var, $Var"; // Afiseaza Jean, Paul
$4site = 'nu inca'; // Incorect: incepe printr-o cifra
$_4site = 'nu inca'; // Corect: incepe printr-o liniuta de subliniere
$mas = 'jaune'; // Corect: '' este ASCII 239
n PHP 3, variabilele sunt asignate ntotdeauna prin valoare. Astfel, cnd atribuim unei variabile o
expresie, ntreaga valoare a expresiei este copiat n variabila destinaie. Aceasta nseamn, de exemplu,
c atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra
celeilalte.
PHP 4 afer i un alt mod pentru atribuirea de valori variabilelor: prin referin. Aceasta nseamn c
noua variabil nu face dect s refere variabila original (cu alte cuvinte, "devine un alias pentru" sau
"pointez la" variabila original). n acest caz, cele dou variabile sunt interdependente, modificarea uneia
determinnd modificarea celeilalte. Deoarece nu are loc copierea i actualizarea valorilor, asignarea prin
referin este mai rapid. Diferena devine notabil n cazul execuiilor repetate sau la asignarea
tablourilor mari, respectiv a abiectelor.
Pentru a atribui prin referin, se introduce un ampersand, '&', n faa variabilei care este atribuit
(variabila surs). n exemplul urmtor, Numele meu este Pierre se va afia de dou ori (exemplul 2.3.2):
$aaa = 'Pierre'; // 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;
Observaie: 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 numr de variabile predefinite pentru fiecare script pe care l ruleaz. Cele mai
multe variabile predefinite depind de serverul pe care se lucreaz, de versiunea i configurarea serverului
sau de ali factori. Unele dintre aceste variabile nu vor fi disponibile cnd PHP ruleaz ntr-o linie de
comand.

51
Domeniul variabilelor
Domeniul variabilelor este contextul n care variabila este definit. Pentru marea parte a variabilelor,
domeniul lor este unic. Acest domeniu se refer i la fiierele incluse ntr-un script.
Exemplu:
$a = 1;
include "b.inc";
Aici variabila $a va fi accesibil n fiierul inclus b.inc. Implicit, toate variabilele utilizate ntr-o funcie
sunt prin definiie locale.
Exemplul 2.3.4:
$a = 1; // Influenta globala
function test()
{
echo $a; // Influenta locala
}
test();
Scriptul nu afieaz nimic pe ecran deoarece instruciunea echo utilizeaz variabila local $a care nu a
fost asignat n acest domeniu. Este o diferen ntre modul de stabilire a domeniului variabilelor globale
n C i PHP: n absena unei referiri locale, variabilele globale din C sunt valabile n orice funcie a
programului. Acest lucru nu este valabil i n PHP.
Exemplul 2.3.5:
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
Acest script va produce rezultatul 3. Declarnd variabilele $a i $b globale n interiorul funciei Sum(),
orice referire la acestea n domeniul funciei se va face la declaraiile globale. Numrul variabilelor
globale care pot fi manipulate de ctre o funcie este nelimitat.
A doua modalitate de a accesa variabilele din domeniul global este prin utilizarea variabilei tablou din
PHP, numit $GLOBALS. Exemplul anterior poate fi rescris astfel:
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
Variabila $GLOBALS este un tablou asociativ care are drept indice numele variabilelor globale i
coninutul respectivelor variabile drept elemente.
Un alt aspect important legat de domeniul variabilelor se refer la variabilele statice.
O variabil static exist numai n domeniul unei funcii dar nu i pierde valoarea cnd execuia
programului prsete acest domeniu.
function Test()
{
$a = 0;
echo $a;
$a++;
}

52
Aceast funcie este inutil de vreme ce la fiecare apel variabila $a este setat la valoarea 0 care va fi
tiprit. Dei n funcie exist instruciunea $a++ care incrementez valoarea variabilei, la ncheierea
execuiei funciei aceast valoare se pierde, variabila $a avnd domeniu local. Pentru a pstra valoarea
incrementat a variabilei $a ntre dou execuii ale funciei, ea va fi declarat ca variabil static aa cum
reiese din exemplul urmtor:
function Test()
{
static $a = 0;
echo $a;
$a++;
}
n acest caz la fiecare apel al funciei Test() va fi tiprit valoarea lui $a, apoi se va incrementa.
Variabilele statice ofer de asemeni posibilitatea de a implementa i funciile recursive. O funcie este
recursiv dac se autoapeleaz. Proiectarea funciilor recursive trebuie fcut cu atenie pentru a evita
recursia infinit. Trebuie asigurat o modalitate adecvat de ncheiere a apelurilor recursive. Urmtoarea
funcie recursiv numr pn la 10 folosind variabila static $count pentru a sesiza ncheierea
autoapelurilor (exemplul 2.3.6):
function Test()
{
static $count = 0;
$count++;
echo $count;
if( $count < 10)
{
Test();
}
$count--;
}

Variabile variabile
Uneori este convenabil s lucrm cu nume de variabile ce pot fi tratate n mod dinamic. O variabil
variabil este un nume de variabil care poate fi iniializat i utilizat n mod dinamic. O variabil
normal este setat printr-o instruciune de forma:
$a = "hello";
O variabil variabil primete valoarea unei alte variabile i o trateaz ca i cum ar fi un nume de
variabil. n exemplul urmtor valoarea hello atribuit anterior poate fi tratat ca un nume de variabil
utiliznd de dou ori semnul dolar:
$$a = "world";
n acest moment dou variabile au fost definite i memorate n tabela de simboluri PHP: $a coninnd
"hello" i $hello coninnd irul "world". Astfel instruciunea:
echo "$a $($a)";
produce aceeai ieire ca i instruciunea:
echo "$a $hello";
adic irul hello world.
Pentru a utiliza variabilele variabile cu tablouri, trebuie rezolvat o problem de ambiguitate. Astfel, dac
scriem $$a[1], trebuie s precizm dac dorim s utilizm $a[1] ca variabil sau $$a i apoi s indexm
cu [1] aceast variabil. Pentru a rezolva aceast ambiguitate vom folosi sintaxa ${$a[1]} pentru primul
caz i ${$a}[1] pentru al doilea caz.

I.4 Constante
PHP definete o serie de constante i ofer un mecanism pentru definirea altora n timpul execuiei.
Constantele seamn mult cu variabilele; sunt definite cu jutorul funciei define() i valoarea lor nu poate
fi modificat ulterior. Constantele predefinite (disponibile ntotdeauna) sunt :
__FILE__
53
Se utilizeaz cu un fiier care a fost inclus sau solicitat, cnd numele fiierului inclus este dat;
__LINE__
Numrul liniei din scriptul curent care este analizat. Se utilizeaz mpreun cu un fiier care a fost
inclus sau solicitat, cnd poziia n fiierul inclus este dat;
PHP_VERSION
Un ir de caractere reprezentnd versiunea PHP utilizat;
PHP_OS
Numele sistemului de operare n care ruleaz PHP;
TRUE
O valoare adevrat;
FALSE
O valoare fals;
E_ERROR
Indic o eroare, alta dect o eroare de analizare, pentru care corectarea nu este posibil;
E_WARNING
Indic o situaie n care PHP tie c ceva este greit, dar continu oricum;
E_PARSE
Semnaleaz o sintax invalid n fiierul script; corectarea nu este posibil;
E_NOTICE
S-a ntmplat ceva care poate fi sau nu o eroare; execuia continu. Spre exemplu am accesat o
variabil care nu a fost iniializat sau am folosit un ir nencadrat ntre ghilimele ca index
asociativ.
Putei defini constante suplimentare utiliznd funcia define(). Reinei c aceste constante nu se comport
ca macro-urile C; numai datele scalare valide pot fi reprezentate printr-o constant.
Exemplul 2.4.1 (definirea constantelor):
define( "CONSTANT", "Hello world.");
echo CONSTANT; // Afiseaza Hello world.
Exemplul 2.4.2 (utilizarea constantelor predefinite __FILE__ i __LINE__):
function repor_error( $file, $line, $message)
{
echo "An error occured in $file on line $line: $message.";
}
report_error( __FILE__, __LINE__, "Something went wrong!");

.5 Expresii
Expresiile sunt cele mai importante construcii ale PHP; n PHP aproape orice scriei este o expresie. Cea
mai simpl i corect modalitate de a defini o expresie este orice are o valoare. Cele mai simple expresii
sunt constantele i variabilele.
Exemplu:
$a = 5;
n aceast construcie 5 este o expresie constant. De asemeni, funciile sunt expresii deoarece returneaz
valoare.
Exemplu:
function f()
{
return 5;
}
Deoarece f() returneaz valoarea 5, valoarea expresiei f() este 5. Bineneles, valorile nu trebuie s fie
neaprat ntregi . PHP accept 3 tipuri de valori scalare: valori ntregi, valori n virgul mobil i valori tip
ir de caractere (valorile scalare sunt acele valori indivizibile spre deosebire de valorile array, de
exemplu). PHP accept de asemeni dou tipuri compuse: array i object (tablouri i obiecte). Valorile de
acest tip pot fi atribuite variabilelor sau returnate de ctre funcie.

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

/* In acest punct $d si $e sunt egale cu 6 */


$f = double( $d++); /* Atribuie ( valoarea lui $d inainte de incrementare) * 2,
6 * 2 = 12, variabilei $f */
$g = double( ++$e); /* Atribuie ( valoarea lui $e dupa incrementare) * 2,
7 * 2 = 14, variabilei $g */
$h = $g += 10; /* $g este incrementat cu 10 si ia valoarea 24.
Aceasta valoare (24) este apoi atribuita variabilei $h,
care va lua valoarea 24. */
Limbajul PHP nu dispune de un tip logic predefinit. Evaluarea valorii de adevr a expresiilor PHP se face
la fel ca n C i Perl: orice valoare numeric nenul este TRUE, zero este FALSE. Un ir vid este
FALSE, orice alt ir este TRUE. n cazul tablourilor i obiectelor orice valoare care nu conine elemente
este considerat FALSE, altfel este considerat TRUE.

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

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

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

55
Cnd este executat instruciunea de atribuire, este evaluat expresia i valoarea rezultat este depus la
destinaia specificat.
Exemplu:
$a = ( $b = 4) + 5;
/* $a este egal cu 9 si $b cu 4 */
n operaiile aritmetice i pe iruri de caractere se pot folosi i operatorii compui, aa cum reiese din
exemplul urmtor (exemplul 2.6.1):
$a = 3;
$a += 5;
/* Atribuie 8 variabilei $a. Corespunde instructiunii $a = $a + 5; */

$a = "Buna";
$b .= " la toata lumea!";
/* Atribuie valoarea "Buna la toata lumea!" variabilei $b
(echivalent cu $b = $b . " la toata lumea!") */
De remarcat c atribuirea se face prin copiere, adic expresia din dreapta nu se modific n urma
atribuirii. PHP4 accept i atribuirea prin referin, utiliznd sintaxa $var = &$othervar;, dar acest lucru
nu este posibil n PHP3. Atribuirea prin referin nseamn c cele dou variabile refer aceeai locaie de
memorie i c modificarea uneia dintre ele o afecteaz i pe cealalt.

Operatori pe bii
Operatorii pe bii v permit s manipulai numerele ntregi n reprezentare binar.

Numele
Exemplu Rezultat
operatorului
$a & $b I (AND) Biii poziionai pe 1 n $a I n $b sunt poziionai la 1 n rezultat
$a | $b SAU (OR) Biii poziionai pe 1 n $a SAU $b sunt poziionai la 1 n rezultat
$a ^ $b XOR Biii poziionai pe 1 n $a SAU n $b sunt poziionai la 1 n rezultat
~ $a NOT Biii care sunt poziionai pe 1 n $a vor fi poziionai pe 0 i vice versa
Deplaseaz biii din $a cu $b poziii spre stnga (fiecare pas nseamn
$a << $b Deplasare la stnga
multiplicare cu 2)
Deplaseaz biii din $a cu $b poziii spre dreapta (fiecare pas nseamn
$a >> $b Deplasare la dreapta
mprire cu 2)

Operatori de comparaie
Operatorii de comparaie permit compararea a dou valori.

Exemplu Numele operatorului Rezultat


$a == $b Egal Adevrat dac $a este egal cu $b
Adevrat dac $a este egal cu $b i ei sunt de acelai tip (numai n PHP
$a === $b Identic
4)
$a != $b Diferit Adevrat dac $a este diferit de $b
$a < $b Mai mic dect Adevrat dac $a este mai mic strict dect $b.
$a > $b Mai mare dect Adevrat dac $a este mai mare strict dect $b
$a <= $b Mai mic sau egal Adevrat dac $a este mai mic sau egal ca $b
$a >= $b Mai mare sau egal Adevrat dac $a este mai mare sau egal ca $b

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


( expr1) ? ( expr2) : ( expr3);
56
Aceast expresie returneaz expresia expr2 dac expr1 este adevarat i expresia expr3 dac expresia
expr1 este fals.

Operatori de control al erorilor


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

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

Operatori de incrementare/decrementare
PHP dispune de operatori de incrementare/decrementare ca i limbajul C.

Exemplu Numele operatorului Rezultat


++$a 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

57
$a and $b I (AND) Adevrat dac $a I $b sunt adevrate
$a or $b SAU (OR) Adevrat dac $a SAU $b este adevrat
! $a NON (NOT) Adevrat dac $a este fals
Adevrat dac $a SAU $b este adevrat , dar nu amndou n acelai
$a xor $b XOR (XOR)
timp
$a && $b SI (AND) Adevrat dac $a I $b sunt adevrate
$a || $b SAU (OR) Adevrat dac $a SAU $b este adevrat

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

Precedena operatorilor
Precedena operatorilor specific ordinea n care se aplic operatorii. De exemplu, n expresia 1 + 5 * 3
rezultatul este 16 i nu 18, cci nmulirea ('*') are prioritate superioar n raport cu adunarea ('+').
Tabelul urmtor conine operatorii disponibili n PHP n ordinea cresctoare a prioritilor.

Asociativitate Operatori
Stnga ,
Stnga or
Stnga xor
Stnga I
Dreapta print
Stnga =, +=, -=, *=, /=, .=, %=, &=, |=, ^=, ~=, <<=, >>=
Stnga ?:
Stnga ||
Stnga &&
Stnga |
Stnga ^
Stnga &
Non-asociativ ==, !=, ===, !==
Non-asociativ <, <=, >, >=
Stnga <<, >>
Stnga +-
Stnga */, %
Stnga !, ~, ++, --, (int), (double), (string), (array), (obiect), @
Stnga [
Non-asociativ new

Operatori pentru iruri de caractere


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

58
$a = "Hello";
$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 instruciuni. O instruciune poate fi o atribuire, un apel de funcie, o
instruciune condiional sau chiar o instruciune vid. O instruciune se termin de obicei prin punct i
virgul, ';'. Instruciunile pot fi grupate n blocuri delimitate de acolade, '{}'. Un bloc este considerat ca o
instruciune. Diferitele tipuri de instruciuni sunt descrise n capitolul urmtor.

if
Instruciunea if este important n toate limbajele, inclusiv n PHP. Ea permite execuia condiionat a
unei pri de cod. Sintaxa instruciunii if este aceeai ca i n C:
if( expresie)
{
list de instruciuni
}
Cum am vzut n paragraful care se refer la expresii, expresie este evaluat la o valoare de adevr. Dac
expresia expresie este TRUE, PHP va executa instruciunile din lista de instruciuni, iar dac ea este
FALSE, instruciunile vor fi ignorate.
Exemplu:
if( $a > $b)
echo "$a este mai mare decat $b";
Dac dorim ca un grup de instruciuni s fie executate condiionat, este suficient s nchidem aceste
instruciuni ntre acolade pentru a forma un bloc.
Exemplu:
if( $a > $b)
{
echo "$a este mai mare decat $b";
$b = $a;
}
Instruciunile if pot fi imbricate pe oricte niveluri dorim obinndu-se o structur condiional extrem de
flexibil.

else
Dac dorim s executm dou instruciuni diferite n funcie de valoarea de adevr a unei expresii vom
folosi o instruciune if-else ca n exemplul urmtor:
if( $a > $b)
{
print "$a este mai mare decat $b";
}
else
{
print "$b este mai mare decat $a";
}
Instruciunile de dup else sunt executate doar dac expresia condiional este evaluat la FALSE.

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

59
Spre exemplu, fragmentul urmtor de cod va afia care este relaia dintre $a i $b.
if( $a > $b)
{
print "$a este mai mare decat $b";
}
elseif( $a == $b)
{
print "$a este egal cu $b";
}
else
{
print "$b este mai mare decat $b";
}
Instruciunile elseif se pot imbrica pe mai multe niveluri, dup un if iniial. Primul elseif care va fi evaluat
la TRUE va fi executat. n PHP, instruciunea poate fi scris i n dou cuvinte: else if. Comportamentul
su va fi acelai.

Sintaxa alternativ
PHP propune o sintaxa alternativ pentru instruciunile de control if, while, for i switch. n fiecare caz
principiul este de a nlocui acolada deschis cu dou puncte (':') i acolada nchis prin, respectiv endif;,
endwhile;, endfor;, sau endswitch;.
if( $a == 5):
echo $a;
endif;
Aceast sintax funcioneaz de asemenea cu else i elseif. Exemplul urmtor prezint o structur cu un
if, un elseif i un else utilizat n aceast nou sintax.
if( $a == 5):
print "$a este egal cu 5";
print "...";
elseif( $a == 6):
print "$a este egal cu 6";
print "!!!";
else:
print "$a este diferit de 5 si 6";
endif;

while
Bucla while este cea mai simpl implementare a unei bucle n PHP. Aceast bucl se comport la fel ca n
C. Sintaxa instruciunii while este:
while( expresie)
{
list de instruciuni
}
Execuia unei bucle while este foarte simpl. PHP execut instruciunile din lista de instruciuni att timp
ct expresia buclei while, expresie, este evaluat la TRUE. Valoarea expresiei este verificat la fiecare
nceput al buclei i, dac valoarea se schimb pe durata execuiei instruciunilor, execuia nu se va sfri
dect la urmtoarea iteraie (de fiecare dat cnd PHP execut instruciunile are loc o iteraie). Dac
expresia buclei while este FALSE naintea primei interaii, instruciunea nu va fi niciodat executat.
Mai multe instruciuni pot fi executate ntr-o bucl while grupndu-le ntre acolade pentru a forma un
bloc sau utiliznd sintaxa alternativ dup modelul de mai jos:
while( expresie):
list de instruciuni
endwhile;
Urmtoarele exemple sunt identice ca efect i afieaz toate numerele de la 1 la 10:
/* Exemplul 1 */
$i = 1;
while( $i <= 10)
{

60
print $i++; /* Afiseaza valoarea lui $i inaintea incrementarii */
}

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

do..while
Buclele do..while seamn mult cu buclele while, dar expresia condiional este testat la sfritul
fiecarei iteraii i nu la nceput. Principala diferen fa de bucla while este c prima iteraie a buclei
do..while este ntotdeauna executat (expresia nu este testat dect la sfritul iteraiei). Nu exist dect o
sintax posibil pentru buclele do..while:
do
{
list de instruciuni
}while( expresie);
Exemplu:
$i = 0;
do
{
print $i;
}while( $i > 0);
Bucla de mai sus va fi executat doar o singur dat, pentru c la prima evaluare a expresiei obinem
FALSE (deoarece variabila $i nu este mai mare dect 0) i execuia buclei se oprete.
Utilizatorii familiari cu C sunt obinuii s utilizeze n mod diferit buclele do..while, care permite oprirea
execuiei buclei, prin introducerea instruciunii break ntr-o bucl do..while. Codul urmtor demonstreaz
acest lucru:
do
{
if( $i < 5)
{
print "$i nu este suficient de mare";
break;
}
$i *= $factor;
if( $i < $minimum_limit)
{
break;
}
print "$i este bun";
}while( 0);

for
Buclele for sunt cele mai complexe bucle n PHP. Ele funcioneaz la fel ca buclele for din limbajul C.
Instruciunea are urmtoarea sintax:
for( expr1; expr2; expr3)
{
list de instruciuni
}
Prima expresie (expr1) este evaluat (executat) o singur dat, necondiionat, la nceputul buclei.
La nceputul fiecrei iteraii, expresia expr2 este evaluat. Dac evaluarea devine TRUE, bucla continu i
instruciunile din lista de intruciuni sunt executate. Dac evaluarea devine FALSE, execuia buclei se
oprete.
La sfritul fiecrei iteraii, expresia expr3 este evaluat (executat).

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

/* Exemplul 2 */
for( $i = 1;; $i++)
{
if( $i > 10)
{
break;
}
print $i;
}

/* Exemplul 3 */
$i = 1;
for( ;;)
{
if( $i > 10)
{
break;
}
print $i;
$i++;
}

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

foreach
PHP4 (nu i PHP3) dispune de comanda foreach, ca Perl sau alte limbaje. Instruciunea ofer un mod
simplu de a trece n revist un tablou. Exist dou sintaxe posibile, a doua este o mic, dar util, extensie
a celei dinti :
foreach( array_expresion as $value)
{
list de instruciuni
}
foreach( array_expresion as $key => $value)
{
list de instruciuni
}
Prima form trece n revist tabloul array_expression. La fiecare iteraie, valoarea elementului curent este
atribuit lui $value i pointerul intern al tabloului este avansat cu un element (astfel, la urmtoarea iteraie
avei acces la urmtorul element).
A doua form face acelai lucru, dar cheia (indicele) elementului curent va fi atribuit variabilei $key la
ficare iteraie.

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

foreach( $arr as $value)


{
echo "Valoare: $value<br>\n";
}
Exemplele urmtoare funcioneaz, de asemeni, identic:
reset( $arr);
while( list( $key, $value) = each( $arr))
{
echo "Cheie: $key; Valoare: $value<br>\n";
}

foreach( $arr as $key => $value)


{
echo "Cheie: $key; Valoare: $value<br>\n";
}
Urmeaz 3 exemple de utilizare (exemplul 2.7.1):
/* Exemplul 1: o singura valoare */
$a = array( 1, 2 3, 17);
foreach( $a as $v)
{
print "Valoarea curenta este \$a: $v.\n";
}

/* Exemplul 2: valoare (cu cheie asociata) */


$a = array( 1, 2 3, 17);
$i = 0; /* Numai pentru afisare */
foreach( $a as $v)
{
print "\$a[$i] => $k.\n";
}

/* Exemplul 3: valoarea si cheia */


$a = array(
"unu" => 1,
"doi" => 2,
"trei" => 3,
"saptesprezece" => 17
);
foreach( $a as $k => $v)
{
print "\$a[$k] => $v.\n";
}

break
Instruciunea break permite ieirea dintr-o instruciune if, for, while sau switch. Instruciunea break
accept un argument numeric opional care va indica numrul de instruciuni imbricate care trebuiesc
ntrerupte.
Exemplul 2.7.2:
$arr = array( 'unu', 'doi', 'trei', 'patru', 'stop', 'cinci');
while( list( , $val) = each( $arr))
{
63
if( $val == 'stop')
break; /* Se poate scrie si "break 1;" */
echo "$val<br>\n";
}

/* Folosind un argument optional */


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

continue
Instruciunea continue este utilizat ntr-o bucl pentru a sri peste instruciunile de dup continue i
pn la sfritul blocului; execuia iteraiei curente este ntrerup i se trece la execuia iteraiei urmtoare.
Instruciunea continue accept un argument numeric opional care va indica cte bucle imbricate vor fi
ignorate.
Exemplul 2.7.3:
while( list( $key, $val) = each( $arr))
{
if( !( $key % 2)) // Evita elementele impare
continue;
executa_impar( $val);
}

$i = 0;
while( $i++ < 5)
{
echo "Exterior<br>\n";
while( 1)
{
echo "Mijloc<br>\n";
while( 1)
{
echo "Interior<br>\n";
continue 3;
}
echo "Aici nu afiseaza niciodata.<br>\n";
}
echo "Nu faceti niciodata asta.<br>\n";
}

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

64
print "$i este egal cu 2";

switch( $i)
{
case 0:
print "$i este egal cu 0";
break;
case 1:
print "$i este egal cu 1";
break;
case 2:
print "$i este egal cu 2";
break;
}
Este important s nelegem modul de execuie al instruciunii switch pentru a evita apariia erorilor.
Instruciunea switch se execut secvenial, linie dup linie. La nceput nu este executat nici un cod.
Numai cnd se gasete o valoare a selectorului identic cu o constant case, PHP execut instruciunile
corespunztoare respectivei constante case. PHP continu s execute instruciunile pna la sfritul
blocului de instruciuni switch sau pn cnd ntlnete instruciunea break. Dac nu utilizai
instruciunea break la sfritul unui bloc case, PHP va continua s execute instruciunile din urmtorul
bloc case (exemplul 2.7.5):
switch( $i)
{
case 0:
print "$i este egal cu 0";
case 1:
print "$i este egal cu 1";
case 2:
print "$i este egal cu 2";
}
n acest exemplu, dac $i este egal cu 0, PHP va executa toate instruciunile print. Dac $i este egal cu 1,
PHP va executa ultimele dou instruciuni print i numai dac $i este egal cu 2 vei obine rezultatul
scontat, adic se va afia $i este egal cu 2. Deci, imporatant este sa folosii corect instruciunea break.
n comanda switch, condiia este evaluat o singur dat i rezultatul este comparat cu fiecare constant
case. ntr-o instruciune elseif, condiia este reevaluat. Dac condiia voastr este mai complicat dect o
simpl comparaie sau apare ntr-o bucl, instruciunea switch se poate dovedi mai rapid.
Lista de instruciuni a unei constante case poate fi vid; n acest caz PHP va utiliza lista de instruciuni din
case-ul urmtor.
switch( $i)
{
case 0:
case 1:
case 2:
print "$i este mai mic dect 3, dar nu este negativ";
break;
case 3:
print "$i este egal cu 3";
}
Un caz special l constituie expresia predefinit default. Aceast expresie indic orice expresie diferit de
constantele case anterioare (exemplul 2.7.6):
switch( $i)
{
case 0:
print "$i este egal cu 0";
break;
case 1:
print "$i este egal cu 1";
break;
case 2:
print "$i este egal cu 2";
break;

65
default:
print "$i nu este egal cu 0, 1 sau 2";
}
Observaie: expresia predefinit default poate fi folosit oriunde n instruciunea switch.
Expresiile case pot fi orice expresie scalar de tip ntreg, virgul mobil sau ir de caractere. Tablourile i
obiectele pot fi folosite numai dac sunt derefereniate la un tip simplu.
Sintaxa alternativ pentru aceast structur de control este urmtoarea:
switch( $i):
case 0:
print "$i 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()
Funcia include() introduce i evalueaz fiierul specificat n argument. Dac URL fopen wrappers nu
sunt disponibile n PHP (aa cum sunt n configuraia implicit), putei specifica fiierul care trebuie
inclus utiliznd un URL n locul unui pathname local. Pentru a evita utilizarea eronat a fiierului inclus,
orice cod din fiierul destinaie care trebuie executat ca un cod PHP trebuie ncadrat de tag-uri de nceput
i sfrit valide n PHP. De asemeni, se poate folosi o instruciune include() ntr-o bucl pentru a include
mai multe fiiere diferite, aa cum reiese din exemplul urmtor:
$files = array( 'unu.inc', 'doi.inc', 'trei.inc');
for( $i = 0; $i < count( $files); $i++)
{
include( $files[ $i]);
}
Instruciunea include() este reevaluat de fiecare dat cnd este ntlnit ntr-un cod PHP. Deoarece
include() este o construcie special a limbajului, trebuie s o includei ntr-un bloc de instruciuni dac ea
apare ntr-un bloc condiional.
Exemplu:
/* Utilizarea este GRESITA si nu va functiona in modul dorit */
if( $condition)
include( $file);
else
include( $other);

/* Aceasta este CORECT */


if( $condition)
{
include( $file);
}
else
{
include( $other);
}
n PHP4, ct i n PHP3, se poate executa o instruciune return n interiorul unui fiier inclus cu
include(), execuia determinnd ncheierea procesului n respectivul fiier i revenirea n scriptul care l-a
solicitat. De asemeni, PHP4 permite s returnai valori din fiierele incluse cu include(). Putei folosi
aceste valori ca i cum ar fi returnate de o funcie normal.
Exemplu:
/* Fisierul test.inc */
66
/* Se presupune ca fisierul test.inc exista in acelasi
director cu fisierul main.html */
echo "Inainte de return<br>\n";
if( 1)
{
return 27;
}
echo "Dupa return<br>\n";
/* ... in fisierul main.html */
/* Presupunem ca fisierul main.html contine aceasta: */
$retval = include( 'test.inc');
echo "Fisierul returneaza: '$retval'<br>\n";
Atunci cnd main.html este apelat n PHP3, el va genera o eroare de analiz la linia 3 deoarece n PHP3
nu putem evalua valori returnate de include(). n PHP4 rezultatul va fi:
Inainte de return
Fisierul returneaza: '27'
S presupunem acum c main.html a fost modificat i conine codul urmtor:
include( 'test.inc');
echo "Intoarcere in main.html<br>\n";
n PHP4 se va afia:
Inainte de return
Intoarcere in main.html
Din contr, PHP3 afieaz:
Inainte de return
27 Intoarcere in main.html
Parse error: parse error in main.html on line 5
Eroarea de analiz de mai sus este rezultatul faptului c instruciunea return este inclus mpreun cu
test.inc n acelai bloc. Dac instruciunea return este mutat n afara blocului, se afieaz:
Inainte de return
27 Intoarcere in main.html
"27" arat c PHP3 nu suport returnarea valorilor din fiiere n acest mod.
Este important de notat c atunci cnd un fiier este inclus cu include() codul pe care l conine
motenete domeniul variabilelor corespunzator liniei pe care apare instruciunea include() n cod. Orice
variabil disponibil pe respectiva linie va fi disponibil i n fiierul inclus.

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

II.8 Funcii
Funciile definite de utilizator
O funcie poate fi definit de utilizator conform sintaxei urmtoare:
function nume_functie( $arg1, $arg2, ..., $argN)
{
echo "Exemplu de functie.\n";
return $retval;
}
ntr-o funcie poate s apar orice cod PHP valid, chiar alte funcii i definiii de clase.

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

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

Transmiterea argumentelor prin referin


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

Valorile argumentelor implicite


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

68
Valoarea implicit trebuie s fie o expresie constant, nu o variabil sau un membru de clas. Observai c
atunci cnd folosii argumente implicite, orice astfel de argument trebuie s fie n lista argumentelor n
dreapta orcrui argument neimplicit, altfel nu vom obine rezultatul ateptat.
Considerai exemplul urmtor:
function makeyogurt( $type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry"); // Nu merge!!!
Rezultatul acestui cod este:
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry.
Acum comparai cu acesta:
function makeyogurt( $flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry"); // Merge!!!
/* Afieaz:
Making a bowl of acidophilus raspberry. */

Liste cu numr variabil de argumente


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

Valorile returnate de funcii


Valorile sunt returnate folosind opional instruciunea return. Poate fi returnat orice tip de rezultat,
inclusiv tablouri i obiecte:
function square( $num)
{
return $num * $num;
}
echo square( 4); // Se afieaz 16
Nu putei returna valori multiple dintr-o funcie, dar rezultate asemntoare pot fi obinute prin returnarea
unui tablou:
function small_numbers()
{
return array( 0, 1, 2);
}
list( $zero, $one, $two) = small_numbers();
Pentru a returna o referin dintr-o funcie, trebuie folosit operatorul '&' att n declaraia funciei dar i
cnd atribuii valoarea returnat unei variabile, ca n exemplul de mai jos:
function &returns_reference()
{
return &$someref;
}
$newref = &returns_reference();

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

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

I.9 Clase i obiecte


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

// Adauga $num articole de tipul $artnr


function add_item( $artnr, $num)
{
$this->items[ $artnr] += $num;
}

// Elimina $num articole de tipul $artnr


function remove_item( $artnr, $num)
{
if( $this->items[ $artnr] > $num)
{
$this->items[ $artnr] -= $num;
return true;
}
else
{
return false;
}
}
}
Construcia de mai sus definete o clas Cart format dintr-un tablou asociativ de articole i dou funcii
pentru a aduga i a elimina articole din tablou.
Not: n PHP4 sunt permii doar iniializatori constani pentru variabile var. Pentru iniializatorii
neconstani trebuie folosii constructori.
/* Acest exemplu nu va functiona PHP4 */
class TestClass
{
var $todays_date = date( "Y-m-d");
var $name = $a_name;
}

/* Asa trebuie procedat */


class TestClass
{
var $todays_date;
var $name;

function Cart()
{
$this->todays_date = date( "Y-m-d);
$this->name = $GLOBALS[ 'a_name'];
}
}
Clasele sunt tipuri. Pentru a crea o variabil de tipul dorit se folosete operatorul new.
70
$cart = new Cart;
$cart->add_item( "10", 1);
Acest cod creaz un obiect $cart din clasa Cart. Funcia add_item() a acestui obiect este apelat pentru a
aduga un articol cu numrul 10 n tabloul $cart->items.
Clasele pot fi extensii ale altor clase. Aceast noiune se numete motenire. Clasa extins sau derivat
posed toate variabilele i funciile clasei de baz alturi de variabilele i funciile definite n extensie.
Acest lucrul se realizeaz utiliznd cuvntul cheie extends. Motenirea multipl nu este acceptat.
class Named_Cart extends Cart
{
var $owner;

function set_owner( $an_owner)


{
$this->owner = $an_owner;
}
}
Codul de mai sus definete o clas Named_Cart care are toate variabilele i funciile din Cart plus o
variabil suplimentar $owner i o funcie suplimentar set_owner(). Putei crea un obiect $ncart cu
operatorul new i apoi putei seta proprietile obiectului.
Exemplu:
$ncart = new Named_Cart; // 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 funciile unei clase variabila $this nseamn obiectul curent. Pentru a accesa o variabil sau funcie a
obiectului curent, numit $proba, trebuie s utilizm construcia $this->proba. Att n interiorul ct i n
afara obiectului, nu este necesar semnul '$' ( n faa unei "proprieti") cnd accesai o proprietate a
acestuia.
Exemplu:
$ncart->owner = "Chris"; // Fr $ n faa proprietii $owner

$ncart->$owner;
// Este invalid deoarece $ncart->$owner = $ncart->""

$my_var = 'owner';
$ncart->$my_var = "Chris";
// Este corect deoarece $ncart->$my_var = $ncart->owner
Constructorii sunt funciile dintr-o clas care au acelai nume cu clasa. Ei sunt automat apelai cnd creai
o nou instan a clasei.
class Auto_Cart extends Cart
{
function Auto_Cart()
{
$this->add_item( "10", 1);
}
}
Acest cod definete o clas Auto_Cart care extinde clasa Cart plus un constructor care iniializeaz
obiectul cu un articol, avnd numrul 10 de fiecare dat cnd un nou obiect de tipul Auto_Cart este creat
cu operatorul new.
Constructorii pot avea argumente (pot fi opionale), caracteristic care i face foarte utili.
class Constructor_Cart extends Cart
{
function Constructor_Cart( $item = "10", $num = 1)
{
$this->add_item( $item, $num);
}
}

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

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

Ce fac referinele?
Referinele PHP permit referirea aceluiai coninut prin dou variabile diferite. Cnd scriei:
$a = &$b;
nseamn c $a i $b indic aceeai variabil.
Al doilea lucru pe care l realizeaz referinele este s transmit variabile prin referin. Acest lucru se
realizeaz folosind variabila local a funciei i variabila cu care se face apelul drept referine ctre acelai
coninut.
Exemplu:
function fct( &$var)
{
$var++;
}

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

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

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

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

$fnc = &find_var( $bar);


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

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

Resetarea referinelor
Cnd resetai o referin rupei practic legatura dintre numele i coninutul variabilei. Aceasta nu
nseamn ca acel coninut al variabilei va fi distrus.
Exemplu:
$a = 1;
$b = &$a;
unset( $a);
Secvena de cod de mai sus nu va reseta $b ci numai variabila $a.
Multe construcii sintactice n PHP sunt implementate prin mecanismul referinelor, deci modul lor de
funcionare se poate aplica acestor construcii. Unele construcii, cum ar fi transmiterea i ntoarcerea prin
referin, au fost deja menionate. Alte construcii care folosesc referinele sunt referinele globale. Cnd
declarai variabila $var ca variabil global creai defapt o referin la o variabil global. Semnificaia
este aceeai cu :
$var = &$GLOBALS[ "var"];
Aceasta nseamn, spre exemplu, c, resetarea variabilei $var nu va reseta i variabila global asociat.

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

Funcii pentru gestionarea fiierelor


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

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

chmod
Are sintaxa:
int chmod (string filename, int mode)
Schimb drepturile de acces ale fiierului filename n mode.

73
Observaie: mode nu este conisderat implicit ca fiind o valoare octal, deci irurile de caractere (de
exemplu g+w) nu vor avea efectul dorit. Pentru a fi siguri c vei obine rezultatul dorit, trebuie s
prefixai mode cu un zero (0):
chmod ("/somedir/somefile", 755); // zecimal; probabil incorect
chmod ("/somedir/somefile", "u+rwx,go+rx"); // string; incorect
chmod ("/somedir/somefile", 0755); // octal; valuare corect pentru mode
Funcia returneaz TRUE n caz de succes i FALSE n caz contrar.
Not: funcia nu este disponibil pe platformele Windows.

chown
Are sintaxa:
int chown( string filename, mixed user)
Schimb proprietarul fiierului filename cu user. Doar superuserul poate schimba proprietarul unui fiier.
Funcia returneaz TRUE n caz de succes i FALSE n caz contrar.
Not: funcia nu este disponibil pe platformele Windows.

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

dirname
Are sintaxa:
string dirname( string path)
Funcia returneaz numele directorului din calea path.
Exemplu:
$path = "/etc/passwd";
$file = dirname( $path); // $file ia valoarea /etc

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

fclose
Are sintaxa:
int fclose( int fp)
nchide fiierul referit prin fp. ntoarce TRUE n caz de succes i FALSE n caz contrar.
Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen() sau fsockopen().
74
feof
Are sintaxa:
int feof( int fp)
Returneaz TRUE dac pointerul de fiier este poziionat pe EOF sau n caz de eroare, altfel returneaz
FALSE.
Variabila fp trebuie s indice un fiier valid, adic un fiier deschis cu fopen(), popen() sau fsockopen().

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

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

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

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

/* Scrie coninutul unei pagini web ntr-un ir de caractere */


$fcontents = join( '', file( 'http://www.php.net'));

file_exists
Are sintaxa:
int file_exists( string filename)
ntoarce TRUE dac fiierul specificat prin filename exist i FALSE n caz contrar.

filesizes
Are sintaxa:
int filesize( string filename)
ntoarce dimensiunea fiierului specificat prin filename dac acesta exist i FALSE n caz de eroare.

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

fopen
Are sintaxa:
int fopen( string filename, string mode [, int use_include_path])
Funcia deschide un fiier sau un URL. n cazul deschiderii unui URL se stabilete o conexiune ctre
serverul Web specificat.
n cazul unui fiier obinuit acesta este cutat n sistemul propriu de fiiere i deschis. Dac deschiderea
eueaz funcia returneaz FALSE. Argumentul mode poate avea una din urmtoarele valori:
'r'
Deschide un fiier numai pentru citire plasnd indicatorul de fiier la nceputul acestuia;
'r+'
Deschide un fiier pentru citire i scriere plasnd indicatorul de fiier la nceputul acestuia;
'w'
Deschide un fiier numai pentru scriere, plaseaz indicatorul de fiier la nceputul acestuia i
truncheaz fiierul la lungimea 0. Dac fiierul nu exist ateapt s fie creat;
'w+'
Deschide un fiier pentru citire i scriere, plaseaz indicatorul de fiier la nceputul acestuia i
truncheaz fiierul la lungimea 0. Dac fiierul nu exist ateapt s fie creat;
'a'
Deschide un fiier numai pentru scriere (adugare) i plaseaz pointer-ul de fiier la sfritul
acestuia. Dac fiierul nu exist ateapt s fie creat;
'a+'
Deschide un fiier pentru citire i scriere (adugare) i plaseaz pointer-ul de fiier la sfritul
acestuia. Dac fiierul nu exist ateapt s fie creat.
76
Argumentul mode poate conine 'b'. Aceast opiune este util n sistemele care fac diferena ntre fiierele
binare i fiierele text. Dac nu este necesar, respectivul caracter va fi ignorat. Dac dorii ca fiierul s fie
cutat n calea specificata (path), folosii al treilea parametru setat cu "1".
Exemplu:
$fp = 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)
Funcia citete fiierul fp pna la EOF i afieaz rezultatul la ieirea standard.
n cazul unei erori funcia returneaz FALSE. Variabila fp trebuie s indice un fiier valid, adic un fiier
deschis cu fopen(), popen() sau fsockopen(). Dup citire funcia nchide fiierul.

fputs
Are sintaxa:
int fputs( int fp, string str [, int length])
Funcia scrie irul string n fiierul fp n ntregime (dac argumentul length lipsete) sau numai length
octei din acesta. fputs() este un alias pentru fwrite() i este identic cu aceasta.

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

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

fseek
Are sintaxa:
77
int fseek( int fp, int offset [, int whence])
Funcia seteaz poziia indicatorului de fiier n fiierul indicat de fp. Noua poziie, msurat n octei faa
de nceputul fiierului se obine adugnd valoarea offset la poziia specificat prin argumentul whence.
Aceste valori sunt definite astfel:
SEEK_SET
Seteaz poziia indicatorulului de fiier la offset bytes fa de nceputul fiierului;
SEEK_CUR
Seteaz poziia indicatorului de fiier la offset bytes fa de poziia curent (poziia curent plus
offset);
SEEK_END
Seteaz poziia indicatorului de fiier la offset bytes fa de sfritul fiierului (sfritul fiierului
plus offset).
Dac argumentul whence nu este specificat se consider a fi SEEK_SET. n caz de succes funcia
returneaz 0, altfel returneaz -1. Trecerea peste EOF nu este considerat eroare.

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

ftruncate
Are sintaxa:
int ftruncate( int fp, int size)
Funcia truncheaza fiierul la lungimea specificat prin size. n caz de succes returneaz TRUE i FALSE
n caz contrar.

fwrite
Are sintaxa:
int fwrite( int fp, string string [, int length])
Funcia scrie coninutul argumentului string n fiierul indicat de fp. Dac argumentul length este precizat
scrierea se oprete dup length octei sau dac irul string s-a terminat.

is_dir
Are sintaxa:
bool is_dir( string filename)
ntoarce TRUE dac filename exist i este un director.

is_file
Are sintaxa:
bool is_file( string filename)
ntoarce TRUE dac filename exist i este un fiier obinuit.

is_executable

78
Are sintaxa:
bool is_file( string filename)
ntoarce TRUE dac filename exist i este executabil.

is_link
Are sintaxa:
bool is_link( string filename)
ntoarce TRUE dac filename exist i este un link simbolic.

is_readable
Are sintaxa:
bool is_readable( string filename)
ntoarce TRUE dac filename exist i poate fi citit.

is_writeable
Are sintaxa:
bool is_writeable( string filename)
ntoarce TRUE dac filename exist i poate fi scris.

link
Are sintaxa:
int link( string target, string link)
Creaz un link hard.
Not: aceast funcie nu este disponibil n sistemele Windows.

mkdir
Are sintaxa:
int mkdir( string pathname, int mode)
Creaz directorul specificat de pathname. ntoarce TRUE n caz de succes i FALSE n caz contrar.

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

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

readfile
Are sintaxa:

int readfile( string filename [, int use_include_path])

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

rename
Are sintaxa:
int rename( string oldname, string newname)
Redenumete un fiier schimbndu-i numele din oldname n newname. Returneaz TRUE n caz de
succes i FALSE n caz de eec.

rmdir
Are sintaxa:
int rmdir( string dirname)
terge directorul dirname numai dac acesta este gol, iar n caz de eroare ntoarce 0.

unlink
Are sintaxa:
int unlink( string filename)
terge fiierul filename i returneaz 0 sau FALSE n caz de eroare.
Not: funcia nu este disponibil n sistemele Windows.

cii pentru tablouri


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

array
Are sintaxa:
array array( [mixed... ])
Creaz i ntoarce un tablou de parametri.
Not: array() este un constructor de limbaj utilizat pentru a reprezenta tablouri i nu o funcie obinuit.
Sintaxa index => valori, separat prin virgul, definete indexul i valorile. Indexul poate fi de tip ir sau
numeric. Cnd indicele este omis, un index ntreg este automat produs ncepnd de la 0. Dac indexul este
un ntreg, indexul urmtor produs va fi indexul ntreg mai mare cu 1. Notai c atunci cnd se definesc doi
indeci identici cu valori diferite, ultima valoare o suprascrie pe prima.
Urmtorul exemplu demonstreaz cum se creaz un tablou bidimensional, cum se specific cheia pentru
un tablou asociativ i cum sar i continu indicii numerici din tablou:
$fruits = array(
"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);
Coninutul este:
array( [0] => 1, [1] => 1, [2] => 1, [3] => 13, [4] => 1, [8] => 1, [9] => 19)

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

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

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

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

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

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

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

array_multisort
Are sintaxa:
bool array_multisort( array ar1 [, mixed arg [, mixed ... [, array ...]]])
Funcia poate fi utilizat pentru a sorta mai multe tablouri odat sau un singur tablou multidimensional n
funcie de una sau mai multe dimensiuni (criterii de sortare). Sortarea nu afecteaz cheile asociative.
Tablourile de intrare sunt tratate drept coloanele unui tabel care se sorteaza pe linii. Primul tablou
reprezint criteriul primar de sortare. Valorile din respectivul tablou (situate pe linii) se compar ntre ele
i dac sunt egale se sorteaz conform celui de al doilea tablou etc.
Structura argumentelor acestei funcii este puin neobinuit, dar flexibil. Primul argument trebuie s fie
obligatoriu un tablou. n continuare, fiecare argument este fie un tablou fie un criteriu de sortare.
Criterii de sortare dup ordine:
SORT_ASC
Ordonare n ordine cresctoare;
SORT_DESC
Ordonare n ordine descresctoare.
Criterii de sortare dup tip:
SORT_REGULAR
Comparar valorile normal;
SORT_NUMERIC
Comparar valorile numeric;
SORT_STRING
Comparar valorile ca iruri de caractere.
Nu se pot specifica dou criterii de acelai tip dup un argument. Funcia ntoarce TRUE dac sortarea a
reuit i FALSE n caz contrar.

82
Exemplu (sortarea a mai multor tablouri):
$ar1 = array( "10", 100, 100, "a");
$ar2 = array( 1, 3, "2", 1);
array_multisort( $ar1, $ar2);
n acest exemplu, dup sortare, primul tablou conine 10, "a", 100,100. Al doilea conine 1, 1, 2, "3".
Intrarea n al doilea tablou corespunde intrrilor identice n primul tablou care au fost deasemenea
ordonate.
Exemplu (sortarea tablourilor multidimensionale):
$ar = array( array( "10", 100, 100, "a"), array( 1, 3, "2", 1));
array_multisort( $ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
n acest exemplu, dup sortare, primul tablou va conine 10, 100, 100, "a" (a fost sortat ca iruri de
caractere n ordine cresctoare), iar al doilea va conine 1, 3, "2", 1 (sortat ca numere n ordine
descresctoare).

array_pad
Are sintaxa:
array array_pad( array input, int pad_size, mixed pad_value)
Funcia returneaz o copie a tabloului input avnd dimensiunea specificat prin pad_size i umplut cu
valoarea pad_value. Daca argumentul pad_size este pozitiv tabloul este umplut la dreapta, iar dac este
negativ este umplut la stnga. Dac valoarea absolut a argumentului pad_size este mai mic sau egal cu
lungimea tabloului input umplerea nu are loc.
Exemplu:
$input = array( 12, 10, 9);
$result = array_pad( $input, 5, 0); // Tabloul $result conine (12, 10, 9, 0,
0)
$result = array_pad( $input, -7, -1); // Tabloul $result conine (-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)
Funcia extrage i returneaz ultimul element din tabloul array i micoreaz dimensiunea tabloului cu o
unitate.
Exemplu:
$my_list = array( "orange", "apple", "raspberry");
$fruit = array_pop( $my_list);
/* n acest moment $my_list are doar 2 elemente: "orange" i "apple";
$fruit are "raspberry" */

array_push
Are sintaxa:
int array_push( array array, mixed var [, mixed ...])
Funcia trateaz tabloul ca pe o coad i introduce valorile primite ca argumente la sfritul tabloului.
Lungimea tabloului crete cu numrul de variabile introduse. Are acelai efect ca i instruciunea:
$array[] = $var;
repetat pentru fiecare $var.
Exemplu:
$queue = array( 1, 2);
array_push( $queue, "+", 3);
// Tabloul $queue va conine: 1, 2, "+" i 3
83
Funcia returneaz noul numr de elemente din tablou.

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

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

array_slice
Are sintaxa:
array array_splice( array input, int offset [, int length [, array replacement]])
Funcia extrage o poriune dintr-un tablou; returneaz secvena elementelor din argumentul input
specificat prin parametrii offset i length.
Dac offset este pozitiv, secvena va ncepe la acea poziie din tablou. Dac offsset este negativ, secvena
va ncepe la aceea poziie fa de sfritul tabloului.
Dac length este precizat i este pozitiv, atunci secvena va avea length elemente. Dac length este
precizat i este negativ, atunci secvena se va opri la length elemente fa de sfritul tabloului. Dac
length lipsete secvena va conine toate elementele ncepnd de la poziia offset pn la sfritul
tabloului.
Exemplu:
$input = array( "a", "b", "c", "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)
Funcia calculeaz i returneaz suma elementelor din tabloul arr ca un numr ntreg sau float.

array_unique
Are sintaxa:
array array_unique( array array)

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

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

array_values
Are sintaxa:
array array_values( array input)
Funcia returneaz toate valorile din tabloul input.
Exemplu:
$tshirt = array( "size" => "XL", "color" => "gold");
array_values( $tshirt); // Returneaz array( "XL", "gold")

arsort
Are sintaxa:
void arsort( array array [, int sort_flags])
Funcia sorteaz descresctor tabloul array astfel nct legturile dintre indicii asociativi i valorile
indicate de ctre acetia s se menin. Vei folosi aceast funcie pentru a sorta tablouri asociative n care
ordinea actual a elementelor este important.
Exemplu:
$fruits = array( "d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort( $fruits);
reset( $fruits);
while( list( $key, $val) = each( $fruits))
{
echo "$key = $val\n";
}
Se va obine:
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple
Fructele au fost sortate n ordine alfabetic descresctoare pstrnd legtura dintre indec7#351;ii
asociativi i elemente.

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

85
Funcia sorteaz cresctor tabloul array astfel nct legturile dintre indicii asociativi i valorile indicate
de ctre acetia s se menin. Vei folosi aceast funcie pentru a sorta tablouri asociative n care ordinea
actual a elementelor este important.
Exemplu:
$fruits = array( "d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort( $fruits);
reset( $fruits);
while( list( $key, $val) = each( $fruits))
{
echo "$key = $val\n";
}
Fructele au fost aranjate n ordine alfabetic pstrnd legtura dintre indec7#351;ii asociativi i elemente.
Exemplul de mai sus va furniza rezultatul:
fruits[c] = apple
fruits[b] = banana
fruits[d] = lemon
fruits[a] = orange

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

each
Are sintaxa:
array each( array array)
Funcia returneaz cheia curent i valoarea corespunztoare din tabloul array i avanseaz pointerul
tabloului. Aceast pereche de valori este returnat ntr-un tablou cu 4 elemente, cu cheile 0, 1, key i
value. Elementele 0 i key conin numele elementului din tablou, iar 1 i value conin valoarea.
Dac s-a ajuns la sfritul tabloului funcia each() returneaz FALSE.
Exemplu:
$my_list = array( "bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each( $my_list);
Variabila $bar va conine conine urmtoarele perechi key/value:
0 => 0
1 => 'bob'
key => 0
value => 'bob'
$my_list = array( "Robert" => "Bob", "Seppo" => "Sepi");
$bar = each( $my_list);
Variabila $bar va conine conine urmtoarele perechi key/value:
0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'
Funcia each() este utilizat n conjuctur cu funcia list() pentru a traversa un tablou, de exemplu
$HTTP_POST_VARS:

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

end
Are sintaxa:
end( array array)
Funcia poziioneaz poinerul intern al tabloului pe ultimul element.

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

key
Are sintaxa:
mixed key( array array)
Funcia ntoarce indicele elementului corespunztor poziiei curente n tablou.

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

natsort
Are sintaxa:
void natsort( array array)
Aceast funcie implementeaz un algoritm de sortare care ordoneaz alfanumeric irurile, aa cum ar
proceda un operator uman. Aceast ordonare se numete ordonare natural. Diferena dintre acest

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

natsort( $array2);
echo "\nNatural order sorting\n";
print_r( $array2);
Codul anterior genereaz urm73259;toarea ieire:
Standard sorting
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)

Natural order sorting


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

natcasesort
Are sintaxa:
void natcasesort( array array)
Aceast funcie implementeaz un algoritm case-insenzitiv de sortare care ordoneaz alfanumeric irurile,
aa cum ar proceda un operator uman.

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

prev
Are sintaxa:
mixed prev( array array)
Funcia devanseaz pointer-ul intern cu o poziie i returneaz elementul respectiv. Dac tabloul nu mai
are elemente se returneaz FALSE.

range
Are sintaxa:
array range( int low, int high)
Funcia creaz i returneaz un tablou de ntregi cu valori cuprinse ntre low i high, inclusiv.

reset
Are sintaxa:
mixed reset( array array)

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

rsort
Are sintaxa:
void rsort( array array [, int sort_flags])
Funcia sorteaz un tablou n ordine descresctoare.
Exemplu:
$fruits = array( "lemon", "orange", "banana", "apple");
rsort( $fruits);
reset( $fruits);
while( list($key, $val) = each( $fruits))
{
echo "$key -> $val\n";
}
Codul de mai sus afieaz:
fruits[0] = orange
fruits[1] = lemon
fruits[2] = banana
fruits[3] = apple

sizeof
Are sintaxa:
int sizeof( array array)
Funcia returneaz numrul de elemente dintr-un tablou.

sort
Are sintaxa:
void sort( array array [, int sort_flags])])
Funcia sorteaz elementele unuii tablou n ordine cresctoare.
Exemplu:
$fruits = array( "lemon", "orange", "banana", "apple");
sort( $fruits);
reset( $fruits);
while( list($key, $val) = each( $fruits))
{
echo "$key -> $val\n";
}
Codul de mai sus afieaz:
fruits[3] = apple
fruits[2] = banana
fruits[1] = lemon
fruits[0] = orange
Parametrul sort_flags poate fi utilizat pentru a modifica modul de sortare, fiind disponibile urmtoarele
valori:
SORT_REGULAR
Comparar valorile normal;
SORT_NUMERIC
Comparar valorile numeric;
SORT_STRING
89
Comparar valorile ca iruri de caractere.

III. Functii cu expresii regulate (Perl-Compatible)


Sintaxa pentru pattern-ul folosit n aceste funcii este asemntoare cu cea din functiile Perl. Orice
expresie trebuie delimitat de 2 aceleai caractere, de exemplu slash (/). Ca delimtatori pot fi folosii orice
caracter n afara de cele alfanumerice si backslash (\). Dac caracterul delimitator este folosit n expresie
el trebuie securizat (precedat de backslash).
Dup caracterul delimitator de sfrit pot aprea modiifcatorii care fac potrivirea. Vezi Modificatori
pattern
Exemplu 1. Exemple de pattern valide
/<\/\w+>/
|(\d{3})-\d+|Sm
/^(?i)php[34]/
Exemplu 2. Exemple de pattern invalide
/href='(.*)' - lipsete delimitatorul de sfrit
/\w+\s*\w+/J - modificator necunoscut 'J'
1-\d3-\d3-\d4| - lipsete 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 nlocuiete
preg_split - Desparte un string dup o expresie regulat
preg_quote - Securizeaz caracterele speciale din expresii regulate
preg_grep - Returneaz un tablou cu potrivirile unei expresii regulate
Modificatori pattern - Descrie modificatorii pentru pattern in expresii regulate
Sintaxa pattern - Descrie sintaxa expresiilor regulate Perl-Compatibile

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

90
print "A match was found.";
} else {
print "A match was not found.";
}
Exemplu 2. Caut cuvntul "web"
// sirul \b din pattern indic marginea unui cuvnt, deci ntregul cuvntul
// "web" este cutat, i nu pri din el de exemplu "webbing" sau "cobweb"

if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) {


print "A match was found.";
} else {
print "A match was not found.";
}
if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
Exemplu 3. Afl domeniul dintr-o adres URL
preg_match("/^(.*)([^\.]+\.[^\.]+)(\/.*)?/U",
"http://www.php.net/index.html", $matches);

// afieaz subsirul ce s-a potrivit celui de-al 2-lea subpattern dintre paranteze
echo "domain name is: ".$matches[2]."\n";
Acest exemplu v-a afia:
domain name is: php.net

preg_match_all
(PHP3 >= 3.0.9, PHP4 )
Descriere
int preg_match_all (string pattern, string subject, array matches [, int order])
Caut n subject toate potrivirile pentru expresia regulat din pattern i le pune n matches n ordinea
specificat de utilizator.
Dup ce prima potrivire a fost gsit, urmatoarele cutri ncep de la sfritul ultimei potriviri.
order poate fi:
PREG_PATTERN_ORDER
Va rezulta astfel, $matches[0] este un tablou cu potrivirile pentru ntregul pattern, $matches[1]
este un tablou cu subiruri potrivite primului subpatern dinte paranteze, s.a.m.d.
preg_match_all ("|<[^>]+>(.*)]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n"
Se va afia:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
Deci, $out[0] conine un tablou de string care s-au potrivit ntregului pattern, i $out[1] conine un
tablou cu siruri de caractere aflate ntre taguri.
PREG_SET_ORDER
Va rezulta astfel, $matches[0] este un tablou cu primul set de potriviri, $matches[1] este un tablou
cu al doilea set de potriviri, s.a.m.d.
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
91
$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n"
Se va afia:
<b>example: </b>, example:
<div align=left>this is a test</div>, this is a test
n acest caz, $matches[0] este primul set de potriviri, i $matches[0][0] are irul potrivit ntregului
pattern, $matches[0][1] are irul potrivit primului subpattern .a.m.d. Similar, n $matches[1] sunt
al doilea set de potriviri, etc.
Daca order nu este specificat, implicit este PREG_PATTERN_ORDER.
Returneaz numrul potrivirilor pentru ntregul pattern, sau false dac nu s-a gsit nici o potrivire.
Exemplu 1. Aflarea tuturor nr de telefon dintr-un text.
preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
Exemplu 2. Aflarea tagurilor HTML.
// sirul \\2 este un exemplu de pre-referire. nseamn c
// trebuie s se potriveasc cu al 2-lea set de paranteze din
// expresia regulat, adic ([\w]+) n acest caz.

$html = "<b>bold text</b><a href=howdy.html>click me</a>

preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);

for ($i=0; $i< count($matches[0]); $i++) {


echo "matched: ".$matches[0][$i]."\n";
echo "part 1: ".$matches[1][$i]."\n";
echo "part 2: ".$matches[3][$i]."\n";

echo "part 3: ".$matches[4][$i]."\n\n";


}
Acest exemplu v-a afia:
matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>

matched: <a href=howdy.html>click me</a>


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

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

92
Dac subject este un tablou, atunci cutarea i nlocuirea se fac pe fiecare element din tablou, iar
rezultatul este tot un tablou.
Dac pattern i replacement sunt tablouri, atunci preg_replace() ia o valoare din fiecare tablou i le
folosete pentru a face cutarea i nlocuirea n subject. Dac replacement are mai putine valori dect
pattern, atunci sirul vid este folosit pentru restul valorilor de nlocuire. Dac pattern este un tablou i
replacement este un string, atunci acest string este folosit pentru fiecare pattern. Invers nu ar avea sens.
Modificatorul /e face ca preg_replace() s trateze paramentrul replacement ca un cod PHP dup ce s-a
efectuat nlocuirea. Indicaie: avei grij ca replacement s fie un cod PHP valid, altfel PHP va da eroare
la linia care contine preg_replace().
Exemplu 1. nlocuire valori
$patterns = array ("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/",
"/^\s*{(\w+)}\s*=/");
$replace = array ("\\3/\\4/\\1", "$\\1 =");
print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");
Acest exemplu v-a afia:
$startDate = 5/27/1999
Exemplu 2. Folosirea modificatorului /e
preg_replace ("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
Codul de mai sus va scrie toate tagurile HTML cu litere mari.
Exemplu 3. Converteste HTML n text
// $document va contine un document HTML
// Acest cod va sterge toate tagurile HTML, sectiuni javascript
// si spatii albe. Va converti de asemenea unele
// entitati HTML n caracterul care-l reprezinta.

$search = array ("']*?>.*?'si", // Strip out javascript


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

$replace = array ("",


"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");

$text = preg_replace ($search, $replace, $document);

preg_split
(PHP3 >= 3.0.9, PHP4 )

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

preg_quote
(PHP3 >= 3.0.9, PHP4 )
Descriere
string preg_quote (string str [, string delimiter])
preg_quote pune n faa fiecrui caracter care face parte din sintaxa expresiilor regulate un backslash.
Aceasta este util cnd irul conine caractere speciale
Dac este specificat si parametrul opional delimiter, i acestuia i se va pune un backslash n fa. Este util
pentru a securiza i acest delimitator. Cel mai folosit delimitator este /
Caracterele speciale din expresiile regulate sunt:
. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
Exemplu 1.
$keywords = "$40 for a g3/400";
$keywords = preg_quote ($keywords, "/");
echo $keywords; // returns \$40 for a g3\/400
Exemplu 2. Scrie cu caractere italice un cuvnt dintr-un text
// In acest exemplu, preg_quote($word) este folosit
// pentru ca asteriscurile (*) sa nu fie interpretate
// de expresia regulata.

$textbody = "This book is *very* difficult to find.";


$word = "*very*";
$textbody = preg_replace ("/".preg_quote($word)."/",
"<i>".$word."</i>",
$textbody);

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

94
V. Functii cu expresii regulate (POSIX Extended)
Expresiile regulate sunt folosite pentru prelucrarea irurilor de caractere. Funciile pentru expresii regulate
sunt:
ereg()
ereg_replace()
eregi()
eregi_replace()
split()
spliti()
Toate funciile au ca prim argument o expresie regulat. PHP folosete expresiile regulate n formatul
POSIX extended definit de POSIX 10003.2. Pentru o descriere complet a acestui format vezi paginile
de manual din directorul regex al PHP. Comanda: man /usr/local/src/regex/regex.7
Exemplu 1. Exemple de expresii regulate
ereg ("abc", $string);
/* Returneaza true dac "abc"
este gsit oriunde n $string. */

ereg ("^abc", $string);


/* Returneaza true dac "abc"
este gsit la nceputul irului $string. */

ereg ("abc$", $string);


/* Returneaza true dac "abc"
este gsit la sfritul irului $string. */

eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);


/* Returneaza true dac browser-ul clientului
este Netscape 2, 3 sau MSIE 3. */

ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs);


/* Pune 3 cuvinte separate de spaii
n $regs[1], $regs[2] i $regs[3]. */

$string = ereg_replace ("^", "<BR>", $string);


/* Pune tagul <BR> la nceputul irului $string. */

$string = ereg_replace ("$", "<BR>", $string);


/* Pune tagul <BR> la nceputul sfritul irului $string. */

$string = ereg_replace ("\n", "", $string);


/* terge toate caracterele
de linie nou din $string. */
Cuprins
ereg - Caut o potrivire pentru o expresie regulat
ereg_replace - nlocuiete o expresie regulat
eregi - Caut o potrivire pentru o expresie regulat (case insensitive)
eregi_replace - nlocuiete o expresie regulat (case insensitive)
split - mparte un ir de caractere ntr-un tablou dup o expresie regulat
spliti - mparte un ir de caractere ntr-un tablou dup o expresie regulat (case insensitive)
sql_regcase - Returneaz o expresie regulat pentru o potrivire case insensitive

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

ereg_replace
(PHP3 , PHP4 )
Descriere
string ereg_replace (string pattern, string replacement, string string)
Funcia caut n string potriviri pentru pattern, apoi le nlocuiete cu replacement.
String-ul modificat este returnat. (Dac nu se gsete nici o potrivire este returnat string-ul iniial.)
Dac pattern conine subiruri ntre parenteze, replacement poate conine subiruri de forma \\numr, care
vor fi nlocuite cu textul care se potrivete cu al numr-elea subir dintre paranteze; \\0 va fi ntregul ir.
Pot fi folosite pn la 9 subiruri. Parantezele pot fi imbricate.
Dac nu este gsit nici o potrivire, string este returnat neschimbat.
De exemplu, urmtorul cod afieaz "This is a test" de 3 ori
Exemplu 1. Exemplu ereg_replace()
$string = "This is a test";
echo ereg_replace (" is", " was", $string);
echo ereg_replace ("( )is", "\\1was", $string);
echo ereg_replace ("(( )is)", "\\2was", $string);
Atenie la urmtorul lucru: dac folosii un numr pentru textul de nlocuit, nu vei obine rezultatul dorit.
Aceasta deoarece ereg_replace() va interpreta numrul ca fiind codul unui caracter. De exemplu:
Exemplu 2. Exemplu ereg_replace()
<?php
/* Codul nu va da rezultatul ateptat. */
$num = 4;
$string = "This string has four words.";

96
$string = ereg_replace('four', $num, $string);
echo $string; /* Ieire: 'This string has words.' */

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

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

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

split
(PHP3 , PHP4 )
Descriere
array split (string pattern, string string [, int limit])
Returneaz un tablou de string-uri, avnd ca elemente subiruri ale string rezultate din mprirea string
conform pattern. Dac apare i limit, tabloul va conine maximum limit elemente, ultimul element
coninnd restul rmas din string. Dac apare o eroare, split() va ntoarce false.
Pentru a prelua primele 5 cmpuri dintr-o linie din /etc/passwd:
Example 1. Exemplu Split()
$passwd_list = split (":", $passwd_line, 5);
Pentru a valida o dat calendarisitic, care poate fi delimitat de slash(/), punct(.) sau linie de desprire(-)
Example 2. Exemplu Split()
$date = "04/30/1973"; //Delimitatori pot fi / . -
list ($month, $day, $year) = split ('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br>\n";
Atenie, pattern este case-sensitive.
Dac nu avei nevoie explicit de expresii regulate, folosii unlinked explode(). Este mai rapid.

De asemenea pattern este o expresie regulat. Dac dorii s mprii string dup caractere speciale, va
trebui s le securizai mai nti. Dac funcia split() (sau orice alt funcie regex) se comport ciudat, citii
manualul regex.7, aflat n subdirectorul regex/ unde e instalat PHP. Comanda man
/usr/local/src/regex/regex.7

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

98

You might also like