php

Upload: zircon-dental-art

Post on 14-Jan-2016

30 views

Category:

Documents


0 download

DESCRIPTION

1

TRANSCRIPT

Introducere(PHP -Hypertext Preprocessor)Limbajul PHP a fost creat in anul 1994 de catre Rasmus Lerdorf, care incerca sa-si personalizeze propria pagina Web; din acest motiv limbajul a fost numit initial PHP adica: Personal Home Page (pagina de baza personala). Ulterior limbajul a fost perfectionat, utilitatea si caracteristicile sale s-au dezvoltat treptat, ajungand sa aiba semnificatia Hypertext Preprprocesor (PHP). Preprocesarea consta in aceea ca datele sunt interpretate(preprocesate) de catre serverul Web inainte ca acesta sa genereze cod HTML.PHP este una dintre cele mai interesante tehnologii pentru site-uri si programare web, imbina caracteristici dintre cele mai complexe cu simplitatea n utilizare. PHP a devenit un instrument de frunte pentru dezvoltarea aplicatiilor Web. Spre deosebire de alte instrumente pentru aplicatii Web, cum este Perl, PHP este un limbaj de programare comod pentru ncepatori, chiar si pentru cei care nu au mai desfasurat activitati de programare.Daca sunteti un cunoscator al limbajului HTML, dar nu aveti experienta n materie de programare, va puteti pune ntrebarea: care sunt functionalitatile suplimentare pe care le poate asigura cunoasterea limbajului PHP? Ca si alte limbaje de scripting pentru Web, PHP va permite sa furnizati un continut Web dinamic, adica un continut Web care se modifica automat de la o zi la alta sau chiar de la un minut la altul. Continutul Web este un element important n sustinerea traficului unui sit Web; de regula, vizitatorii nu vor mai reveni la o pagina Web care contine aceleasi informatii ca si cele prezentate la ultima vizita. Pe de alta parte, siturile Web frecvent actualizate pot atrage cantitati enorme de trafic.Mai mult, spre deosebire de limbajele de scripting, precum JavaScript, PHP ruleaza pe serverul Web, nu n navigatorulul Web. n consecinta, PHP poate obtine accesul la fisiere, baze de date si alte resurse inaccesibile programului JavaScript. Acestea constituie bogate surse de continut dinamic, care atrag vizitatorii. In plus, putem folosi limbajul PHP pentru a generera cod Java Script.Secventele de cod PHP pot fi incluse intr-un fisier HTML; ulterior serverul Web va identifica aceasta secventa de cod , va procesa acesta secventa de cod generand cod HTML iar la final va inlocui secventa de cod PHP cu codul HTML.Printre caracteristicile cele mai importante ale imbajului enumeram: -simplicitate: acest limbaj este simplu de folosit, fiind accesibil si ne-programatorilor. Datorita acestui fapt el a devenit cel mai popular limbaj de script pentru generarea de pagini HTML dinamice. -usor de folosit: limbajul are o sintaxa asemanatoare limbajului C, care este foarte popular in randul programatorilor. De aceea programatorii care au cunostine de C sau Perl vor face foarte rapid trecerea spre PHP. Pe de alta parte anumite aspecte cum ar fi: declararea si folosirea variabilelor este mult simplificata in PHP, spre deosebire de C++ sau alte limbaje de nivel inalt. -eficienta: specificatiile limbajului includ folositea tehnicilor de POO (Programare orientata pe obiecte) iar acest lucru contribuie la marirea productivitatii: un programator PHP poate folosi module scrise de un alt programator fara sa fie nevoit sa cunoasca detalii specifice de implementare a codului. -cross-platform: exista implementari ale limbajului pe mai multe sisteme de operare, cele mai populare fiind cele de pe sistemele Linux si Windows. In acest caz daca scriem cod PHP care ruleaza pe un sistem Linux, ulterior vom putea folosi acest cod pe un server care ruleaza Windows si viceversa. -gratis: PHP reprezinta un program Open Source, oricine poate folosi acest limbaj fara a fi nevoit sa plateasca ceva. De asemenea utilizatorii au access la sursele PHP (scrise in limbajul C). Site-ul oficial al limbajului PHP se afla la :www.php.net, datorita popularitatii acestui limbaj exista numeroase site-uri Web care prezinta informatii despre PHP, exemple de cod, forum de discutii , etc.Acest curs de initiere in PHP si MySQL este menit a prezenta elemente introductive de programare si dezvoltare a paginilor web folosind PHP. Este important sa retineti ca nu reprezinta decat un punct de plecare cu lectii si tutoriale php introductive. Dezvoltarea Web este o activitate solicitanta, iar viitorul dezvoltator Web trebuie sa dispuna de multe abilitati, printre care si pe aceea de programator. Dezvoltatorii Web ncepatori vor gasi n aceast curs un prim pas util si amical n activitatea de programare n PHP.

Scrierea scripturilor PHP elementare Invatati sa creati un script PHP cu cele mai simple instructiuni PHP Invatati sa documentati si sa executati un script PHPUn script PHP poate fi foarte simplu sau foarte complex. Totusi, scrierea chiar si a unui script PHP complex este relativ simpla, necesitand doar un editor de texte obisnuit. In aceasta lectie veti invata modul de creare si de executare a programelor PHP, veti invata sa creati scripturi PHP simple, care afiseaza in navigatorul web un text simplu. De asemenea, veti invata sa va documentati scripturile, astfel incat dumneavoastra si alte persoane sa puteti intelege rapid scopul si structura acestora.Mai intai trebuie sa instalati un server web (Apache) si modulul pt. limbajul PHP, acestea sunt gratuite, le puteti gasi pe net si instala pe fiecare, dar pentru incepatori e recomandat un program care le are deja configurate (si cu MySQL), precum WampServer, sau sa incarcati scriptul pe un server web unde este instalat PHP.Daca nu aveti deja instalat PHP, descarcati de aici ->WampServer, dezarhivati si instalati programul. (cand este pornit, veti observa o iconita specifica in colltul cu ceasul).Fisierele .php in care veti scrie scripturile trebuie sa le salvati in directorulwwwdin "wamp", apoi, ca sa le testati scrieti in browser adresahttp://localhost/fisier.php1. Scrierea scripturilor PHPPentru a crea scripturi PHP, majoritatea programatorilor PHP folosesc un editor de texte obisnuit. Puteti folosi orice editor de texte doriti. Sub Microsoft Windows puteti utiliza programul Windows Notepad. Daca preferati, puteti folosi editoare specializate, gen Notepad++. Totusi, trebuie sa tineti cont sa fie un editor de text ce salveaza fisierele cu format text obisnuit simplu.Daca folositi UNIX sau Linux, puteti crea scripturi PHP folosind un program precum "vi", "emacs" sau "pico".Programul in sine nu conteaza, atata vreme cat poate crea fisiere text ASCII.Nota :- Unele editoare de texte, precum "Notepad++" sau "vi", asigura un suport special pentru scrierea programelor PHP. De exemplu, au o caracteristica de colorare a elementelor de sintaxa ce determina scrierea diferitelor elemente ale codului PHP in culori diferite. Procedeul de colorare a elementelor de sintaxa faciliteaza depistarea erorilor din programele proprii.2. Scrierea scheletului programelor PHPFiecare program PHP include doua linii speciale, care indica serverului PHP ca textul cuprins intre cele doua linii este alcatuit din instructiuni PHP. Practic, aceste linii pot fi asimilate copertelor unei carti, care pastreaza unitatea programului dumneavoastra PHP. Intre aceste doua linii vor fi scrise instructiunile PHP. Pentru a incepe sa scrieti un program PHP, deschideti editorul dumneavoastra de texte si introduceti urmatoarele doua linii :

-Acesta este un cod de inceput si nu afiseaza nimic.Apoi, salvati scriptul dumneavoastra sub forma de fisier text, in directorul "www" din "wamp", cu un nume care respecta urmatoarele reguli: Este recomandat ca numele fisierului sa fie alcatuit numai din caractere minuscule, cifre si liniute. Utilizarea de spatii, majuscule si alte caractere ar putea crea probleme pe sisteme de operare diferite. Extensia numelui fisierelor trebuie sa fie.php. Asigurati-va ca ati ales un nume semnificativ, care sa descrie functia scriptului dumneavoastra, astfel incat sa-l puteti identifica rapid dupa saptamani sau chiar luni de la crearea acestuia. Veti descoperi ca liniutele sunt utile pentru separarea cuvintelor care alcatuiesc numele fisierului, marind astfel lizibilitatea acestuia. De exemplu, un fisier care contine un script PHP ce va permite sa vizualizati salariile angajatilor poate primi numele "saarii-angajati.php". Chiar si la mult timp dupa crearea fisierului respectiv, nu veti avea probleme in a determina scopul acestuia.3. Afisarea datelor de iesire intr-un browser WebProgramele PHP executa trei categorii de operatii elementare: Obtin date de la un utilizator. Executa prelucrari ale datelor, respectiv obtine accesul la datele stocate in fisiere si baze de date si le manipuleaza. Afiseaza date astfel incat un utilizator sa le poata vizualiza.Primele doua operatii sunt oarecum mai dificil de realizat decat cea de-a treia. Totusi, afisarea datelor astfel incat acestea sa fie vizibile utilizatorului este o operatie foarte simpla. Asa cum paragrafele unui text scris sunt compuse din propozitii, programele PHP sunt alcatuite din instructiuni. Regulile care controleaza formarea propozitiilor se numesc sintaxa. Acelasi termen este folosit si pentru a desemna regulile care guverneaza formarea instructiunilor PHP.Iata un exemplu pentru crearea instructiunii PHP care trimite date de iesire la un browser Web, astfel incat acestea sa fie vizibile pentru un utilizator:

Observati ca instructiunea incepe cu un cavant "echo" si se incheie cu un caracter punct si virgula (;).Constructiaechotrimite datele de iesire care vor fi afisate de browser.Ghilimelele duble se folosesc pentru delimitarea unei expresii de tip text, in cazul nostru "scrieti aici un text oarecare" (se pot folosi si ghilimele simple).In locul propozitiei "scrieti aici un text oarecare" puteti plasa aproape orice text, cu exceptia altor ghilimele. Totusi, pentru moment, trebuie sa includeti numai litere, cifre, spatii si semne de punctuatie folosite in alfabetul latin, precum virgula, caracterul punct si virgula, punctul, semnul de intrebare si semnul exclamarii. De asemenea, puteti include caracterele < >, folosite pentru delimitarea etichetelor HTML, respectiv caracterul /, folosit pentru a indica membrul de inchidere al unei perechi de etichete HTML.De exemplu, iata o instructiune PHP care are drept date de iesire un fragment dintr-un vers din Scrisoarea a III-a de Eminescu:

- Ca sa vedeti rezultatul, salvati fisierul cu acest cod in directorulwwwdin "wamp", de exemplu cu denumireateste.phpsi apelati in browser adresahttp://localhost/teste.php(programul WampServer trebuie sa fie pornit).Perechea de etichete H2 determina formatarea datelor de iesire ca titlu HTML de nivel 2.

Scripturile PHP pot fi incluse si in fisiere cu cod HTML, ca in urmatorul exemplu (dar salvate cu extensia ".php"):Test PHP

In browser va aparea :Exemplu de script PHP inclus in HTMLPot fi incluse si scripturi mai complicate ce contin zeci sau chiar sute de linii, atata timp cat acestea sunt incluse intre cele doua linii specifice limbajului PHP: 4. Documentarea unui script PHPIn afara de a furniza nume descriptive fisierelor ce contin scripturile dumneavoastra PHP, e necesar sa includeti in interiorul fiecarui script atat comentarii care sa permita unui cititor sa determine cu usurinta utilitatea scriptului, cat si alte informatii referitoare la script. De exemplu, puteti include un comentariu care precizeaza numele autorului scriptului si ce face acesta.Iata un model sintactic pentru comentariile PHP:// Scrieti aici comentariul dumneavoastra (pe o singura linie)Dupa cum se poate vedea, un comentariu incepe cu doua caractere slash, urmate de un spatiu. n continuare, linia contine comentariul dumneavoastra, care poate include orice caractere doriti, inclusiv caractere speciale.Iata un exemplu simplu de script PHP care include comentarii:

