Professional Documents
Culture Documents
- PENTRU OCUPATIA -
WEB DESIGNER
SUPORT DE CURS
CUPRINS
1. Noiuni introductive
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.
Magazine online
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 personale
Site de prezentare; conine CV, fotografii, date de contact, etc.
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
6.1. Coninut
- 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
6.5. Culori
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:
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
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.
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.
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!
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.
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.
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:
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>
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 . Astfel, pentru a pune trei spatii intre
cuvintele ABC si SRL in textul "ABC SRL" va trebui sa scriem in fisierul HTML astfel:
ABC 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:
Instructiunea de mai jos afiseaza acelasi text cu font arial, culoare albastra si dimensiune mai
mare:
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:
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
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:
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):
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
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:
CELULA 4
<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>
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:
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:
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:
Codul de mai jos va afisa "Apasati aici pentru pagina XYZ SRL", text care prin apasare va
incarca pagina www.xyz.xyz:
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:
Apoi, daca dorim sa incarcam fisierul lucrare.html din alta pagina, dar astfel incat sa se incarce
direct sectiunea 2, vom utiliza:
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):
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>
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:
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:
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:
<BODY BACKGROUND=bkg.gif>
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.
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>
<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>
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.
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
Exemplu:
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:
Exemplu:
<HEAD>
<STYLE >
#id1{font-size:18px ; text-align:center}
</STYLE>
</HEAD>
<BODY>
<h1 id = "id1" >PARAGRAFUL 2 </h1>
</BODY>
<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>PARAGRAFUL 3 </h1>
</BODY>
<STYLE>
.special{ background:Yellow ;color:Red}
</STYLE>
<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.
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:
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.
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"
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".
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>
Pentru a specifica unele caracteristici care privesc fundalul unor elemente se folosesc
proprietatile:
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
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:
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:
BORDER-TOP
BORDER-RIGHT
BORDER-BOTTOM
BORDER-LEFT
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:
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.
Limbajul PHP are deasemenea suport pentru diverse servicii server utiliznd protocoale precum IMAP,
SNMP, NNTP, POP3 i HTTP.
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.
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
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>
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++
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)
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.
\\ 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
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();
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
*/
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.
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.
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:
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
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";
}
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";
}
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);
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];
}
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. */
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');
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;
$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;
}
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.
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
}
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:
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.
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
)
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.
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"
// 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.
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.
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.
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. */
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