Documente Academic
Documente Profesional
Documente Cultură
TEHNOLOGII WEB
Lect.dr. Adrian Runceanu
copyright@www.adrian.runceanu.ro
Curs 11
PHP
(Php: Hypertext Preprocessor)
(partea V)
18.04.2016
copyright@www.adrian.runceanu.ro
18.04.2016
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
18.04.2016
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
2. $_FILES[nume_input][tmp_name]
- returneaz numele complet (cu tot cu calea) fiierului
temporar care s-a creat n urma upload-ului.
- Atenie! acest nume poate s fie complet diferit fa
de cel original.
19.04.2016
copyright@www.adrian.runceanu.ro
10
copyright@www.adrian.runceanu.ro
11
copyright@www.adrian.runceanu.ro
12
copyright@www.adrian.runceanu.ro
13
copyright@www.adrian.runceanu.ro
18.04.2016
14
copyright@www.adrian.runceanu.ro
Variabile cookie
Utilizarea lor a pornit din necesitatea pstrrii
anumitor setri (opiuni) ale utilizatorului atunci cnd
acesta intr pe un anumit site, pentru a nu mai fi
nevoit sa le specifice la fiecare intrare.
Mecanismul care st la baza acestei probleme se
bazeaz pe memorarea, pe calculatorul vizitatorului
unui anumit site, a unor informaii sub forma unor
mici fiiere text.
Operaia poate fi comandat de pe server i tot de pe
server se poate comanda citirea, actualizarea sau
tergerea acestor mici fiiere text, numite uzual, prin
abuz de limbaj, variabile cookie.
18.04.2016
15
copyright@www.adrian.runceanu.ro
Variabile cookie
n PHP se poate lucra foarte uor cu variabilele cookie.
1. Pentru a crea o variabil cookie se utilizeaz funcia:
16
copyright@www.adrian.runceanu.ro
Variabile cookie
Observaii !
1) Nu pot exista mai mult de 20 de variabile cookie.
Dac se creeaz vreuna n plus, prima creat este tears
automat;
2) Pentru a terge o variabil cookie se creeaz o alta cu
acelai nume, dar cu data de expirare naintea celei
curente (de exemplu, time()-1).
18.04.2016
17
copyright@www.adrian.runceanu.ro
Variabile cookie
2. Pentru a citi (recupera) valoarea unei variabile cookie,
se utilizeaz coninutul unui tablou asociativ special,
predefinit, al limbajului PHP, numit
$HTTP_COOKIE_VARS[..]
Fiecare component a sa are ca indice numele unei
variabile cookie, iar ca valoare, reine valoarea
variabilei respective.
Exemplu: instruciunea de mai sus afieaz valoarea
variabilei cookie creat prin exemplul anterior:
echo $HTTP_COOKIE_VARS[limba_pref]; //afieaz
romana
18.04.2016
18
copyright@www.adrian.runceanu.ro
Variabile cookie
Exemplu:
Script-ul care urmeaz exemplific modul n care se pot
reine anumite informaii pe care utilizatorul le-a tastat
o dat.
Apelat pentru prima dat, atunci cnd nu exist
variabila cookie numit loc, se cere tastarea localitii
n care se afl cel care viziteaz pagina.
Dac acel vizitator reintr pe acel site, reapelnd scriptul, acesta va identifica variabila cookie loc, va prelua
direct localitatea memorat i, n loc ca utilizatorului s i
se cear din nou introducerea acesteia, i se va afia
direct un mesaj
18.04.2016
19
copyright@www.adrian.runceanu.ro
Variabile cookie
Fiier cookie.php
<?php
$loc=@$_POST['loc']; /* se testeaza mai nti dac s-a primit
informatia dintr-un form postat tot din cadrul acestei pagini, o
variabila numita loc, cu valoarea careia trebuie sa cream variabila
cookie */
if($loc!=NULL) // daca s-a primit
setcookie("loc",$loc,time()+24*3600); /* atunci se
seteaza variabila cookie cu valoarea primita, pentru o durata de 24
de ore */
else // daca nu s-a primit, se verifica daca variabila cookie
este deja creata
$loc=@$HTTP_COOKIE_VARS['loc'];
18.04.2016
20
copyright@www.adrian.runceanu.ro
Variabile cookie
if($loc!=NULL) // deci daca este creata
{
echo "Localitatea curenta este: ",$loc;
// apoi se poate schimba aceasta localitate, daca se doreste
21
copyright@www.adrian.runceanu.ro
Variabile cookie
else // in caz contrar, se creaza formularul care permite
introducerea localitatii
{
echo '<form action="cookie.php" method="post">';
echo 'Introdu localitatea<br><br>';
echo '<input type="text" name="loc"><br><br>';
echo '<input type="submit"
value="Salveaza"></form>';
}
?>
18.04.2016
22
copyright@www.adrian.runceanu.ro
18.04.2016
23
copyright@www.adrian.runceanu.ro
PHP - GD Library
Functiile din biblioteca grafica GD (Graphics Draw)
sunt folosite pentru crearea imaginilor.
Verificati folosind phpinfo(), daca serverul de gazduire
suporta aceste functii, inainte de a le utiliza.
Limbajul PHP nu este limitat doar la crearea de output
HTML, ci poate fi folosit i pentru a crea respectiv a
lucra cu diferite formate de imagini, incluznd gif, png,
jpg.
18.04.2016
24
copyright@www.adrian.runceanu.ro
PHP - GD Library
Limbajul PHP poate genera o imagine sub forma unui
flux de date (deci fr a o nregistra efectiv sub forma
unui fiier pe server) direct ctre browser.
Pentru a face funcional suportul grafic al limbajului,
este necesar utilizarea bibliotecii gd2.
n cazul pachetului XAMPP, aceasta este instalat i
activat n mod implicit. n cazul altor distribuii, acest
lucru trebuie fcut manual.
18.04.2016
25
copyright@www.adrian.runceanu.ro
PHP - GD Library
Pentru a insera in paginile web o imagine creata cu functiile din
PHP folositi eticheta img
<img src="imagine.php" alt="Imagine creata cu GD Library">
26
copyright@www.adrian.runceanu.ro
27
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
29
copyright@www.adrian.runceanu.ro
18.04.2016
30
copyright@www.adrian.runceanu.ro
6. imagedashedline(resurs_imagine,x0,y0,x1,y1,resurs_culoare)
- la fel ca imageline, doar c segmentul de dreapt desenat este
punctat.
Pentru ca segmentul punctat s fie vizibil, trebuie ca
imagesetthickness s seteze grosimea liniei la cel puin 2 pixeli;
18.04.2016
31
copyright@www.adrian.runceanu.ro
18.04.2016
32
copyright@www.adrian.runceanu.ro
18.04.2016
33
copyright@www.adrian.runceanu.ro
34
copyright@www.adrian.runceanu.ro
18.04.2016
35
copyright@www.adrian.runceanu.ro
18.04.2016
36
copyright@www.adrian.runceanu.ro
37
copyright@www.adrian.runceanu.ro
18.04.2016
38
copyright@www.adrian.runceanu.ro
18.04.2016
39
copyright@www.adrian.runceanu.ro
18.04.2016
40
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Sesiunile, reprezinta o functionalitate prin
care anumite informatii sunt mentinute de la o
pagina la alta.
O sesiune dureaza att timp ct utilizatorul
acceseaza un site si se ncheie odata cu
nchiderea browser-ului.
18.04.2016
41
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
1. Request-uri stateless i necesitatea sesiunilor
Accesarea unei pagini web este o operatie de sine
statatoare (stateless, sau fara stare).
Asta inseamna ca orice accesare ulterioara a
aceleiasi pagini (spre exemplu un refresh) se va face
fara ca serverul sa stie de accesarile anterioare.
La fel se ntmpl si atunci cnd sunt accesate mai
multe pagini diferite una dupa alta.
18.04.2016
42
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Spre exemplu, daca un utilizator acceseaza pagina a.php
i apoi b.php, codul PHP din a doua pagina (b.php) nu
poate sti ce s-a intmplat n a.php.
Exemplu:
n a.php se defineste o variabila ca mai jos:
$text = 'Mesaj din prima pagina';
n b.php exista o bucata de cod care afiseaza variabila
$text:
echo $text;
18.04.2016
43
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Datorita naturii stateless a request-urilor pagina
b.php nu va afisa nimic, intruct variabilele si toate
operatiunile executate in pagina a.php nu se
pastreaza de la o cerinta la alta.
n mod implicit nu exista nici o modalitate de a face
legatura intre cele doua accesari, si prin urmare
informatiile de pe prima pagina traiesc doar in
cadrul accesarii paginii respective si se pierd cnd
executia scriptului din a.php se termina.
18.04.2016
44
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Acest design poate ridica probleme, in special in
aplicatiile complexe, pentru ca informatiile nu
persista de la o pagina la alta.
Este adevarat ca exista cteva moduri prin care mici
cantitati de date pot fi transmise catre o alta pagina
spre exemplu, prin formulare, dar acestea nu sunt
viabile pentru aplicatii mari, cum ar fi o aplicatie de
email, sau un site e-commerce.
Din fericire, PHP ofera posibilitatea de a persista
informatiile pe parcursul navigarii, prin intermediul
sesiunilor (sessions).
18.04.2016
45
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
2. Sesiuni n PHP
18.04.2016
46
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
3. Mecanismul de funcionare a sesiunilor n PHP
n momentul n care un script apeleaza funcia session_start()
pentru prima data ntr-o sesiune de lucru, se transmite un
cookie catre browser-ul clientului (un header de tipul SetCookie).
Fiind vorba de un cookie, este necesar ca funcia
session_start() sa fie apelata inaintea oricarei instructiuni ce
afiseaza ceva (print, echo, etc) si inaintea oricarui cod HTML.
Cookie-ul transmis contine un identificator ce poarta numele
de Session ID, pe baza caruia se poate face distinctie intre
sesiunea curenta si alte sesiuni ale altor utilizatori ce acceseaza
site-ul in acel moment.
18.04.2016
47
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
n cazul in care browser-ul utilizatorului nu accepta cookie-uri,
identificatorul de sesiune va fi transmis printr-un parametru
GET, in forma script.php?PHPSESSID=[session id] (se va face
practic un redirect automat la aceeasi pagina avnd specificat
parametrul n URL).
Este apoi responsabilitatea programatorului sa includa manual
acest identificator in toate celelalte link-uri de pe pagina,
asigurndu-se ca toate paginile vor fi accesate cu acest
parametru.
Aceste situatii sunt insa rare, iar in exemplele ce urmeaza vom
considera ca browser-ele au mereu cookie-urile activate, astfel
ca nu va trebui sa avem grija sa transmitem manual Session IDul.
18.04.2016
Tehnologii WEB - curs
48
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
n momentul n care se acceseaza din nou aceeasi pagina, sau o
alta din cadrul aceluiasi site, identificatorul de sesiune este
transmis de catre browser (ca orice cookie existent in browser).
Astfel, orice script PHP are acces la Session ID-ul creat initial,
fiind capabil sa acceseze sesiunea corecta.
Mai este nevoie de ceva insa: pentru a putea avea acces la
informatiile persistate, un script trebuie sa apeleze
session_start().
De aceasta data, existnd deja un Session ID disponibil, PHP va
sti ca nu trebuie creata o sesiune noua ci continuata una
existenta.
Asadar, session_start() are doua functionalitati: sa porneasca o
sesiune noua (atunci cnd nu exista un Session ID) sau sa
continue o sesiune existenta, identificata printr-un Session ID.
18.04.2016
49
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Exista o funcie care returneaza Session ID-ul curent: session_id().
Aceasta este utila cnd este nevoie ca identificatorul sa fie
transmis in URL. Alternativ se poate folosi constanta globala SID.
50
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
<?php
session_start();
echo session_id();
echo SID; // are acelasi efect ca instructiunea anterioara
session_write_close(); // permite inchiderea sesiunii in
script-ul curent
?>
18.04.2016
51
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
4. Accesarea datelor
Din momentul in care scriptul PHP apeleaza session_start(),
acesta poate incepe deja sa stocheze date ce vor fi persistate.
n limbajul programatorilor de PHP se foloseste expresia sa
pastreze date in sesiune sau pe sesiune.
Aceste date sunt gestionate de catre limbajul PHP (salvate,
preluate, etc) si nu este esential pentru programator sa
cunoasca mecanismul intern de manipulare a acestora.
Salvarea datelor pe sesiune se face prin intermediul vectorului
superglobal $_SESSION.
Exista si o funcie ce permite inregistrarea datelor pe sesiune (nu
si modificarea lor), dar folosirea acesteia nu este recomandata.
Funcia se numeste session_register() si a fost marcata ca
invechita in versiunea 5.3 a limbajului PHP.
18.04.2016
52
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
Citirea datelor persistente se poate realiza tot prin intermediul
$_SESSION:
<?php
session_start();
// inregistrarea datelor in sesiune
$_SESSION['text'] = 'Mesaj persistat';
// citirea din sesiune
echo $_SESSION['text'];
18.04.2016
53
copyright@www.adrian.runceanu.ro
Sesiuni in PHP
// pe sesiune se pot inregistra aproape orice tipuri de date
$vector = array('a', 'b', 'c');
$_SESSION['litere'] = $vector;
// accesez o parte din vectorul stocat
echo $_SESSION['litere'][0]; // afiseaza a
echo $_SESSION['litere'][2]; // afiseaza c
?>
18.04.2016
54
copyright@www.adrian.runceanu.ro
Bibliografie:
1. Adrian Runceanu, Mihaela Runceanu, Tehnologii si
aplicatii web ndrumar de laborator, Editura
Academica Brncui, Trgu-Jiu, 2009, ISBN 978-973144-302-7
2. http://php.net/manual/en/book.image.php
ntrebri?
18.04.2016
55
copyright@www.adrian.runceanu.ro
Studiu individual:
http://php.punctsivirgula.ro/
http://www.w3schools.com/php/
http://www.tizag.com/phpT/examples/formex.p
hp
https://www.codingunit.com/category/phptutorials
18.04.2016
56