Nota:Fiecare linie a comentariului trebuie sa inceapa cu doua caractere slash //. Totusi, puteti crea un comentariu din mai multe linii si in alte moduri. Iata un exemplu:/*Acesta este un comentariu pe mai multe linii.Poate fi alcatuit dintr-un numar oricat de mare de linii.*/Pentru a adauga un comentariu alcatuit din mai multe linii, scrieti la inceput caracterele/*, iar la sfarsit trebuie sa se incheie cu caracterele*/. Intre cele doua perechi de caractere, puteti scrie orice text doriti, folosind oricate linii doriti.5. Executarea unui script PHPDupa ce ati creat un script PHP, veti dori sa-l executati.Sa luam un alt exemplu, ce contine cod HTML si comentarii:Deschideti editorul dumneavoastra de texte si introduceti urmatoarele linii :Test PHP

Salvati fisierul cu numeletest-script.phpDaca ati instalat un server de PHP pe calculatorul dumneavoastra, salvati fisierul in directorulwwwal serverului.Deschideti browserul si scrieti adresa URLhttp://localhost/test-script.phpDaca nu aveti instalat un server de PHP pe calculator, incarcati (prin FTP) fisierultest-script.phppe un server pe web unde este instalat PHP.Dupa ce v-ati incarcat fisierul cu scriptul, sunteti pregatit pentru a obtine accesul la acesta. Deschideti browserul Web si apelati adresa URL asociata scriptului dumneavoastra. Adresa URL trebuie sa fie alcatuita din adresa URL identificata de administratorul serverului unde ati incarcat scriptul, urmata de un slash (/), urmata de numele fisierului care contine scriptul dumneavoastra. Daca adresa URL se incheie deja cu un caracter slash, nu trebuie sa mai inserati inca un asemenea caracter inainte de numele scriptului dumneavoastra.De exemplu, daca domeniul serverului unde ati incarcat scriptul ehttp://www.marplo.net/ca adresa URL a catalogului care contine scripturile dumneavoastra PHP, puteti obtine accesul la scriptul dumneavoastra prin intermediul adresei URLhttp://www.marplo.net/test-script.phpDaca ati tastat corect adresa URL a scriptului dumneavoastra, iar scriptul respectiv nu contine erori, veti vedea datele de iesire ale scriptului dumneavoastra. Felicitari! Ati devenit programator PHP!

Tipuri de siruri si variabile nvatati tipul variabilelor in PHP nvatati sa folositi ghilimele si caractere escape pentru a specifica valori de tip sir specialeNumere si siruri, tipul variabilelorProgramele de calculator manipuleaza datele, care reprezinta informatii. Programele PHP folosesc doua categorii principale de date: numere si siruri. Numerele sunt compuse mai ales din cifre, n timp ce un sir poate contine orice caracter, inclusiv cifre, litere si simboluri speciale.Decizia privind modul de stocare a datelor este importanta, n mod caracteristic, datele se stocheaza sub forma de numere atunci cnd se doreste executarea unor operatii matematice asupra datelor, deoarece numerele sunt stocate ntr-un mod care permite efectuarea de calcule. Pe de alta parte, sirurile sunt stocate folosind o modalitate care faciliteaza ntelegerea lor de catre operatorul uman. Datele trebuie stocate sub forma de siruri daca formatul acestora nu este numeric sau daca doriti ca operatorul uman sa fie capabil de a introduce sau de a vizualiza datele. Practic, puteti asimila numerele cu un mod de stocare a datelor n interiorul calculatorului. Sirurile se pot asimila unui mod de stocare a datelor n afara calculatorului.

Aceste doua mari categorii de date: numere si siruri, formeaza opt tipuri principale de variabile : - Boolean - Integer - Float - String - Array - Object - Resource - NullIn mod normal tipul variabilelor nu este specificat explicit; acesta va fi evaluat de catre interpretorul PHP la momentul run-time (in momentul executarii scriptului).

1. Tipul booleanVariabilelele de tipul boolean pot lua doar doua valori : FALSE sau TRUEVariabilele de alt tip decat boolean pot fi convertite la tipul boolean prin operatorul cast(bool)sau(boolean), plasate inaintea valorilor, desi in general nu e nevoie de aceasta converrire, valoarea fiind automat recunoscuta de PHP.

. Tipul integerPHP foloseste doua categorii de numere: ntregi (tipul integer) si duble, cu virgula (tipul float)Variabilele integer reprezinta numerele intregi, ele pot fi specificate in format zecimal, hexazecimal sau octal.Numerele ntregi reprezinta numerele fara parte fractionara folosite la numarare, plus zero si numerele negative. Cu alte cuvinte, n PHP termenul de ntreg are aceeasi semnificatie ca si n matematica. De exemplu, numarul 100 poate fi reprezentat n PHP sub forma de ntreg.Scrierea numerelor PHP este simpla. Un ntreg PHP se obtine prin scrierea cifrelor care i alcatuiesc valoarea. Daca valoarea este negativa, scrieti un semn minus imediat la stnga numarului. Evitati sa scrieti spatii sau virgule ca parte a unui ntreg PHP.Iata cteva exemple de numere PHP ntregi : 215678 - Numar in reprezentare zecimala 0x1A8; - Numar in reprezentare hexazecimala (reprezinta: 1*16*16 + 10*16 + 8 = 424 (in zecimal)) 067 - Reprezinta: 6*8 + 7 = 55 (in zecimal)

Valorile minime, respectiv maxime pe care le poate lua o variabila de tip integer depind de sistemul de operare pe care ruleaza modulul PHP. De exemplu pentru un sistem Windows valoarea unui integer se memoreaza pe 32 de biti: 31 bit pentru numar si un bit pentru semn. In acest caz valorile unui intreg se afla in intervalul :-231repectiv: 231. Daca incercam sa folosim un integer cu valori care ies din acest inteval vor avea de-a face cu un fenomen de depasire :integer overflow. In acest caz interpretorul PHP converteste acesta valoare intr-o valoare de tip float (care are un interval mai extins de valori).In PHP simpla impartire a doua valori intregi va produce ca rezultat o variabila de tip float. Pentru a obtine doar partea intreaga acestui rezultat putem folosi operatorul cast(int)in fata rezultatului. Ex.:echo (int)8.7; (va returna 8)Pentru a rotunji rezultatul la intregul cel mai apropiat de valoarea reala se poate folosi functiaround(), unde intre paranteze se adauga valoarea. Ex.:echo round(8.7); (va returna 9)

3. Tipul floatReprezinta variabile de tip real [numerele cu virgula], (n lb. engleza se foloseste punctul zecimal n loc de virgula). De exemplu2.5In general, numerele duble (tipul float) sunt stocate folosindu-se formatul standard IEEE-64, care furnizeaza 64 de biti. Acest format va permite sa stocati valori care pot merge pna la 1,8 x 10 la puterea 308 sub forma de numere duble si furnizeaza aproximativ 14 cifre dupa punctul zecimal (sau cifre semnificative) de precizie.Iata cteva exemple de numere duble (tipul float) 123.4567 - Numar de tip float 1.2e3; - Reprezinta: 1.2 * 103

4. Tipul stringReprezinta o insiruire de caractere, fiecare caracter este memorat pe 1 byte; setul de caractere este limitat la 256 valori distincte. Dimensiunea sirurilor poate fi oricat de mare in PHP, nu exista specificatii care sa limiteze numarul maxim de caractere dintr-un sir.Spre deosebire de ntregi si de numere float, care contin cifre, sirurile pot contine orice caracter. Ca atare, sirurile sunt utile pentru stocarea datelor care nu pot fi calculate, precum nume, fraze si adrese.

In PHP, un sir poate fi declarat in mai multe feluri:

1)Un mod simplu de a declara un sir este prin delimitarea cu ghilimele simple (' ')

Daca dorim ca sirul sa contina caracterul ' va trebui sa inseram inaintea lui caracterul escape \. Daca dorim ca sirul sa contina caracterul \ va trebui sa dublam acest caracter. Acest comportament este exemplificat in exemplul urmator:

In browser va aparea:Curs 'PHP'Vrei sa stergi C:\*.* ?Variabila var1=$var1Variabila var1=Acesta este un sir de testObservati diferenta dintre ultimile doua linii!In penultima linie, unde s-a folosit gilimele simple pentru delimitarea sirului, variabila $var1 nu este expandata adica nu este afisat valoarea variabileivar1=Acesta este un sir de testci exact textul scris (numele ei). Pentru a realiza afisarea valorii variabilei si nu numele acesteia, se folosesc ghilimelele duble, precum in ultima linie a exemplului de mai sus.

2)O alta metoda pentru a specifica un sir n PHP este prin folosirea ghiimelelor duble (" ").

Daca intr-un sir delimitat prin ghilimele duble vrem ca acesta sa afiseze numele unei variabile, nu valoarea acesteia, adaugam un caracter backslash (\) inaintea numelui variabiei.Exemplu;echo "Numele variabilei este \$var";Acest cod va afisaNumele variabilei este $var, oricare ar fi valoarea variabilei "$var".

Caracterele care alcatuiesc sirul sunt incluse ntre ghilimele duble (" ");De exemplu, sirul reprezentnd numele fizicianului care a formulat teoria relativitatii este"Albert Einstein". Asa cum s-a explicat, un sir poate contine date numerice; de exemplu,"3.14159".Daca se doreste adaugarea de ghilimele duble intr-un sir delimitat de ghilimele duble, se adauga caracterul \ in fata acestora.Exemplu;echo "Numele programului este \"PHP\".";Prin delimitarea cu ghilimele duble PHP faciliteaza includerea n siruri a unor caractere speciale, precum caracterele de salt la linie noua sau retur de car, prin furnizarea de secvente escape care reprezinta caractere speciale.Iata secventele escape folosite n PHP: \n- salt la linie noua \r- retur de car (rand nou) \t- caracter de tabulare pe orizontala \\- backslash \$- simbolul dolarului \"- ghilimele dubleCa exemplu, iata un sir care include un retur de car, urmat de un salt la linie noua:"Salut, lume!\r\n".Retineti ca fiecare secventa escape ncepe cu un backslash (\). Pentru a include un backslash ntr-un sir, trebuie sa folositi doua caractere backslash.Pe langa imbricarea variabilelor in cadrul sirurilor delimitate prin ghilimele duble, PHP pune la dispozitie operatorul de concatenare a sirurilor: . (punct) . Acest operator adauga un sir la sfarsitul altui sir. De exemplu:

In browser va aparea:Numele de familie este Popescu iar prenumele este CostelIn anumite situatii este necesar sa accesam unul dintre caracterele unui sir. Pentru aceasta putem folosi parantezele{} ca in exemplul de mai jos:

Rezultatul afisat va fiAe

3)Sintaxa heredoc este o alta modalitate de a delimita siruri

In acest caz delimitatorul este ("Scriem urmatorul cod HTML intr-un alt fisier "form.html", pe care-l salvam in acelasi director cu scriptul PHP de mai sus.

Test-Form

Nume:
Email:
Parola:

In browser va aparea:Top of Form

Nume:Email:Parola:

Bottom of FormCompletam datele din formular, de exemplu: la Nume :Popescu, la Email :[email protected] Parola :parola_meaDupa ce am competat datele, apasam clic pe butonul "Trimite datele", acestea vor fi trimise la scriptul PHP "test-form.php", care le va prelucra si va afisa urmatorul rezultat:Nume = PopescuE-mail = [email protected] = parola_meaSa intelegem exemplu de mai sus.Folosind formularul de mai sus, atributul NAME din fiecare eticheta INPUT atribuie fiecarei casete cu text un nume, astfel scriptul PHP va putea recunoaste datele scrise in casete. In scriptul "test-form".php" vom accesa variabilele: $nume va primi informatia introdusa in campulNume $email va primi informatia introdusa in campulEmail $parola va primi informatia introdusa in campulParolaDeoarece cunoastem metoda prin care trimitem datele catre scriptul PHP, "POST", am folosit variabila PHP globala _POST pentru a prelua datele din formular: $_POST['nume'] $_POST['email'] $_POST['parola']Constructiaechotrimite datele de iesire care vor fi afisate de browserVariabile PHP globale: _GET si _POST reprezinta de fapt variabile de tip array, fiecare element se poate accesa prin cheia sa; in cazul nostru cheia fiecarui element este data de atributul : NAME al casetelor din formular5. Trimiterea de date unui script prin adresa URLIn afara de a expedia unui script datele printr-un formular, puteti expedia date cu ajutorul adresei URL a paginii. Pentru aceasta, atasati la sfarsitul adresei URL un semn al ntrebarii (?) si apoi includeti o serie de perechi "nume-valoare" (separate prin &), ca in exemplu urmator: http://www.marplo.net/fisier.php?nume1=valoare1&nume2=valoare2Exemplul include numai doua perechi "nume-valoare"; cu toate acestea, puteti include oricte asemenea perechi doriti (separate prin caracterul&), in functie de limita impusa de browser.Pentru a prelua si folosi datele dintr-o astfel de adresa URL, folositi in interiorul scriptului PHP expresia "$_GET['nume'], ca in exemplu urmator" $var1 = $_GET['nume1'] $var2 = $_GET['nume2']Unde "nume1" si "nume2" sunt numele variabilelor din adresa URL, iar "$var1" si "$var2" sunt variabilele care vor fi folosite in scriptul PHP (din "fisier.php") si a caror valori vor fi "valoare1" respectiv "valoare2" continute in adresa URL.

Daca doriti sa trimiteti unui script, prin intermediul adresei sale URL, caractere speciale precum un semn al intrebarii, un semn egal sau un ampersand, se poate crea confuzie.Pentru a functiona corect, un sir trebuie sa fie codificat URL. Pentru a codifica URL un sir, caracterele speciale se nlocuiesc cu echivalentele lor hexazecimale, precedate de un simbol procent (%). Pentru alte detalii, consultati lectia despreUtilizarea caracterelor speciale, subtitlul 4 (Conversia adreselor URL).De exemplu, forma codificata URL a sirului "la multi ani!" este%22la multi ani%21%22.Adresa URL rezultanta se numeste "sir de interogare" si nu poate contine spatii. Daca doriti sa trimiteti un spatiu ca parte a unui sir de interogare, trimiteti n locul spatiului un semn plus (+). Iata un exemplu de sir de interogare care codifica numele autorului acestui site: http://www.marplo.net/script.php?autor=Mar+PloUnele dintre cele mai comune caractere speciale si echivalentele lor codificate URL sunt prezentate n tabelul de mai jos:Caracter specialEchivalentul codificat URL

.*%2e

>%3e

^%5e

~%7e

+%2b

,%2c

/%2f

:%3a

;%3b

%3c

=%3d

>%3e

[%5b

\%5c

]%5d

_%5f

{%7b

|%7c

}%7dc

tab%09

spatiu%20

!%21

%22

#%23

$%24

%%25

&%26

`%27

(%28

)%29

@%40

`%60

Variabile de mediu si erori In aceasta lectie invatati sa obtineti accesul la valorile variabilelor de mediu. Invatati despre depanarea si tratarea erorilor.1. Obtinerea si utilizarea datelor de la o variabila de mediuVariabilele de mediu sunt folosite pentru stocarea optiunilor si a parametrilor care personalizeaza mediul de aplicatie. Aplicatiile pot obtine accesul la valorile variabilelor de mediu si in functie de acestea si pot ajusta comportamentul.De exemplu, calea de cautare a programelor MS-DOS este stocata ntr-o variabila de mediu denumita PATH. In general, comenzile sistemelor de operare sunt folosite pentru a configura variabilele de mediu si pentru a stabili valorile acestora. Cu toate acestea, unele aplicatii manipuleaza valorile variabilelor de mediu.Att serverul Web Apache, ct si serverul de aplicatie PHP folosesc variabile de mediu pentru a prezenta informatii de stare. Unele dintre cele mai importante variabile de mediu folosite de Apache si PHP sunt rezumate n tabelul de mai jos. Numeroase servere Web, altele dect Apache, furnizeaza o parte din aceste variabile de mediu sau chiar pe toate.Multe dintre aceste variabile reflecta caracteristicile cererii HTTP care a solicitat executia PHP. Puteti vizualiza toate variabilele de mediu disponibile pentru programele PHP prin invocarea functiei phpinfo() si vizualizarea datelor de iesire generate de aceasta.Vizualizarea datelor unei variabile de mediu se poate face folosind variabila$_SERVERsi o cheie (intre paranteze patrate) ce repreinta numele variabilei de mediu. De exemplu, pt. afisarea domeniului serverului unde ruleaza scriptul echo $_SERVER['SERVER_NAME'];

Variabila de mediuDescriere

CONTENT_LENGTH- Lungimea, n octeti, a corpului cererii.

CONTENT_TYPE- Tipul MIME al datelor din corpul cererii.

DOCUMENT_ROOT- Calea care constituie radacina arborelui catalogului cu documente al serverului Web.

GATEWAY_INTERFACE- Returneaza ersiunea protocolului CGI (Common Gateway Interface) folosit de serverul Web.

HTTP_ACCEPT- Continutul antetului HTTPAccept.

HTTP_ACCEPT_CHARSET- Continutul antetului HTTP Accept-Charset:, care specifica seturile de caractere ntelese de client.

HTTP_ACCEPT_ENCODING- Continutul antetului HTTP Accept-Encoding:, care specifica tipurile de continuturi ntelese de client.

HTTP_ACCEPT_LANGUAGE- Continutul antetului HTTP Accept-Language:, care specifica limbajele preferate de client.

HTTP_CONNECTION- Continutul antetului HTTP Connection:, care indica optiunile solicitate de client.

HTTP_HOST- Continutul antetului HTTP Host:, care indica numele de gazda, folosit de client la prezentarea cererii.

HTTP_REFERER- Adresa URL a paginii Web care a trimis clientul la pagina curenta.

HTTP_USER_AGENT- Continutul antetului HTTP user-Agent, care indica tipul si versiunea browser-ului folosit.

PATH- Calea de executie asociata cu mediul serverului.

QUERY_STRING- Sirul de interogare, daca exista, prin care a fost accesata pagina.

REMOTE_ADDR- Adresa IP a clientului (vizitatorului).

REMOTE_HOST- Numele de gazda al clientului.

REMOTE_PORT- Adresa portului clientului de unde a pornit cererea.

REQUEST_METHOD- Metoda de cerere HTTP folosita; de exemplu, GET, POST, PUT sau HEAD.

REQUEST_URI- URI folosit pentru accesul la pagina curenta. URI este alcatuit dintr-un URL si un sir optional de interogare.

SCRIPT_FILENAME- Numele de cale absolut al scriptului curent.

SCRIPT_NAME- Adresa URL a scriptului curent.

SERVER_ADMIN- Adresa de e-mail a administratorului serverului Web.

SERVER_HOST- Numele de gazda asociat serverului Web care prelucreaza cererea.

SERVER_PORT- Portul folosit de serverul Web pentru comunicatii.

SERVER_PROTOCOL- Numele si versiunea protocolului prin intermediul caruia s-a executat cererea.

SERVER_SIGNATURE- Sirul care identifica versiunea serverului Web si numele de gazda folosit pentru prelucrarea cererii.

SERVER_SOFTWARE- Sirul care identifica programul server Web si versiunea acestuia.

- O lista completa a acestor variabile de mediu o gasiti la pagina oficiala$_SERVER

Puteti obtine accesul la variabila de mediu folosind variabila$_SERVERcare este de fapt unArrayin care cheile elementelor sunt numele variabilelor de mediuDe exemplu, urmatoarea instructiune echo trimite browserului adresa IP a clientului (vizitatorului):

Afisarea sau nu a acestor variabile globale depinde de permisiunile facute la configurarea serverului PHP si de datele transmise.2. Depanarea unui scriptUneori, n locul datelor de iesire ale scriptului dumneavoastra, puteti vedea unul din urmatoarele: Textul scriptului, n loc de datele de iesire ale acestuia O caseta de dialog, prin care sunteti ntrebat daca doriti sa descarcati fisierul care contine scriptul Un mesaj n care se spune ca scriptul nu exista Un mesaj n care se spune ca browserul dumneavoastra Web nu are permisiunea de a obtine accesul la script Un mesaj n care se spune ca scriptul dumneavoastra contine o eroareLa vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar daca scriptul n sine este corect.- Daca vedeti textul scriptului dumneavoastra sau o caseta de dialog prin care sunteti ntrebat daca doriti sa descarcati fisierul care contine scriptul, este posibil ca extensia fisierului script sa fie incorecta sau ca serverul PHP sa nu functioneze. Desi fisierele script PHP trebuie sa aiba, n general, extensia .php, este posibil (dar mai rar) ca un administrator de sistem sa configureze un server PHP astfel nct acesta sa impuna o alta extensie de fisier. Astfel, daca scriptul dumneavoastra esueaza din unul dintre aceste doua motive, luati legatura cu administratorul dumneavoastra de sistem.- Daca vedeti un mesaj n care se spune ca scriptul nu exista, este posibil ca dumneavoastra sa fi tastat incorect adresa URL. Verificati daca ati tastat corect adresa URL identificata de administratorul dumneavoastra de sistem, precum si daca ati atasat corect la aceasta numele fisierului care contine scriptul, folosind un slash numai daca adresa URL identificata de administratorul dumneavoastra de sistem nu se ncheie cu acest caracter.- Daca vedeti un mesaj n care se arata ca browserul dumneavoastra Web nu are permisiunea de a obtine accesul la script, poate ca este necesar sa modificati permisiunile fisierului script. Pentru a afla cum trebuie procedat, consultati-va cu administratorul de sistem.- Daca vedeti un mesaj n care se spune ca scriptul dumneavoastra contine o eroare, verificati daca nu a aparut vreuna din urmatoarele probleme: O eroare de tastare, cum ar fi scrierea gresita a cuvntului echo O eroare de punctuatie, cum ar fi paranteze, ghilimele sau punct si virgula, lipsa sau inserate gresit Neincluderea sau includerea eronata a liniilor de delimitare a scriptului, n speta Un marcaj de comentariu ( / / ) care lipseste sau care a fost introdus gresitDe exemplu, iata un script care contine un tip de eroare frecvent ntlnit. Puteti identifica eroarea?

- Variabila "$matrice" contine un Array cu mai multe elemente cu siruri.- In variabila $filtru e preluat rezultatul functiei "preg_grep()" a carei prim parametru este un sablon de expresie regulata (adaugata intre ghilimele duble), iar al doilea este matricea in care e cautat sablonul.- Cu functia "print_r()" se va afisa elementele matricei obtinute in variabila "$filtru". Rezultatul afisat e urmatorul:Array ( [0]=>123casa [1]=>abc masa [4]=>123abc casa )

- Un ultim exemplu util, folosim functiapreg_replace()si o expresie regulata pentru a elimina caracterelor speciale dintr-un sir

In acest exemplu avem un sir (stocat in variabila $sir) ce contine diferite caractere mai putin uzuale.Functia "preg_replace", impreuna cu expresia regulata "/(^ A-Za-z0-9_]+)/", pastreaza in $sir numai literele, cifrele, caracterul '_' si spatiu.Instructiunea "echo" va afisa urmatorul rezultat:Sir ce continea caractere speciale in context

Utilizarea variabilelor cookie nvatati care este modul de functionare a variabilelor cookie nvatati sa creati, sa obtineti accesul la variabilele cookie si sa le stergeti nvatati sa specificati optiunile dintr-o variabila cookie1. Accesul la variabilele cookieValorile majoritatii variabilelor dispar atunci cnd scriptul PHP care le contine si ncheie executia. Spre deosebire de acestea, valorile variabilelor cookie se pot pastra un timp indefinit. Pentru ca valorile lor sa se poata pastra, browserul utilizatorului stocheaza variabilele cookie n unitatea de hard-disc a utilizatorului.Majoritatea navigatoarelor de Web au posibilitatea sa activeze/dezactiveze cookie-urile. Trebuie sa tineti cont de acest lucru cand doriti sa folositi cookie in scripturile dv., totusi, comform statisticilor, in jur de 1% dintre utilizatori au optiunea cookie dezactivata.PHP pune la dispozitia utilizatorilor functii pentru transmiterea cookie-urilor de la server la browser, si modalitati de citire a cookie-urilor.Pentru a citi cooki-urile puteti utiliza variabila PHP de tip tablou$_COOKIEsau$_HTTP_COOKIE_VARS, acestea contin numele si valoarea fiecarei variabile cookie curenta. Daca doriti sa obtineti acces la acest tablou, puteti folosi un program ca urmatorul: Foreach($_COOKIE as $nume => $valoare)echo "
$nume => $valoare";-$_COOKIE['numeCookie']este o variabila super-globala, putand fi accesata si in functii fara a mai specifica "global".2. Crearea unei variabile cookieUn lucru important de retinut este faptul ca cookie-urile trebuie sa fie transmise la browser inaintea oricarei alte informatii.Pentru a evita problemele, asigurati-va ca un script PHP care stabileste o valoare a unei variabile cookie este plasat n partea superioara a fisierului, fara caractere de tip spatiu alb care sa-l preceada. De asemenea, stabiliti valoarea variabilei cookie nainte de a executa o instructiune 'echo' sau o alta instructiune PHP care trimite browserului date de iesire.Pentru a crea o variabila cookie, folositi functiasetcookie(), care are urmatoarea forma: setcookie(numeCookie, valoare, expirare)- Argumentul 'numeCookie' specifica numele variabilei cookie, iar argumentul 'valoare' specifica valoarea variabilei.-Valoarea variabilei cookie este automat transmisa "urlencode" si cand este primita e automat decodata.- Argumentul 'expirare' indica momentul expirarii variabilei cookie; dupa ora specificata, variabila cookie nu mai este accesibila.n general, este convenabil sa se specifice momentul expirarii folosind functiatime(), care returneaza intervalul de timp (exprimat n secunde) scurs de la 1 ianuarie 1970. Puteti adauga o valoare de tip decalaj (offset), care specifica intervalul de timp pe durata caruia variabila cookie trebuie sa fie accesibila.Folosind aceasta functie se pot transmite mai multe cookie-uri succesiv; protocoalele Web limiteaza insa la maximum 20 numarul cookie-urilor ce pot fi trimise aceluiasi utilizator.De exemplu, sa luam n considerare urmatoarea instructiune: setcookie("fruct", "banana", time()+3600);Aceasta instructiune creeaza o variabila cookie denumita 'fruct', care are valoarea 'banana'. Variabila cookie va fi disponibila timp de o ora (3600 secunde) de la crearea sa.Daca preferati, puteti specifica momentul expirarii folosind functiamktime(). Aceasta functie are urmatoarea forma: mktime(ore, minute, secunde, luna, zi, an)De exemplu, urmatoarea instructiune creeaza o variabila cookie care expira la o secunda dupa miezul noptii primei zile a anului 2009: Setcookie("fruct", "banana", mktime(0, 0, 1, 1, 1, 2009));3. Stergerea unei variabile cookieDeoarece o variabila cookie are o data de expirare, aceasta va fi stearsa automat la un oarecare interval de timp dupa crearea sa. Totusi, puteti sterge o variabila cookie imediat. Pentru aceasta, fixati momentul expirarii variabilei cookie la un moment de timp in trecut.De exemplu, pentru a sterge o variabila cookie denumita 'fruct', puteti folosi urmatoarea instructiune: setcookie("fruct", "", time()-3600);Aceasta instructiune stabileste timpul de expirare cu o ora (3600 de secunde) n urma.Remarcati ca valoarea variabilei cookie este exprimata sub forma unui sir vid (""); din moment ce variabila cookie nu va mai fi disponibila, valoarea sa nu mai are importanta.4. Specificarea accesului la o variabila cookie si alte optiuniFunctiasetcookie()poate prelua maximum sase argumente.Iata formatul complet al functieisetcookie(): setcookie(nume, valoare, expirare, cale, domeniu, secure)Argumentele 'nume', 'valoare' si 'expirare' au fost descrise n sectiunea precedenta.- Argumentul 'cale' va permite sa specificati calea URL asociata variabilei cookie. n mod prestabilit, variabila cookie este disponibila pentru scripturile din catalogul care contine scriptul n care a fost configurata variabila respectiva, precum si pentrul scripturile din sub-cataloagele aferente catalogului respectiv. n particular, scripturilor din cataloagele parinte ale catalogului care contine scriptul nu li se permite accesul prestabilit la variabila cookie.Pentru a pune variabila cookie la dispozitia scripturilor dintr-un anumit catalog si cataloagele sale, specificati o valoare a argumentului 'cale'. De exemplu, pentru a pune variabila cookie la dispozitia ntregului arbore de cataloage, specificati " /" ca valoare a argumentului cale; pentru a face variabila cookie disponibila n catalogul "/test" si n sub-cataloagele sale, specificati "/test/" ca valoare a argumentului 'cale'.- Daca nu este specificat nici un argument 'domeniu', o variabila cookie este disponibila numai pentru scripturile din domeniul Web care a creat variabila respectiva. Argumentul 'domeniu' va permite sa specificati numele de domeniu asociat unei variabile cookie. n consecinta, variabila cookie va fi disponibila numai pentru siturile Web din cadrul domeniului specificat. De exemplu, sa presupunem ca un script din serverul Webhttp://www.subdomeniu.domeniu.comcreeaza o variabila cookie. n mod prestabilit, variabila cookie este disponibila numai pentru gazda respectiva. Cu toate acestea, puteti face variabila cookie disponibila pe ntreg domeniul 'subdomeniu.domeniu.com', specificnd "subdomeniu.domeniu.com" ca valoare a argumentului 'domeniu'.- Argumentul 'secure' este o valoare ntreaga, care specifica daca variabila cookie trebuie trimisa prin intermediul unei conexiuni sigure (HTTPS). Specificati valoarea l pentru a mpiedica transmiterea variabilei cookie n cazul n care conexiunea nu este sigura; pentru a permite transmiterea variabilei cookie prin conexiuni HTTP obisnuite, specificati valoarea 0.

Lucrul cu fisiere (1) Invatati sa obtineti atributele unui fisier Invatati despre privilegiile unui fisier si utilizarea acestora Invatati sa deschideti si sa inchideti fisiere1. Obtinerea atributelor unui fisierPrivilegiile asociate unui fisier sau unui catalog determina operatiile pe care le poate executa un utilizator cu fisierul sau catalogul respectiv.Pentru a adauga un fisier intr-un director, folosind PHP, trebuie sa aveti permisiunea de scriere in acel director, de asemenea, pentru a adauga date intr-un fisier, trebuie sa aveti permisiunea de scriere in fisierul respectiv.Aceste permisiuni sunt date (configurate) de administratorul sistemului respectiv.PHP furnizeaza numeroase functii care va permit sa obtineti informatii care descriu un fisier. Tabelul urmator rezuma cele mai cunoscute dintre aceste functii.Functii PHP pentru obtinerea atributelor unui fisier

FunctieDescriere

file_exists()- Returneaza TRUE daca fisierul specificat exista, respectiv FALSE n caz contrar

fileatime()- Returneaza timpul de acces la fisier sub forma de amprenta de timp UNIX.

filectime()- Returneaza timpul de modificare al i-nodului (structura de date care contine informatii despre fisiere UNIX - N. T.) sub forma de amprenta de timp UNIX.

filegroup()- Returneaza identificatorul numeric al grupului care detine fisierul

filemtime()- Returneaza momentul de timp al modificarii fisierului sub forma de amprenta de timp UNIX

fileowner()- Returneaza identificatorul numeric de utilizator al fisierului

fileperms()- Returneaza permisiunile fisierului

filesize()- Returneaza dimensiunea fisierului, n octeti

filetype()- Returneaza tipul fisierului, n speta "fifo", "char", "dir", "block", "link", "file" sau "unknown"

is_dir()- Returneaza TRUE daca directorul specificat exista; n caz contrar, returneaza FALSE

is_file()- Returneaza TRUE daca fisierul specificat exista; n caz contrar, returneaza FALSE

is_readable()- Returneaza TRUE daca fisierul specificat exista si poate fi citit; n caz contrar, returneaza FALSE

is_writable()- Returneaza TRUE daca fisierul specificat exista si se poate scrie n acel fisier; n caz contrar, returneaza FALSE

Functiilefileowner()sifilegroup()returneaza fiecare un identificator numeric; puteti converti identificatorul numeric ntr-un sir prin invocarea functieiposix_getpwuid()cu un identificator de utilizator, respectiv a functieiposix_getgrgid()cu un identificat de grup. Acestea returneaza informatii despre identificatorul precizat.Iata un exemplu in care puteti vedea, si intelege mai bine, cum sunt folosite functiile rezentate in tabelul anterior (fisierul 'test.txt' care va fi folosit de functii se afla in acelasi director cu scriptul php):

Datele de iesire ale exemplului sunt urmatoarelefile_exists(): 1fileowner(): 0filegroup(): 0filetype(): filefilesize(): 5fileatime(): 08/28/2008 00:00filectime(): 08/28/2008 10:49filemtime(): 08/28/2008 11:32fileperms(): 100666is_file(): 1is_dir():is_readable(): 1is_writable(): 1

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina ->Functii pentru fisiere si directoare.

2. Privilegii de fisierPrivilegiile asociate unui fisier (sau director) determina operatiile pe care utilizatorii le pot efectua cu fisierul (sau directorul) respectiv. =Privilegiile sunt date sub forma a trei grupuri alcatuite din cte trei caractere fiecare; cu alte cuvinte, trei triade. Prima triada indica privilegiile acordate posesorului fisierului. Cea de-a doua triada indica privilegiile acordate membrilor grupului posesor al fisierului. Cea de-a treia triada indica privilegiile acordate altor utilizatori.Cele 3 caractere care alcatuiesc un grup sunt reprezentate, in sistemele UNIX, prin urmatoarele tri litere: 'r', 'w' si 'x'; acestea reprezinta: r- fisierul poate fi cititw- se poate scrie n fisierx- continutul fisierului poate fi executatCaracterele unei triade apar ntotdeauna n secventa 'rwx'. Daca o anumita litera este nlocuita de o cratima (-), privilegiul asociat nu este accesibil.De exemplu, sa examinam privilegiile specificate in urmatorul exemplu: rwxr-xr--Aceste caractere au urmatoarea semnificatie: "rwx", posesorul fisierului poate citi, scrie sau executa fisierul "r-x", membrii grupului posesor al fisierului pot citi sau executa fisierul, dar nu pot scrie n fisier "r--", alti utilizatori pot citi fisierul, dar nu pot scrie n fisier sau executa continutul fisieruluiPrivilegiul 'x' este semnificativ numai pentru fisierele care includ un continut executabil, cum sunt fisierele binare executabile (.exe) sau anumite categorii de scripturi.Posesorul unui fisier poate modifica privilegiile asociate fisierului emitnd comandachmod(aceasta functioneaza in sistemele de operare UNIX).Aceasta comanda are doua forme. O forma va permite sa specificati privilegiile folosind cifre scrise n octal; cealalta va permite sa le specificati folosind litere.Pentru a specifica privilegiile folosind cifre n octal, calculati valoarea numerica a fiecarei triade. Pentru aceasta, nsumati numerele corespunzatoare fiecarui privilegiu disponibil din cadrul triadei. Numerele asociate privilegiilor sunt urmatoarele: r- 4w- 2x- 1De exemplu, privilegiul "rwx" are valoarea 4 + 2 + 1 = 7. Similar, privilegiul "r-x" are valoarea 4 + l = 5, iar privilegiul "r--" are valoarea 4.Dupa ce ati calculat valoarea numerica a fiecarei triade, formati un numar din trei cifre scris n octal, care este alcatuit din valoarea numerica a privilegiilor utilizatorilor, valoarea numerica a privilegiilor membrilor grupului, si valoarea numerica a privilegiilor altor utilizatori. Astfel, privilegiile "rwxr-xr--" corespund valorii n octal 754.3. Modificarea privilegiilor unui fisierPentru a modifica privilegiile unui fisier, folositi functiachmod(), care are urmatoarea forma: chmod(nume_fisier, mod)Argumentul 'nume_fisier' specifica numele si calea de acces a fisierului ale carui privilegii urmeaza a fi modificate, iar argumentul 'mod' specifica privilegiile dorite, n general, se prefera exprimarea privilegiilor sub forma unui numar scris n octal. Pentru aceasta, prefixati valoarea folosind cifra 0.De exemplu, puteti atribui unui fisier "text.txt" privilegiile "rwxr-xr--" specificnd pentru 'mod' valoarea 0754, functia "chmod" va fichmod("text.txt", 0754)Pentru ca functiachmod()sa se execute cu succes, PHP trebuie sa ruleze sub contul utilizatorului posesor al fisierului. Functia returneaza TRUE n caz de reusita, respectiv FALSE n caz contrar.Pentru a modifica grupul posesor al unui fisier, invocari functiachgrp(), care are forma: chgrp("nume_fifier", grup)- Unde "grup" este un nume sau numar care desemneaza grupul respectiv.Functiilechmod()sichgrp()nu functioneaza sub Microsoft Windows.4. Deschiderea unui fisierInainte de a putea citi sau scrie ntr-un fisier, trebuie sa deschideti fisierul folosind functiafopen(). fopen("nume_fisier", "mod")- unde 'nume_fisier' specifica numele si calea spre fisierul care urmeaza a fi deschis, iar 'mod' indica tipul de acces dorit.Modurile de deschidere a unui fisier sunt urmatoarele: r- Permite doar citirea fisieruluir+- Citire sau scriere de la inceputul fisieruluiw- Creaza fisierul daca nu exista si suprascrie datele existentew+- Citire sau scriere; la scriere , creeaza fisierul daca nu exista si suprascrie datele existentea- Adaugare; Creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existenta+- Citire sau scriere; la scriere, creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existentx- Doar scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta existax+- Citire sau scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta existab- Deschide fisierul in mod binarFunctiafopen()returneaza FALSE daca PHP nu a reusit sa deschida fisierul, n caz contrar, returneaza o valoare care contine un ntreg, numit "identificator de fisier", care se foloseste pentru identificarea unui fisier de catre functiile care executa operatii cu fisiere.De exemplu, instructiunea urmatoare deschide fisierul 'carte.txt' pentru citire: $fh = fopen("carte.txt", "r");Sub Microsoft Windows, fisierele ASCII si fisierele binare sunt tratate n mod diferit. Cnd deschideti un fisier binar sub Windows, specificati "b" ca al doilea caracter al modului; de exemplu, "rb" pentru citire, "wb" pentru scriere, "a+b" pentru citire si adaugare. Daca nu procedati astfel, citirile din fisier si alte operatii se vor ncheia prematur sau vor esua.5. Verificarea finalizarii unei operatii cu un fisierOperatiile cu fisiere (inclusiv cele legate de deschiderea, citirea unui fisier si scrierea ntr-un fisier) pot esua dintr-o varietate de motive. Deci, este important sa verificati daca fiecare operatie s-a ncheiat cu succes.Iata o modalitate n care puteti proceda:

Functiafopen()returneaza FALSE daca nu reuseste sa deschida fisierul. In acest caz, scriptul executa instructiuneaechocare afisaza un mesaj.O forma alternativa mai simpla foloseste operatorul OR (SAU):

6. Inchiderea unui fisierUn fisier deschis consuma resursele sistemului. Cnd un script a terminat de utilizat un fisier, scriptul trebuie sa nchida fisierul, elibernd aceste resurse.La sfrsitul unui script, PHP nchide n mod automat fisierele deschise. Totusi, la programare se recomanda sa nchideti fisierele mai rapid, ori de cte ori este posibil.Pentru a nchide un fisier, folositi functiafclose(): fclose(identificator_fisier)- 'identificator_fisier' este identificatorul fisierului, returnat la deschiderea acestuia cu functiafopen()Iata un exemplu caracteristic de deschidere, utilizare si nchidere a unui fisier:

Functiafclose()returneaza valoarea TRUE daca fisierul a fost nchis cu succes. Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea multe dupa ce s-a ratat o ncercare de a nchide un fisier.

Lucrul cu fisiere (2) nvatati sa cititi datele dintr-un fisier nvatati sa afisati continutul unui fisier nvatati sa scrieti date intr-un fisier1. Citirea dintr-un fisierPHP furnizeaza o varietate de functii pentru citirea fisierelor. Una dintre acestea estefread(), care are urmatoarea forma: fread(identificator_fisier, lungime)Argumentul 'identificator_fisier' este valoarea returnata de functiafopen(), iar argumentul 'lungime' specifica numarul maxim de octeti care vor fi cititi. Octetii cititi din fisier sunt returnati sub forma de valoare de tip sir. Daca operatia de citire ntlneste sfrsitul fisierului, PHP va returna mai putin de lungime octeti data.Iata un exemplu de citire si de afisare a unui text dintr-un fisier, folosind functiafopen()(Fisierul "carte.txt" folosit ca test in exemplele de mai jos trebuie sa se afle in acelasi director in care este si scriptul php):

Exemplul citeste maximum 256 de octeti din fisier daca fisierul a fost deschis.-Am folosit caracterul@in fata functiei "fopen()" pentru a impedica afisarea erorilor de la server in cazul cand fisierul nu poate fi deschis. Este deja functia "if()" care verifica si afiseaza mesaj in caz de nedeschidere a fisierului.Pentru a citi un numar mai mare sau mai mic de octeti, modificati valoarea argumentului lungime al functieifread().PHP include o functie conexa, denumitafgetc(), care citeste un octet din fisierul specificat.Pentru a citi si a afisa ntregul continut al fisierului, puteti folosi functiafilesize()pentru a furniza valoarea argumentului lungime, astfel:

2. Citirea unei linii de textSe obisnuieste frecvent citirea linie cu linie a unui text dintr-un fisier.Functiafgets()citeste o linie dintr-un fisier; functia are urmatoarea forma: fgets(identificator_fisier, lungime)- Argumentul 'identificator_fisier' este o valoare returnata de functiafopen(); aici, argumentul 'lungime' specifica numarul maxim de octeti dintr-o linie care vor fi cititi, minus o unitate, pentru a permite includerea caracterului de terminare a liniei (acesta poate fi omis si va citi toata linia). Octetii cititi din fisier sunt returnati ca valoare de tip sir.Iata un exemplu care prezinta modul de citire si de afisare a primilor 125 octeti din prima linii a unui fisier :

- In exemplul de mai sus, daca prima linie din fisierul "carte.txt" are mai mult de 125 de caractere, va afisa doar primele 125, daca are mai putin de 125 de caractere, va afisa doar caracterele care sunt incluse in prima linie.3. Citirea linie cu linie a unui ntreg fisiern general, dintr-un fisier trebuie citit mai mult dect prima linie a acestuia. Pentru aceasta, un script trebuie sa dispuna de o modalitate de a determina momentul cnd fisierul a fost citit n totalitate.Functiafeof()are chiar acest scop, returnnd o valoare care arata daca s-a ajuns sau nu la sfrsitul fisierului. Functia are urmatoarea forma: feof(identificator_fisier)Argumentul 'identificator_fisier' este valoarea returnata de functiafopen().Functiafeof()returneaza TRUE daca fisierul specificat este la sfrsit; n caz contrar, returneaza FALSE.Iata cum se poate folosi functiafeof()pentru a controla procesul de citire a unui ntreg fisier, linie cu linie:

- Instructiunea "while" asigura faptul ca functiafgets()este apelata n mod repetat, pna la citirea tuturor liniilor.

O alta modalitate simpla de a citi linie cu linie un ntreg fisier consta n a folosi functiafile(). Aceasta functie returneaza un tablou n care fiecare element contine o linie a fisierului specificat.Iata un exemplu care foloseste functiafile()pentru a citi si pentru a afisa continutul unui fisier:

Aceasta metoda nu este adecvata pentru fisiere de foarte mari dimensiuni, deoarece n tablou este ncarcat ntregul continut al fisierului, ceea ce poate necesita o cantitate de memorie superioara celei disponibile.4. Afisarea continutului unui fisierPHP furnizeaza doua functii care faciliteaza afisarea continutului unui fisier.- Una dintre functii,fpassthru(), necesita un argument care specifica identificatorul fisierului care urmeaza sa fie afisat: $fh = fopen("carte.txt", "rb");fpassthru($fh);Dupa ce a afisat fisierul, functia l nchide automat.- Cealalta functie,readfile(), necesita numai numele sau calea fisierului: readfile("carte.txt");5. Navigarea printr-un fisierFiecare fisier are un pointer asociat care indica pozitia octetului unde se va produce urmatoarea operatie.Puteti folosi functiarewind()pentru a readuce pointerul la nceputul fisierului. Functia are urmatoarea forma ('identificator_fisier' este identificatorul de fisier returnat de functia fopen()): rewind(identificator_fisier)Nu puteti readuce pointerul unui fisier la nceputul propriu-zis al unui fisier daca fisierul a fost deschis pentru un acces de tip atasare, adica ntr-unul din modurile 'a' sau 'a+'.Iata un exemplu care prezinta modul de utilizare a functieirewind()pentru a afisa de doua ori continutul unui fisier:

Daca se produce vreo eroare, functiarewind()returneaza zero.Desi functiarewind()este utila n caz de nevoie, necesitatea de a readuce un pointer de fisier la nceputul fisierului nu este chiar att de frecventa.Functiafseek()furnizeaza o mai mare flexibilitate, permitndu-va sa pozitionari pointerul de fisier astfel nct sa puteti citi sau scrie n orice punct al fisierului.Functia are doua forme, cea mai simpla fiind urmatoarea: fseek(identificator_fisier, offset)unde 'identificator_fisier' este identificatorul de fisier returnat de functia fopen(), iar 'offset' este pozitia dorita a pointerului de fisier, specificata n octeti, n raport cu nceputul fisierului.In caz de reusita, functiafseek()returneaza 0; n caz contrar, returneaza -l .O forma alternativa a functiei asigura un grad superior de flexibilitate, avand urmatoarea forma: fseek(identificator_fisier, offset, baza)unde 'identificator_fisier' si 'offset' au semnificatiile definite anterior, iar 'baza' ia una ; dintre urmatoarele valori: SEEK_SET, care stabileste pozitia pointerului de fisier n raport cu nceputul fisierului SEEK_CUR, care stabileste pozitia pointerului de fisier n raport cu valoarea curenta a pointerului SEEK_END, care stabileste pozitia pointerului de fisier relativ la sfrsitul fisieruluiValoarea argumentului 'offset' poate fi pozitiva, negativa sau zero.De exemplu, pentru a pozitiona pointerul cu 1000 de octeti nainte de sfrsitul fisierului, emiteti urmatorul apel de functie: fseek($fh, -1000, SEEK_END)Pentru a obtine valoarea curenta a pointerului de fisier, folositi functiaftell(), care are urmatoarea forma: ftell(identificator_fisier)Functia returneaza valoarea curenta a identificatorului de fisier, respectiv valoarea zero daca functia esueaza.6. Scrierea ntr-un fisierPentru a scrie intr-un fisier se foloseste functiafwrite(), aceasta are urmatoarea forma: fwrite(identificator_fisier, date);- Unde 'identificator_fisier' este identificatorul de fisier returnat de functiafopen(), iar 'date' este o valoare sir care determina datele care urmeaza a fi scrise.Daca executia functiei reuseste, returneaza numarul octetilor scrisi; n caz contrar, returneaza valoarea l.Iata un exemplu care prezinta modul de scriere a datelor ntr-un fisier:

Acest script va avea urmatoarele date de iesire:Rezultatul scris este: 30- Programul prezentat n exemplul anterior scrie n fisierul "carte.txt" o linie de text. Deoarece fisierul a fost deschis folosind modul "a", datele sunt atasate la fisier; cu alte cuvinte, datele sunt scrise la sfarsit, dupa toate datele existente n fisier.Observati ca a fost scris si un caracter de terminare a liniei ("\n"), astfel nct fisierul sa poata fi citit linie cu linie la un moment de timp ulterior. Daca lucrati cu un fisier text, n general e util sa includeti un caracter de terminare a liniei la sfrsitul fiecarei linii scrise n fisier.Programul din exemplu scrie n fisier o singura linie de text. Totusi, puteti scrie mai multe linii, daca doriti. Daca apelati functiafwrite()din interiorul unei bucle, aveti posibilitatea de a scrie mai multe linii. Dupa ce ati scris toate liniile de care aveti nevoie, nchideti fisierul prin apelarea functieifclose().PHP mai furnizeaza si o forma alternativa a functieifwrite(): fwrite(identificator_fisier, date, lungime);Aceasta forma include un al treilea argument, si anume "lungime", care va permite sa specificati numarul maxim de octeti care vor fi scrisi.Argumentul "lungime" al functieifwrite()trebuie utilizat atunci cnd se scrie n fisiere binare sub Microsoft Windows.Windows prefera secventa de terminare a liniei "\r\n". Atunci cnd scrieti programe PHP pentru sisteme Windows, este de preferat sa folositi secventa "\r\n" de terminare a liniei.- PHP dispune de o alta functie pentru scrierea fisierelor,fputs(). Totusi, n afara de nume,fputs()este similara cu functiafwrite().

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina ->Functii pentru fisiere si directoare.Lucrul cu fisiere (3) Invatati sa blocati si sa obtineti accesul exclusiv la un fisier Invatati sa copiati, sa redenumiti si sa stergeti un fisier Studiati un script PHP util pentru incarcarea de fisiere in server1. Obtinerea accesului exclusiv la un fisierWeb-ul ridica o problema speciala pentru dezvoltatorii de programe, deoarece mai multi utilizatori pot avea acces simultan la un singur script PHP. Uneori, accesul simultan poate avea ca rezultat date incorecte. Pentru a vedea cum se poate produce aceasta, sa luam n considerare urmatorul script, care reprezinta un contor pentru numarul de deschideri a unei pagini.

Remarcati functiile pe care le foloseste scriptul pentru a executa operatiile cu fisiere. Programul deschide fisierul "ctr.txt" pentru citire si scriere, preia datele din acesta, care sunt un numar intreg, mareste acel numar cu o unitate, intoarce pointerul la inceputul fisierului "rewind" dupa care rescrie noul numar, afiseaza numarul si inchide fisierul.Secventa de cod descrisa mai sus poate creea probleme in cazul in care, de exemplu doi utilizatori diferiti acceseaza acelasi fisier, in acelasi timp, cand contoarul este, de exemplu, la numarul 100. Amandoi vor incrementa numarul 100 cu o unitate si va rescrie in fisierul "ctr.txt" 101; in final, contoarul va arata 101, in loc de 102 cum ar fi trebuit (deoarece au fost 2 vizitatori).Pentru a evita astfel de conflicte PHP pune la dispozitia utilizatorilor o metoda prin care se poate bloca accesul temporar la un fisier. Pe durata blocarii, un alt utilizator nu va mai putea scrie/citi din acest fisier. De aceea durata blocarii trebuie sa fie limitata.Functia care realizeaza blocarea esteflock(), care are urmatoarea forma: flock(identificator_fisier, operatie)- Unde "identificator_fisier" este identificatorul de fisier returnat de functia fopen(). Argumentul "operatie" este o constanta sau o expresie care poate avea urmatoarele valori: LOCK_SH- Blocare partajata in scopuri de citireLOCK_EX- Blocare exclusiva in scopuri de scriereLOCK_NB- Blocare fara fixareLOCK_UN- Eliminarea blocariiIata cum se foloseste procesul de blocare, vom folosi acelasi exemplu, contoarul de mai sus, de data aceasta imbunatatit.

- De data aceasta scriptul blocheaza fisierul "ctr.txt" pe timpul citirii si scrierii acestuia, astfel nct accesul simultan sa nu cauzeze o numarare eronata.Blocare se face imediat dupa ce a fost deschis fisierul, cu "LOCK_EX", si se incheie imediat dupa rescrierea in fisier, prin deblocare acestuia "LOCK_UN".2. Copierea unui fisierO functie care faciliteaza copierea fisierelor, estecopy(). Functiacopy()are urmatoarea forma: copy (sursa, destinatiea)Unde "sursa" este numele si calea fisierului care urmeaza a fi copiat, iar "destinatie" este numele sau calea copiei.Functia returneaza TRUE daca operatia de copiere reuseste; n caz contrar, returneaza FALSE.Iata un exemplu n care este prezentat modul de utilizare a functieicopy():

Exemplul creeaza o copie a fisierului "test.txt", cu numele "test.txt.bak", in acelasi director.Functiacopy()va suprascrie fisierul destinatie, daca acesta exista.3. Modificarea numelui unui fisierFunctia care va permite sa modificati numele unui fisier esterename(), aceasta care are urmatoarea forma: rename(nume_vechi, nume_nou)Unde "nume_vechi" este numele si calea originala a fisierului, iar "nume_nou" este numele dorit.Functia returneaza TRUE daca operatia de modificare a numelui a reusit; n caz contrar, returneaza FALSE.Iata un exemplu de utilizare a functieirename():

- Exemplu modifica numele fisierului "test.txt" in "teste.dat".4. Stergerea unui fisierFunctia care va permite sa stergeti un fisier esteunlink(), aceasta care are urmatoarea forma: unlink(nume_fisier)Unde "nume_fisier" este numele si calea fisierului care va fi sters.Functia returneaza TRUE daca operatia de stergere a reusit; n caz contrar, returneaza FALSE.Iata un exemplu de utilizare a functieiunlink():

- Exemplu sterge fisierului "test.txt".Retineti ca PHP trebuie sa aiba acces de scriere la catalogul n care se vor executa operatiile de copiere, redenumire sau stergere; n caz contrar, PHP nu va putea executa aceste operatii.5. Incarcarea unui fisier in serverPentru incarcarea unui fisier in server, se folosesc formulare HTML impreuna cu un script PHP de incarcare care foloseste functiamove_uploaded_file()pentru operatia de upload.Pentru a crea un formular de ncarcare, specificatiENCTYPE="multipart/form-data"n eticheta FORM si includeti un control de introducere a datelor cu atributulTYPE="FILE".Iata un exemplu de script PHP si formular HTML care incarca fisierele in server:

2. Manipularea cailor de accesPHP include numeroase functii utile pentru manipularea cailor de acces.Functiadirname()preia calea de acces la un fisier si returneaza toata calea, mai putin componenta finala a caii specificate, n cazul n care componenta finala este un fisier, functia va ajuta sa izolati numele fisierului de restul caii.De exemplu, daca se da calea "plomar/curs-php/lectii/lectia1.php", functia va returna "plomar/curs-php/lectii".Functia are urmatoarea forma: dirname(cale_fisier)Functiabasename()executa operatia complementara, returnnd numai componenta finala a caii specificate.De exemplu, daca este data calea "plomar/curs-php/lectii/lectia1.php", functia "basename()" va returna "lectia1.php".Functia are urmatoarea forma: basename(cale_fisier)Daca doriti sa executati mai multe operatii cu o cale, functiapathinfo()va poate fi de folos. Aceasta functie returneaza un tablou care include patru elemente (al patrule incepand de la versiunea PHP 5.2.0): 1.dirname- rezultatul invocarii functieidirname()avnd ca argument calea respectiva 2.basename- rezultatul invocarii functieibasename()avnd ca argument calea respectiva 3.extension- extensia fisierului (daca exista) dat de rezultatului functieibasename() 4.filename- numele fisierului dat de rezultatului functieibasename(), dar fara extensieIata un exemplu care prezinta modul de utilizare a functieipathlnfo():

Datele de iesire ale scriptului de mai sunt urmatoarele :dirname => plomar/curs-php/lectiibasename => lectia1.phpextension => phpfilename => lectia1Un alt mod in care puteti utiliza si afla valorile returnate de functipathinfo()este urmatorul:

Acest exemplu va returna urmatoarele date de iesire :plomar/curs-php/lectiilectia1.phpphplectia13. Vizualizarea si modificarea privilegiilor directoarelorPentru a vizualiza privilegiile unui director, puteti folosi aceleasi functii utilizate pentru vizualizarea privilegiilor fisierelor, prezentate inLectia 17in tabelul "Functii PHP pentru obtinerea atributelor unui fisier". folosind ca argument numele sau calea directorului. Aceste functii va permit sa vizualizati o varietate de caracteristici ale directoarelor, inclusiv privilegiile de catalog, care sunt returnate de functiafileperms().Pentru a modifica privilegiile unui director, folositi functiachmod()care a fost descrisa inLectia 17la sectiunea "Modificarea privilegiilor unui fisier". Utilizati aceasta functie exact asa cum ati folosi-o pentru a stabili privilegiile de fisier, folosind ca argument un director.Pentru a putea atribui sau schimba privilegiile unui director sau fisier, modulul PHP instalat trebuie sa aiba drepturi de modificare a directoarelor /fisierelor specificate.4. Citirea continutului unui directorPHP furnizeaza trei functii care va permit sa cititi continutul unui catalog, ca si cum catalogul ar fi un fisier. Aceste functii sunt: 1. opendir()- deschide directorul pentru citire2. readdir ()- citeste o intrare dintr-un catalog3. closedir()- nchide catalogul, elibernd resursele alocate de functiaopendir()Rezultatul apelarii functieireaddir()este un sir care contine numele urmatorului fisier sau sub-director din catalogul deschis. Functia returneaza FALSE atunci cnd au fost citite toate intrarile din catalog.Iata un exemplu care prezinta modul de utilizare a acestor functii pentru citirea continutului unui catalog:

Datele de iesire ale exemplului pot fi similare cu cele prezentate mai jos :styleimgslectiascriptsindex.php

- Sau puteti folosi functiascandir($dir). Aceasta preia intr-un Array numele tuturor directoarelor si fisierelor din directorul "$dir". In caz de nereusita returneaza False.5. Crearea unui directorPentru a crea un director, utilizati functiamkdir(), care are urmatoarea forma: mkdir(nume_dir, mod)- Unde "nume_dir" este calea sau numele directorului care va fi creat, iar "mod" reprezinta privilegiile care trebuie acordate noului catalog.In mod normal, prima cifra a argumentului mod trebuie sa fie 0, astfel nct PHP sa-l perceapa ca pe o valoare scrisa n octal.RevizuitiLectia 17, sectiunea "Privilegii de fisier"Functia returneaza TRUE daca creeaza catalogul; n caz contrar, returneaza FALSE.De exemplu, pentru a crea un catalog denumit "lucru" si pentru a-i atribui privilegiile "rwxr-x--x", utilizati functiamkdir()dupa cum urmeaza:

Pentru a modifica numele unui director, puteti folosi functiarename(), care are urmatoarea forma: rename(nume_vechi, nume_nou)Unde "nume_vechi" este numele si calea originala a directorului, iar "nume_nou" este numele nou dorit.

- O lista cu mai multe functii utile in lucrul cu directoare gasiti la pagina ->Functii pentru fisiere si directoare.Utilizarea de sesiuni PHP Invatati sa creati sesiuni in PHP Invatati sa lucrati cu variabile din sesiuni si sa stergeti datele sesiunii1. Despre sesiuni, crearea unei sesiuni PHPSesiunea reprezinta o modalitate prin care PHP retine informatii de la o pagina la alta.Odata cu initializarea unei sesiuni, utilizatorul poate pastra anumite variabile chiar daca in continuare viziteaza si alte pagini ale site-ului. In principiu informatia se pastreaza pana la inchiderea browser-ului, sau pana cand utilizatorul distruge in mod intentionat sesiunea curenta.Lucrurile se desfasoara ca in felul urmator: in momentul cand un user s-a logat la site, PHP atribuie acestuia un identificator unic de sesiune : SID. Acest SID este inglobat intr-un coockie cu numele PHPSESSID si trimis apoi catre browserul utilizatorului. Daca browserul nu suporta cookie-uri sau acestea sunt dezactivate, atunci acest SID este adaugat la adresa URL. In acelasi timp se creeaza pe server un fisier cu numele SID. In continuare daca utilizatorul doreste sa stocheze anumite informatii, acestea vor fi practic scrise in acest fisier SID de pe server.Sesiunile au urmatoarele avantaje: - Pot fi folosite chiar daca browserul utilizatorului nu suporta cookie-uri sau daca acestea sunt dezactivate. - Permit stocarea unui volum mare de informatii, spre deosebire de cookie-uri care sunt limitate in aceasta privinta. - Sunt mai sigure in raport cu cookie-urile deoarece informatiile nu sunt transmise in mod repetat intre client si server.Initializarea unei sesiuni se face cu functia : session_start()Aceasta trebuie sa fie printre primele linii de cod dintr-un script PHP, deoarece apelul acestei functii trebuie facut inainte de trimiterii catre browser-ul Web a vreunui cod HTML sau chiar a unui spatiu vid.Daca folosim stocarea iesirii in buffer, instructiuneasession_start()nu trebuie inserata neaparat la inceputul codului.Instructiuneasession_start()nu este necesare daca in fisierul de configurare "php.ini", variabila "session.auto_start" are valoarea TRUE.Pentru a intelege mai bine modul de lucru cu sesiuni si functiasession_start(), folosim un exemplu in care avem o pagina principala "a.php" unde cream o variabila cu numele "userName", atribuindu-i valoarea "MarPlo", pe care o stocam intr-o sesiune PHP, pagina contine o legatura catre o alta pagina "b.php", aceasta din urma va folosi functiasession_start()pentru a prelua, prin sesiune, valoarea variabilei "user_name" din pagina "a.php", astfel putem folosi valoarea acestei variabile intr-un script din pagina "b.php".Continutul fisierului "a.php" este urmatorul:

Aceasta este pagina "a.php"


Legatura spre pagina b.php

Continutul fisierului "b.php" este urmatorul:

Pagina b.php

Aceasta este pagina b.php

Observati ca atribuirea, respectiv citirea variabilelor se face folosind variabila super-globala :_SESSION.Deschizand prima pagina, "a.php", va fi afisat urmatorul rezultatAceasta este pagina "a.php"Variabila de sesiune are valoarea: MarPloLegaturaspre pagina b.phpCand apasam click pe link-ul "spre pagina b.php", se va deschide aceasta pagina, afisand urmatorul continut:Aceasta este pagina "b.php"Variabila de sesiune are valoarea: MarPlo- In acest exemplu se observa ca pagina "b.php" detine informatii despre variabila de sesiune creata in pagina "a.php".2. Manipularea variabilelor sesiunii.In anumite momente ar putea fi util sa aflam identificatorul sesiunii curente. Pentru aceasta folosim functiasession_id(), ca in exemplul urmator:

Functiasession_id()accepta un parametru. Astfel putem seta un anumit SID pentru sesiunea curenta. In acest caz trebuie sa apelam functiasession_id()inainte de functia :session_start(), ca in exemplul urmator:

Deoarece variabilele de sesiune pot fi citite de alti utilizatori neautorizati, nu este indicat sa pastram aici informatii esentiale cum sint parolele.Pentru a creea un minimum de securitate putem codifica aceste informatii, folosind functtile de codare oferite de PHP: md5()saucrypt()- Functiamd5(sir_de_caractere)codifica sirul de caractere furnizat ca parametru si returneaza un sir de 32 charactere hexazecimale. Aceasta functie foloseste algoritmul de criptare: "RSA Data Security, Inc. MD5 Message-Digest Algorithm".Iata un exemplu de utilizare al acestei codificari:

Consideram cazul in care avem o variabila de sesiune "$parola" care pastreaza o parola si dorim sa codificam si sa transmitem acrasta variabila astfel incat utilizatorii neautorizati sa nu o poata folosi. Pentru aceasta folosim functiamd5(), pentru a o cripta. Mai mult initializam o variabila globala cu numele "$secret", careia ii atribuim ca valoare un sir de caractere oarecare. In continuare, inainte de a introduce parola intr-o sesiune PHP, concatenam valorile "$secret" si "$parola" si criptam rezultatul. Astfel, chiar daca cineva reuseste sa decripteze variabila de sesiune, este putin probabil sa poata separa sirul "$secret" creat de noi.Este bine sa pastram acest fisier intr-un director pretejat, cum ar fi cu un nivel mai sus decat directorul pentru pagini de Web.

Iata cum se prezinta exemplul prezentat mai sus. (consideram o variabila "$passtest" care verifica daca valoarea acesteia este egala cu parola):

Astfel, daca valoarea variabilei "$passtest", care poate fi obtinuta de exemplu dintr-un formular HTML, este identica cu parola pastrata de noi, va fi afisat mesajul "Parola acceptata".3. Stergerea unei sesiuniPentru a putea sterge o sesiune este necesar sa incepem scriptul PHP cu instructiunea:session_start(), ca intotdeauna cand folosim sesiuni.Pentru a sterge toate variabilele memorate in matricea $_SESSION folosim: unset($_SESSION);Pentru a sterge doar o variabila memorata in sesiune folosim : unset($_SESSION['nume_variabila']);Datele sesiunii sunt memorate in server in fisiere temporare. Pentru a sterge datele sesiunii din server folositi: session_destroy()Iata un exemplu care ilustreaza aceasta procedura:

Optiuni pentru utilizarea caracterelor speciale Invatati rolul optiunilor "magic_quotes" Invatati sa convertiti caracterele speciale prin schimbarea semnificatiei acestora utilizand functii PHP Invatati sa convertiti caracterele speciale specifice HTML si cele din sirurile folosite pentru adrese URL1. Ghilimelele magiceApar situatii cand dorim sa introducem ghilimele in interiorul unui textintr-o baza de date, dar SQL nu permite nglobarea unor ghilimele simple n interiorul valorii unui sir. Probleme similare pot aparea la introducerea unui text ce contine caractere speciale precum:\ + * ? ^ ( $ ), si care sunt trimise la un script PHP.PHP include functii si facilitati pentru rezolvarea acestor situatii.Fisierul de initializare PHP ("php.ini") contine optiuni de configurare care determina modul n care PHP controleaza datele provenite de la o sursa externa, cum sunt un formular HTML, un fisier text sau o baza de date.Optiuneamagic_quotes_gpcspecifica modul n care PHP manipuleaza operatiile HTTP: GET si POST, precum si operatiile dintre PHP si MySQL sau cele cu variabile cookie. Daca optiunea este activata (ON), PHP prefixeaza automat ghilimelele simple, ghilimelele duble, caracterele backslash si caracterele nule (caracterele a caror valoare ASCII este 0) care apar ntr-o variabila HTTP, cu un caracter backslash (\).Optiuneamagic_quotes_runtimespecifica modul n care PHP manipuleaza datele de origine externa. Daca aceasta optiune este activata, PHP ignora automat ghilimelele simple si duble care apar n datele externe, inclusiv datele din formularele HTML, din fisiere si baze de date.Daca este activata optiuneamagic_quotes_sybase, aceasta modifica efectul optiunilormagic_quotes_gpcsimagic_quotes_runtime, astfel nct un caracter de tip ghilimele simple sa fie prefixat cu un alt caracter de tip ghilimele simple, nu cu un backslas.Dar, n general, accesul la aceste comenzi din fisierul "php.ini" il are administratorul de sistem iar utilizatorii obisnuiti nu trebuie sa aiba posibilitatea de a aduce modificari n fisier. Astfel, pot fi folosite functii PHP care sa seteze aceste optiuni pe durata scriptului respectiv.Functiileget_magic_quotes_gpc()siget_magic_quotes_runtime()returneaza fiecare valoarea optiunii PHP corespunzatoare setate in fisierul "php.ini". Mai mult, puteti folosi functiaset_magic_quotes_runtime()pentru a specifica valoarea optiuniimagic_quotes_runtimepentru restul duratei scriptului PHP curent.De exemplu, pentru a dezactiva optiuneamagic_quotes_runtime, invocati functia set_magic_quotes_runtime(0);Alternativ, pentru a activa aceasta optiune intr-un script, folositi functia set_magic_quotes_runtime(1);2. Conversia caracterelor speciale si anularea acesteiaPHP poate converti ghilimelele simple si duble dintr-un sir, folosind functiaaddslashes().Daca PHP nu este configurat astfel nct sa converteasca aceste caractere din sir n mod automat, atunci trebuie sa executati manual aceasta modificare. Pur si simplu utilizati functiaaddslashes(), transferndu-i ca argument sirul text. Aceasta adauga caracterul backslash "\" pentru conversia caracterelor de tip ghilimele simple, ghilimele duble, backslash si caractere nuleAceasta conversie nu trebuie confundata cu o alta, si anume conversia de tip, care foloseste caracterul backslash (\).Conversia mentionata n acest capitol consta din modificarea semnificatiei anumitor caractere, pentru a preveni o interpretare eronata a acestora de catre programele specializate, precum MySQL. Din acest motiv, toate conversiile mentionate n acest capitol fac referire la modificarea semnificatiei unor caractere, nu la conversiile de tip.De exemplu, pentru a converti continutul sirului "$text" si a plasa rezultatul n variabila "$modificat", invocati functia dupa cum urmeaza: $modificat = addslashes($text);

Functiastripslashes()executa operatia complementara de anulare a conversiei, elimina caracterele backslash inserate.Pentru a anula conversia sirului "$modificat" si a plasa rezultatul n variabila "$nemodificat", utilizati functia dupa cum urmeaza: $nemodificat = stripslashes($modificat)O alta functi utila pentru conversia caracterelor speciale estequotemeta(), aceasta va insera un backslash nainte de fiecare aparitie a urmatoarelor caractere:. \ + * ? [ ^ ] ( $ ). Ca siaddslashes(), functiaquotemeta()se foloseste in mod similar, prelund ca argument sirul text.3. Conversia textelor HTMLCnd lucrati cu texte HTML, conversia executata de functiaaddslashes()nu este suficienta, deoarece HTML este sensibil si la alte caractere speciale dect cele convertite de functiaaddslashes().In schimb puteti folosi functiahtmlspecialchars().Aceasta converteste caracterele la care HTML este sensibil. Functie este utila cand se doreste ca un anumit sir sa nu contina marcaje HTML, ceea ce poate fi important in modul de operare a unei aplicatii, cum ar fi un tabel HTML.Functia are urmatoarea forma: htmlspecialchars("text" [,stil_ghilimele])Unde "text" specifica sirul care contine textul ce urmeaza a fi convertit, iar argumentul optional "stil_ghilimele" specifica modul de conversie a ghilimelelor simple, respectiv duble. Valorile permise ale optiunii "stil_ghilimele" sunt: ENT_COMPAT- precizeaza ca trebuie convertite numai ghilimelele duble ENT_QUOTES- precizeaza ca trebuie convertite ambele tipuri de ghilimele ENT_NOQUOTES- precizeaza ca nu trebuie convertit nici un tip de ghilimeleDe exemplu, pentru a converti toate caracterele HTML speciale, inclusiv ambele tipuri de ghilimele, din sirul "$texthtml", utilizati functia dupa cum urmeaza: $conversie = htmlspecialchars($texthtml);Functiahtmlspecialchars()executa urmatoarele conversii:CaracterRezultatul conversiei

& (ampersand) &

"(ghilimele duble) " (numait cnd este specificat opiunea ENT_COMPAT sau ENT_QUOTES)

'(ghilimele simple) ' (numai cnd este specificat opiunea ENT_QUOTES)

< (mai mic dect) (mai mare dect) >

O functie PHP conexa,htmlentities(), converteste toate caracterele cu echivalente n entitati HTML. Este acceptat setul de caractere ISO-8859-1Si o alta functie utila pentru conversia textelor HTML este functian12br(). Aceasta insereaza tag-ul
anterior fiecarui caracter de tip linie noua care se gaseste in argumentul sau.4. Conversia pentru adresele URLCnd doriti sa codificati in PHP date ca parte a unei adrese URL, puteti folosi functiaurlencode().Aceasta functie nlocuieste fiecare caracter non-alfanumeric (cu exceptia spatiilor) cu un simbol al procentului (%), urmat de doua cifre hexazecimale care contin valoarea ASCII a caracterului. Spatiile sunt codificate sub forma de simboluri ale adunarii (+).O functie conexa, n spetarawurlencode(), executa o conversie similara; cu deosebirea ca nlocuieste spatiile cu %20, conform RFC 1738, standardul Internet pentru codificarea adreselor URL.Functiileurldecode()sirawurldecode()executa operatii complementare. Aceste functii sunt utile la crearea adreselor URL care includ perechi 'nume-valoare'.De exemplu, sa presupunem ca avem un script PHP care trebuie sa creeze o pagina HTML ce contine o hiperlegatura spre adresa URL a unui motor de cautare. Termenul de cautare trebuie transmis n forma codificata URL, pentru ca serverul Web si browserul sa nu se "impiedice" de caracterele speciale. Pentru a codifica datele pentru o adresa URL, puteti folosi o metoda ca in exemplul urmator: echo ;Ca sa intelegeti mai bine aceste moduri de conversie, puteti studia amanuntit exemplul urmator:

Datele de iesire ale exemplului sunt urmatoarele:Conversie addslashes() = abc 123 \' / < & > ( % ) * , $ . # ^ ! [ \\ ] { @ } : ; = ?Anulare conversie addslashes() = abc 123 ' / < & > ( % ) * , $ . # ^ ! [ \ ] { @ } : ; = ?Conversie quotemeta($a) = abc 123 ' / < & > \( % \) \* , \$ \. # \^ ! \[ \\ \] { @ } : ; = \?Conversie caractere HTML = abc 123 '
/ < & > ( % ) * , $ . # ^ ! [ \ ] { @ } : ; = ?Conversie pt. adrese URL = abc+123+%27+%3Cbr+%2F%3E+%2F+%3C+%26+%3E+%28+%25+%29+%2A+%2C+%24+.+%23+%5E+%21+%5B+%5C+%5D+%7B+%40+%7D+%3A+%3B+%3D+%3FNotiuni fundamentale despre bazele de date si SQL (1) nvatati modul in care este structurata o baza de date nvatati modul de proiectare a unei baze de date nvatati sa creati baze de date MySQL si tabele nvatati sa stergeti si sa modificati tabele dintr-o baza de date MySQLAcesta lectie explica bazele de date relationale si modul de utilizare a acestora.Spre deosebire de fisiere, bazele de date prezinta multe avantaje, inclusiv o mai mare protectie a integritatii datelor si asigurarea partajarii datelor.In aceasta lectie va fi prezentat SQL, limbajul standard pentru crearea, accesul si manipularea bazelor de date relationale. Detaliile (cu precadere sintaxa SQL sunt cele referitoare la MySQL, cel mai popular limbaj de baze de date folosit cu PHP.1. Structura unei baze de date relationaleO baza de date relationale stocheaza datele n tabele, iar fiecare tabel stocheaza in coloane informatii despre un anumit tip de element.In continuare puteti vedea un tabel caracteristic dintr-o baza de date relationala care prezinta personalitati istorice ale Americii.PersoanaIDNumeAnNastere

001George Washington1732

002John Adams1735

003Thomas Jefferson1743

Primul rnd al tabelului atribuie nume pentru fiecare coloana.Fiecare rnd al tabelului, altul dect primul rnd, descrie o singura personalitate. De exemplu, al doilea rnd descrie o personalitati pe nume George Washington.Fiecare coloana, descrie un anumit atribut al personalitatii De exemplu, a doua coloana contine numele personalitatilor, iar a treia coloana contine anii n care s-au nascut acestia.Pentru a se putea face referire, mai usor, la un anumit rnd al tabelului, se obisnuieste ca fiecare tabel sa contina o coloana care identifica n mod unic fiecare rnd. Aceasta coloana se numeste "cheia primara" a tabelului. In exemplul prezentat, coloana numita "PersoanaID" serveste drept cheie primara.Daca nici o coloana nu contine o valoare unica pentru fiecare rnd, se pot combina valorile mai multor coloane pentru a crea o "cheie primara compusa".O baza de date relationala se numeste astfel datorita capacitatii sale de a stabili relatii ntre date din mai multe tabele.Urmatorul exemplu prezinta doua tabele si o relatie ntre acestea.PersoanaIDNumeAnNastere

001George Washington1732

002John Adams1735

003Thomas Jefferson1743

MeseriePersoanaID

Arhitect003

General001

Filozof002

Al doilea tabel contine informatii despre meseriile caracteristice ale persoanelor prezentate in exemplul anterior. Mai precis, tabelul identifica persoana cu o anumita meserie. Numele meseriei serveste drept cheie primara a tabelului, care mai contine, n afara de aceasta, o singura coloana.Coloana respectiva stocheaza atributul "PersoanaID" din primul tabel, al persoanei care cunoaste meseria descrisa de un anumit rnd. De exemplu, angajatul cu numarul 003 este arhitect.Retineti ca "PersoanaID" este att cheia primara a tabelului original, dar si o coloana din noul tabel. Coloana "PersoanaID" a noului tabel se numeste "cheie externa"; desi nu este cheia primara a noului tabel, este cheia primara a unui alt tabel.

Aplicatia software care gazduieste o baza de date se numeste "sistem de gestiune a bazelor de date" (SGBD). Exista multe sisteme de gestiune a bazelor de date, printre cele mai populare asemenea sisteme se numara: DB2 , Interbase , MySQL , Oracle , Postgresql , SQL Server , Sybase .MySQL este cel mai popular sistem de gestiune a bazelor de date destinat utilizarii cu PHP, n mare masura deoarece este gratuit. Totusi, prin intermediul PHP este posibil accesul la aproape orice SGBD modern.

Bazele de date relationale nteleg SQL (Structured Query Language), un limbaj relativ simplu, folosit pentru solicitarea datelor. In ciuda simplitatii sale, SQL este un limbaj foarte puternic, care poate obtine accesul la date stocate n mai multe tabele, poate filtra datele dorite si poate sorta, rezuma si afisa rezultatele.n general, bazele de date relationale si stocheaza datele ntr-un singur fisier sau catalog. Aceasta caracteristica de organizare faciliteaza administrarea datelor, deoarece executarea copiei de siguranta, respectiv restaurarea unui singur fisier sau catalog se realizeaza mai usor.Sistemele de gestiune a bazelor de date relationale necesita mai multe cicluri de procesor pentru a satisface o cerere de date dect cele necesare pentru accesul la un fisier normal, dar ofera protectie sporita a datelor, iar pentru accesul la distanta usureaza traficul deoarece majoritatea operatiilor sunt efectuate de programul SQL, astfel singurele date transmise in retea ar fi rezultatul cerut.2. Proiectarea unei baze de dateCand creati un tabel intr-o baza de date, este important sa tineti cont de "cheia primara" si sa va bazati pe aceasta. Coloanele dintr-un tabel trebuie sa se bazeze pe cheia primara n totalitatea sa.O alta operatie importanta este specificarea unui tip de date pentru fiecare coloana. Majoritatea bazelor de date relationale accepta urmatoarele tipuri de date generale: Caracter ntreg Zecimal Data si ora BinarTabelul urmator rezuma tipurile de date cele mai frecvent utilizate, acceptate de MySQL si de majoritatea bazelor de date relationale. MySQL accepta multe alte tipuri de date, dar acestea sunt cele mai folosite.Principalele tipuri de date din MySQL

Tip de dateDescriere

BLOB- Date binare arbitrare, cu o lungime maxima de 65535 octeti

CHAR(m)- Un sir de caractere de lungime fixa, cu un maxim de m caractere, unde m este mai mic dect 256. Pentru obtinerea lungimii dorite, se insereaza spatii finale

DATE- O data n format an-luna-zi; de exemplu 2008-10-15

DECIMALDECIMAL(m,d)- Un numar zecimal, reprezentat sub forma de sir cu "m" cifre, din care "d" se afla la dreapta punctului zecimal. Daca "m" si "d" sunt omise, n mod prestabilit se vor utiliza valorile 10 si 0

DOUBLEDOUBLE (m, d)- Un numar cu virgula mobila, cu dubla precizie, avnd o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula.

FLOAT(m,d)- Un numar cu virgula mobila, cu simpla precizie, avnd o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula

INTEGERINTEGER UNSIGNED- Un ntreg pe 32 de biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins ntre 0 si 4294967295; n caz contrar, domeniul este cuprins ntre valorile -2147483648 si 2147483647

NUMERICNUMERIC (m, d)- Similar cu DECIMAL

REALREAL(m, d)- Similar cu DOUBLE

SMALLINTSMALLINT UNSIGNED- Un ntreg pe 16 biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins ntre 0 si 65535; n caz contrar, domeniul este cuprins ntre valorile 32768 si 32767

TIMETIMESTAMPTIMESTAMP(m)- Ora n format ora-minut-secunda; de exemplu, 08-20-00. O valoare de tip data si ora, n format an-luna-zi ora-minut-secunda; de exemplu, 1976-01-05 00:00:00. Aceasta reprezentare este similara ce