+ All Categories
Home > Documents > tehnologii web - runceanu.rovariabilelor corespunzatoare de care dispune scriptul de prelucrare a...

tehnologii web - runceanu.rovariabilelor corespunzatoare de care dispune scriptul de prelucrare a...

Date post: 18-Jan-2020
Category:
Upload: others
View: 8 times
Download: 0 times
Share this document with a friend
102
Lector univ. dr. Adrian Runceanu Tehnologii Web 1 Universitatea Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu
Transcript

Lector univ. dr. Adrian Runceanu

Tehnologii Web

1

Universitatea “Constantin Brâncuşi” din Târgu-JiuFacultatea de Inginerie

Departamentul de Automatică, Energie şi Mediu

Curs 11

Limbajul PHP(partea V)

2

curs 11

2. Lucrul cu directoare şi fişiere3. Utilizarea datelor introduse în formularele XHTML

3.1. Preluarea datelor introduse in formulare3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

3

2. Lucrul cu directoare şi fisiere

• Dupa cum se stie, prin intermediul unui limbaj de programare sunt posibile crearea si manipularea structurile de date.

• Aceste structuri de date pot fi:1. tranzitorii (stocate in memorie, tablouri, obiecte)

sau 2. permanente (stocate in fisiere sau in baze de date)

• Prin intermediul unor functii specifice, este posibil ca in PHP (ca si in alte limbaje) sa se citeasca si sa se scrie date din/in fisiere.

Tehnologii WEB

4

De asemenea, pot fi efectuate si alte operatiuni cu directoare si fisiere, dintre care amintim:

1. crearea, redenumirea si stergerea directoarelor2. crearea, copierea, redenumirea si stergerea

fisierelor3. obtinerea si modificarea atributelor fisierelor4. citirea si afisarea continutului directoarelor5. modificarea permisiunilor fisierelor6. includerea continutului fisierelor in structuri de

date native7. cautarea in fisiere pe baza unui sablon specificat

Tehnologii WEB

5

• Functiile utilizate pentru lucrul cu directoare si fisiere sunt incluse in nucleul PHP, nefiind necesara instalarea unor extensii specifice.

• Indiferent de platforma pe care este folositPHP - UNIX/Linux sau Windows - pentrulucrul cu fisiere si cataloage este utilizatmodelul preluat din prima platformaamintita.

Tehnologii WEB

6

• Trebuie sa se tina seama ca utilizarea functiilor destinate lucrului cu directoare si fisiere, poate avea rezultatele asteptate numai daca exista permisiuni de acces corespunzatoare.

• In acest sens, trebuie avut in vedere ca procesorul PHP(care interpreteaza si executa scripturile) ruleaza (ca si serverul Web) intr-un cont de utilizator cu permisiuni de acces restranse (numit - de cele mai multe ori nobody), care nu trebuie confundat cu contul sub care utilizatorul are acces FTP sau direct (prin intermediul shell-ului) la directoarele si fisierele al caror proprietar este.

Tehnologii WEB

7

• De asemenea, trebuie sa se tina seama ca unele dintre aceste functii pot fi utilizate numai pe platforma Windows sau, dimpotriva, numai pe platforma UNIX/Linux.

• Serverul Web (Apache) poate livra utilizatorilor fisiere situate numai sub radacina documentelor (in Apache, aceasta este specificata in httpd.conf ca valoare a directivei DocumentRoot).

Tehnologii WEB

8

• In schimb, PHP poate accesa fisiere aflate in orice locatie, cu conditia ca permisiunile de acces si directiva include_path (in php.ini) sa fie setate corect.

• De exemplu, daca radacina documentelor este /usr/local/apache2/htdocs, Apache va putea servi documente aflate numai in acest director, precum si in subdirectoarele sale.

• In schimb, PHP poate deschide, citi si scrie in fisiere situate in oricare director, in conditiile mentionate.

Tehnologii WEB

9

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

10

3. Utilizarea datelor introduse în formularele XHTML

O modalitate importanta de interactiune intre utilizatori si aplicatiile Web consta in introducerea/selectarea unor date in/din formularele XHTML si trimiterea acestora unui script de prelucrare care ruleaza pe server.

Datele trimise pot fi utilizate in diverse scopuri, dintre care mentionam:

1. autentificarea utilizatorilor2. precizarea unor criterii pentru selectarea

informatiilor stocate pe server si care vor fi livrate ulterior utilizatorilor

3. furnizarea unor informatii confidentiale (numere de card de credit, parole etc.)

Tehnologii WEB

11

3.1. Preluarea datelor introduse in formulare

• Incepand cu versiunea PHP 4.1.0, datele introduse in formulare si trimise server-ului sunt disponibile in tablourile asociative (variabile superglobale) $_GET, $_POST si $_REQUEST.

• Cheile elementelor tablourilor amintite sunt:1. numele campurilor formularului2. iar valorile elementelor sunt reprezentate de:

• datele introduse de utilizatori (pentru campurile de tip text, password, textarea)

• sau de optiunile facute de acestia (pentru campurile de tip radio, checkbox, hidden si select)

Tehnologii WEB

12

3.1.1. Date trimise prin metoda GET

• Datele trimise scriptului prin metoda GET vor fi disponibile in scriptul de prelucrare a acestora prin intermediul tablourilor superglobale $_GETsi $_REQUEST.

• In continuare este prezentat un exemplu simplu de utilizare a acestei metode, care include fisierele date.html si afisare.php.

Tehnologii WEB

13

Fisierul date.html va avea urmatorul continut:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

<title>Utilizarea metodei GET</title> </head>

<body><table><form method="get" action="afisare.php"> <tr><td>Nume</td>

<td><input type="text" name="nume"/></td></tr><tr><td>Prenume</td>

<td><input type="text" name="prenume" /></td></tr> <tr><td><input type="submit" value="Trimite" /></td>

<td><input type="reset" /></td></tr> </form> </table>

</body> </html>

Tehnologii WEB

14

Scriptul de prelucrare afisare.php va avea urmatorul continut:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN'

"http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd": <html xmlns="http://www.w3.org/1999/xhtml"> <head>

<title>Afisarea datelor trimise folosind metoda GET</title></head> <body>

<?phpif(!empty($_GET['nume']) && !empty($_GET['prenume'])) {

echo "Nume: ".$_GET['nume']."<br />"; echo "Prenume: ".$_GET['prenume'];

} else header("Location: date.html"); ?>

</body> </html>

Tehnologii WEB

15

• In cazul in care utilizatorul completeaza ambele campuri ale formularului (se remarca folosirea functiei empty()), scriptul de prelucrare inclus in fisierul afisare va afisa continutul acestora.

• In caz contrar, browserul va afisa din nou formularul de introducere a datelor.

• Reafisarea formularului se realizeaza dupa ce serverul trimite browser-ului antetul Locationavand ca valoare numele fisierului date.html.

Tehnologii WEB

16

• Dupa cum se poate constata, numele si prenumele utilizatorului se introduce in campurile input de tip text ale caror atribut name au valorile "nume" si, respectiv "prenume".

• Aceste date sunt preluate, in scriptul de prelucrare afisare.php elementele $_GET[‘nume’] si $_GET[‘prenume’] ale tabloului superglobal $_GET.

• De asemenea, datele pot fi preluate si in tabloul superglobal $_REQUEST, in mod similar.

Tehnologii WEB

17

3.1.2. Date trimise prin metoda POST

• Aplicatia anterioara poate fi modificata pentru a utiliza metoda POST in

scopul transmiterii catre server a datelor introduse in formular.

• Astfel, atributul method al elementului form trebuie sa aiba valoarea

"post", iar in scriptul afisare.php trebuie sa se utilizeze secventa PHP

urmatoare:

<?php

if(!empty($_POST['nume']) && !empty($_POST['prenume'])) {

echo "Nume: ".$_POST['nume']."<br />";

echo "Prenume: ".$_POST['prenume'];

}

else header("Location: date.html");

?>

• De asemenea, datele trimise prin metoda POST sunt disponibile si in

superglobal $_REQUEST.

Tehnologii WEB

18

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

19

3.2. Elemente XHTML si variabile asociate

Elementele continute in formularul XHTML si al variabilelor corespunzatoare de care dispune scriptul de prelucrare a datelor:

3.2.1. Elementul input• In cazul unui element input de tip text, scriptul de prelucrare

dispune in tablourile $_GET si $_REQUEST (daca se utilizeazametoda GET) si, respectiv, $_POST si $_REQUEST (daca se utilizeaza metoda POST) de cate un element a carui cheiecoincide cu numele elementului (valoarea atributului name al acestuia) si a carui valoare coincide cu continutul introdus de utilizator al acestui element sau cu valoarea atributului value, daca aceasta este precizata.

Tehnologii WEB

20

• Daca utilizatorul nu introduce nimic in campul text, elementul respectiv al tablourilor va avea valoarea NULL sau sirul vid.

• In cazul unui element input de tip buton radio, conform modalitatii uzuale de folosire a acestui tip, trebuie create in formular cel putin doua butoane cu nume (valorile atributului name) identice, dar cu valori (valorile atributului value) diferite.

• Scriptul de prelucrare dispune in tablourile amintite de cate un element a carui cheie coincide cu numele butonului radio si a carui valoare este egala cu valoarea butonului selectat de utilizator.

• Daca utilizatorul nu alege nici o optiune (adica nu este selectat nici un buton), elementul respectiv va avea valoarea null.

Tehnologii WEB

21

• In cazul unui element input de tip checkbox (caseta de validare), scriptul de prelucrare dispune in tablourile amintite de cate un element a carui cheie coincide cu numele casetei checkbox (valoarea atributului name) si a carui valoare este egala cu cea a atributului value al casetei.

• Daca utilizatorul nu selecteaza caseta, elementul respectiv va avea valoarea NULL.

• Dupa cum se stie, pentru a verifica daca o variabila PHPare valoarea NULL, aceasta se transmite ca argument functiei isset().

• Functia va intoarce true, daca variabila are o valoare diferita de null, si false, in caz contrar.

Tehnologii WEB

22

3.2.2. Elementul select

In cazul in care formularul include o lista de selectare, scriptul de prelucrare dispune in tablourile amintite anterior de cate un element a carui cheie coincide cu numele elementului select (valoarea atributului name al acestuia) si a carui valoare este egala cu cea a atributului value al elementului optionselectat de utilizator.

Tehnologii WEB

23

3.2.3. Elementul textarea

In cazul in care formularul include o caseta multiline, scriptul de prelucrare dispune in tablourile $_GET si$_REQUEST (daca se utilizeaza metoda GET) si, respectiv, $_POST si $_REQUEST (daca se utilizeaza metoda POST) de cate un element a carui cheie este egala cu numeleelementului textarea (valoarea atributului name al acestuia) si a carui valoare este un sir care coincide cu textul introdus de utilizator in caseta.

• Daca utilizatorul nu introduce nimic, valoarea respectiva va fi null.

Tehnologii WEB

24

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

25

3.3. Alte modalitati de trimitere a datelor

• Datele incluse in campurile unui formular pot fi trimise scriptului de prelucrare si fara apasarea unui buton de tip submit.

• Procedeul presupune utilizarea unei modalitati de executie a metodei submit() a obiectului Form(metoda JavaScript).

Tehnologii WEB

26

Exemplu (scriptul va fi salvat in fisierul culori.php):

<?phpif(!isset($_GET['culoare']))

$culoare="white"; else

$culoare=$ GET['culoare'];?>

Tehnologii WEB

27

<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"DTD/xhtmll-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

<head><title>Schimba culoarea de fundal</title>

</head><body bgcolor="<?php echo $culoare; ?>">

<form action="culori.php"><select name="culoare" onChange="submit();">

Tehnologii WEB

28

<?phpecho "<option value=''></option>"; echo "<option value=\"red\""; if($culoare=="red")

echo " selected=\"selected\""; echo ">rosu</option>"; echo "<option value=\"yellow\""; if ($culoare=="yellow")

echo " selected=\"selected\""; echo ">galben</option>"; echo "<option value=\"green\""; if($culoare=="green")

echo " selected=\"selected\""; echo ">verde</option>"; echo "</select>";

?></form>

</body> </html>

Tehnologii WEB

29

• Odata cu selectia unei culori din lista oferita, se produce evenimentul JavaScript onChange, care determina un apel al metodei submit() a obiectului Form.

• Executia acestei metode determina trimiterea catre scriptul de prelucrare (aici tot culori.php) a valorii elementului select (al carui atribut name are valoarea "culoare").

• Aceasta este chiar valoarea atributului value al elementului option selectat.

• Culoarea selectata va fi atribuita ca valoare variabilei $culoare prin intermediul elementului $GET[‘culoare’], care va fi in continuare pentru stabilirea culorii de fundal a paginii.

Tehnologii WEB

30

Modalitatea prezentata poate fi utilizata si in alte scopuri, ca, de exemplu, selectia si transmiterea unei optiuni dintr-o lista de selectare, optiune care va fi utilizata in scriptul de prelucrare drept cuvant-cheie pentru cautarea intr-o baza de date (intr-o aplicatie de comert electronic).

Tehnologii WEB

31

• Este posibil ca datele alese de client sa fie trimise pe server fara a se utiliza un formular.

• In acest caz, ele sunt adaugate, prin intermediul unei legaturi, URL-ului scriptului de prelucrare, ca in exemplul urmator (salvat in fisierul culori2.php):

<?phpif(!isset($_GET ['culoare']))

$culoare="white"; else

$culoare=$_GET ['culoare']; ?>

Tehnologii WEB

32

<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"DTD/xhtmll-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

<head><title>Schimba culoarea de fundal</title>

</head> <body bgcolor="<?php echo $culoare; ?>"><a href="culori2.php?culoare=red"> Rosu</a><br /><a href="culori2.php?culoare=yellow"> Galben</a><br /> <a href="culori2.php?culoare=green"> Verde</a><br /> </body>

</html>

Tehnologii WEB

33

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

34

4. Generarea dinamică a continuţului

• PHP ofera posibilitatea generarii dinamice a continutului afisat in browserul utilizatorilor, prin intermediul unor instructiuni si functii.

• Alaturi de XHTML, pot fi generate si alte formate textuale (XML), dar si formate de alta natura (decat cele grafice).

• In cazul celor mai multe formate, inainte de a se trimite browser-ului continutul general dinamic, este necesar sa se trimita explicit acestuia prin intermediul functiei PHPheader(), un antet Content-Type cu o valoare corespunzatoare formatului.

Tehnologii WEB

35

4.1. Generarea dinamică a formatelor textuale

• Dupa cum s-a putut constat deja, formatele textuale sunt generate prin intermediul instructiunilor:

1. echo (numita si instructiune de reflectare)2. print

• Acestea pot fi utilizate si ca functii (echo() si print()).

Tehnologii WEB

36

• Cea mai simpla modalitate de folosire a instructiunii echo consta in afisarea unui sir de caractere, ca in urmatoarele exemple echivalente:

echo "PHP este cel mai utilizat server de aplicatii."; echo ("PHP este cel mai utilizat server de aplicatii.");

• Pot fi utilizate argumente multiple, separate prin virgula, dar numai cand echo se foloseste ca instructiune:

echo "PHP este", " cel mai utilizat ", "server de aplicatii.";

Tehnologii WEB

37

4.1.1. Generarea formatului XHTML

• Prin intermediul instructiunii echo poate fi generat dinamic orice marcaj/secventa (X)HTML.

• In scopul mentionat, aceasta va fi inclusa intre ghilimele sau apostrofuri, ca in exemplul urmator:

echo "<center><h2><b>Primul capitol</b></h2></center>";

Tehnologii WEB

38

• Folosind echo sau print, pot fi afisate in browser valorile

unor variabile, impreuna cu date de tip sir de caractere

sau marcaje (X)HTML, ca in exemplul urmator:

$temp=300;

echo "<b>Temperatura corpului este de $temp K.</b>";// In browser se va afisa Temperatura corpului este de 300 K.

echo "<b>Temperatura corpului este de ".$temp."

K.</b>";// In browser se va afisa Temperatura corpului este de 300 K.

Tehnologii WEB

39

• Argumentul primei instructiuni echo trebuie inclus obligatoriu intre ghilimele, deoarece - in acest caz -PHP evalueaza variabila $temp la valoarea sa (adica 300).

• Daca s-ar fi folosit apostrofuri, PHP nu ar fi realizat evaluarea, si - in consecinta – browser-ul ar fi afisat sirul $temp.

Tehnologii WEB

40

• Instructiunea print este similara cu echo, existand totusi cateva diferente:

1. echo accepta argumente multiple, in timp ce print accepta un singur argument

2. echo nu intoarce nici o valoare, iar printintoarce valoarea 1, daca afisarea a avut loc, si 0, in caz contrar

• Aceasta permite, spre deosebire echo, ca instructiunea print sa fie utilizata in expresii complexe.

Tehnologii WEB

41

4.1.2. Generarea formatului XML

• Daca se doreste afisarea/utilizarea in browser a unui document XML generat dinamic pe server, este necesar sa se trimita in prealabil navigatorului (folosind functia header()) un antet Content-Type, a carui valoare trebuie sa fie text/xml sau application/xml, astfel:

header("Content-Type: text/xml"); header ("Content-Type: application/xml") ;

Tehnologii WEB

42

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

43

4.2. Generarea dinamică a formatelor grafice

• Serverul de aplicatii PHP ofera posibilitatea generarii dinamice a imaginilor avand diverse formate raster (GIF, PNG, JPEG), prin utilizarea unor functii incluse in biblioteca grafica GD (Graphics Draw).

• Dupa crearea unei imagini raster, aceasta va fi salvata intr-un fisier pe server sau trimisa browser-ului.

Tehnologii WEB

44

• In ambele cazuri, se utilizeaza o functie (imageif(), imagepng(), imagejpeg()), care permite, printre altele utilizarea formatului imaginii.

• Daca aceasta trebuie afisata in browser, este necesar inainte de apelul uneia dintre functiile respective, sa se trimita un antet Content-Type, care sa precizeze formatul imaginii.

• De exemplu, daca imaginea este in format PNG, se va trimite antetul Content-Type cu valoarea image/png header("Content-Type: image/png").

Tehnologii WEB

45

curs 11

3. Utilizarea datelor introduse în formularele XHTML3.1. Preluarea datelor introduse in formulare

3.1.1. Date trimise prin metoda GET3.1.2. Date trimise prin metoda POST

3.2. Elemente XHTML si variabile asociate3.2.1. Elementul input3.2.2. Elementul select3.2.3. Elementul textarea

3.3. Alte modalitati de trimitere a datelor4. Generarea dinamică a conţinutului

4.1. Generarea dinamică a formatelor textuale4.1.1. Generarea formatului XHTML4.1.2. Generarea formatului XML

4.2. Generarea dinamica a formatelor grafice4.3. Utilizarea mecanismului output buffering

Tehnologii WEB

46

4.3. Utilizarea mecanismului output buffering

• Scripturile PHP permit trimiterea catre client a unor anteturi HTTP (prin intermediul functiei header()) sau a unor variabile cookie (folosind functia setcookie()).

• Acestea trebuie trimise inaintea oricaror date (marcaje XHTML, linii vide sau date generate dinamic).

Tehnologii WEB

47

• Mecanismul cunoscut sub numele de output buffering ofera posibilitatea trimiterii anteturilor HTTP si a variabilelor cookie, chiar si dupa ce scriptul a inceput sa genereze date de iesire (prin intermediul instructiunii echo).

• Acest lucru este posibil, deoarece datele sunt pastrate in buffer-ul de iesire si trimise ulterior.

Tehnologii WEB

48

• Activarea sau dezactivarea implicita a mecanismului amintit se realizeaza intermediul directivei output_buffering, in php.ini (fisierul de configurare al PHP).

• Pentru activare, se atribuie directivei o valoare, care fixeaza (in octeti) o limita superioara pentru buffer-ul de iesire utilizat, ca in exemplul urmator:

output_buffering=4096

Tehnologii WEB

49

Alte elemente în PHP

1. Upload de fişiere utilizand PHP

2. Variabile cookie

3. Programare grafică în PHP

4. Sesiuni în PHP

50

Upload de fişiere utilizand PHP

• Prin acţiunea de upload, utilizatorul poate încărca, prin intermediul unei pagini web, un întreg fişier (indiferent că este un fişier binar sau un fişier text) pe server-ul pe care este stocată şi pagina respectivă.

• Protocol de transferare de fişiere între două calculatoare care sunt legate între ele - FTP (File Transfer Protocol), care deşi este o metodă eficientă de transfer, este greoi de folosit de un utilizator nespecializat (necesită specificarea adresei calculatorului la care ne conectăm, un nume de utilizator şi o parolă, precum şi un program specializat).

51

Upload de fişiere utilizand PHP

• Cea mai frecventă acţiune de upload din parte unui utilizator obişnuit este întâlnită la ataşarea unui fişier la un e-mail.

• Care este principiul de funcţionare ?

52

Upload de fişiere utilizand PHP

• În primul rând, trebuie conceput un form special, în care se vor insera unul sau mai multe elemente de tip <input type=”file”...>.

• Acestea se prezintă sub forma unor textbox-uri în dreapta cărora este prezent un buton ”Browse”, ca în figura.

• Un click fie în interiorul textbox-ului, fie pe butonul ”Browse” va permite alegerea unui fişier de pe disc pentru a fi încărcat.

53

Upload de fişiere utilizand PHP

• În etapa următoare, după ce utilizatorul apasă, tot în acel form, butonul de postare date, fişierul ales pentru upload va fi trimis către server, tot prin intermediul unui script (cel specificat în cadrul atributului ”action=...” al formularului) şi copiat într-o locaţie temporară.

• Actvitatea programatorului PHP este ca el să copieze fişierul la locaţia sa definitivă.

• Nota: Pentru ca upload-ul să funcţioneze, atât directorul temporar în care este încărcat fişierul, cât şi directorul în care vom muta acest fişier trebuie să aibă drepturi de scriere pentru orice utilizator de pe Internet.

54

Upload de fişiere utilizand PHP

• În cadrul script-ului PHP care se ocupă de preluarea fişierului încărcat, ne vom folosi de un tablou predefinit al limbajului, şi anume $_FILES, care ne va furniza date despre fişierul încărcat, şi anume (primul parametru al lui $_FILES este dat de numele input-ului de type=”file”):

1. $_FILES[nume_input][‘name’] – returnează numele şiextensia fişierului pe care l-am upload-at;2. $_FILES[nume_input][‘tmp_name’] – returnează numele complet (cu tot cu calea) fişierului temporar care s-a creat în urma upload-ului. Atenţie! acest nume poate să fie complet diferit faţă de cel original.

55

Upload de fişiere utilizand PHP

3. $_FILES[nume_input][‘type’] – returnează tipul mime al fişierului (un string, de exemplu: application/octet-stream sau image/gif. Valoarea sa nu poate fi garantată ca fiind corectă;

4. $_FILES[nume_input][‘size’] – returnează dimensiunea (în octeţi) a fişierului upload-at

5. $_FILES[nume_input][‘error’] – returnează codul de eroare al operaţiei de upload asupra fişierului dat de nume_input. Dacă operaţia s-a încheiat cu succes, are valoarea 0.

56

Upload de fişiere utilizand PHP

Exemplu:

• Următoarele fișiere realizează o aplicaţie prin care putem upload-a un fişier în acelaşi director în care se află şi sursele aplicaţiei.

• Primul fişier reprezintă un HTML obişnuit, ce conţine doar form-ul prin care se poate face upload-ul fişierului, iar al doilea fişier reprezintă script-ul PHP care preia fişierul upload-at şi îl mută în directorul curent:

57

Upload de fişiere utilizand PHP

<form enctype="multipart/form-data" action="upload.php" method="post"><!-- este obligatoriu sa specificati atributul enctype="multipart/form-data", in cazcontrar nu va fi permisa upload-area de fisiere. Atributul action, specifica numele script-ului care se va ocupa de preluarea fisierului upload-at -->

<input type="hidden" name="MAX_FILE_SIZE" value="30000"><!-- acest control de tip hidden permite stabilirea unei limite maxime a dimensiunii fisierului care urmeaza a fi upload-at. -->

Alege un fisier pentru upload (sa aiba sub 30000 bytes):<br><!-- cu ajutorul acestui input type=”file” putem defini câmpul de tip upload din form -->

<input type="file" name="fisier_incarcat"><br><br><!-- de valoarea atributului sau ’name’, in cazul nostru ”fisier_incarcat” ne vom folosipentru a-l manipula din cadrul codului PHP in care se preia, in fisierul upload.php -->

<input type="submit" value="Incarca fisierul"></form>

58

Upload de fişiere utilizand PHP

Fisierul upload.php

<?phpif($_FILES['fisier_incarcat']['error']!=0) echo 'Upload nereusit, a aparut o eroare';else{move_uploaded_file($_FILES['fisier_incarcat']['tmp_name'],$_FILES['fisier_incarcat']['name']);/ * cu ajutorul functiei move_uploaded_file se muta fisierul de la locatia sa temporara la locatia sa definitiva, care în acest caz este directorul curent. Parametrii acestei funcţii sunt sursa, respectiv destinatia */

echo 'Fisierul a fost incarcat<br>';echo 'Dimensiunea sa este de ',$_FILES['fisier_incarcat']['size'],' octeti';}?>59

Alte elemente în PHP

1. Upload de fişiere utilizand PHP

2. Variabile cookie

3. Programare grafică în PHP

4. Sesiuni în PHP

60

Variabile cookie

• Utilizarea lor a pornit din necesitatea păstrării anumitor setări (opţiuni) ale utilizatorului atunci când 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 informaţii sub forma unor mici fişiere text.

• Operaţia poate fi comandată de pe server şi tot de pe server se poate comanda citirea, actualizarea sau ştergerea acestor mici fişiere text, numite uzual, prin abuz de limbaj, variabile cookie.

61

Variabile cookie

• În PHP se poate lucra foarte uşor cu variabilele cookie.

1. Pentru a crea o variabilă cookie se utilizează funcţia:

setcookie(nume_variabilă, valoare, dată_expirare);

Exemplu: în instrucţiunea de mai jos este creată o variabilă cookie numită limba_pref.

Variabila reţine valoarea ”romana” şi expiră într-o oră:setcookie(limba_pref, ”romana”, time()+3600);

62

Variabile cookie

Observaţii !

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 acelaşi nume, dar cu data de expirare înaintea celei curente (de exemplu, time()-1).

63

Variabile cookie

2. Pentru a citi (recupera) valoarea unei variabile cookie, se utilizează conţinutul 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, reţine valoareavariabilei respective.Exemplu: instrucţiunea de mai sus afişează valoarea variabilei cookie creată prin exemplul anterior:echo $HTTP_COOKIE_VARS[”limba_pref”]; //afişează ”romana”

64

Variabile cookie

Exemplu: Script-ul care urmează exemplifică modul în care se pot reţine anumite informaţii pe care utilizatorul le-a tastat o dată. Apelat pentru prima dată, atunci când nu există variabila cookie numită ”loc”, se cere tastarea localităţii în care se află cel care vizitează pagina. Dacă acel vizitator reintră pe acel site, reapelând script-ul, 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 afişa direct un mesaj

65

Variabile cookie

Fișier cookie.php<?php$loc=@$_POST['loc']; /* se testeaza mai întâi 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 primitsetcookie("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'];

66

Variabile cookie

if($loc!=NULL) // deci daca este creata

{echo "Localitatea curenta este: ",$loc;// apoi se poate schimba aceasta localitate, daca se doreste

echo '<form action="cookie.php" method="post">';echo '<p align="right">';echo 'Schimba localitatea:';echo '<input type="text" name="loc"><br>';echo '<input type="submit" value="Schimba localitatea"> </p></form>';

}

67

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>';

}?>

68

Alte elemente în PHP

1. Upload de fişiere utilizand PHP

2. Variabile cookie

3. Programare grafică în PHP

4. Sesiuni în PHP

69

PHP - GD Library

• Functiile din biblioteca grafica GD (Graphics Draw) sunt folosite pentru crearea imaginilor.

• Verificati folosind phpinfo(), ca 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, incluzând gif, png, jpg.

70

PHP - GD Library

• Limbajul PHP poate genera o imagine sub forma unui flux de date (deci fără a o înregistra efectiv sub forma unui fişier pe server) direct către browser.

• Pentru a face funcţional suportul grafic al limbajului, este necesară utilizarea bibliotecii gd2.

• În cazul pachetului XAMPP, aceasta este instalată şi activată în mod implicit. În cazul altor distribuţii, acest lucru trebuie făcut manual.

71

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">

• In urmatorul exemplu vom genera o imagine in format JPEG, cu dimensiunile 200px x 100px, fond verde.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);ImageJPEG ($img, '', 100);

?>

72

PHP – programare grafica

• Iată câteva dintre cele mai importante funcţii care lucrează cu imagini:

1. header(string) - are ca efect trimiterea unui header HTTP. În acest caz, al lucrului cu imagini, ne interesează să trimitem browser-ului informaţii despre mime-type-ul imaginii create. Astfel, valorile pe care le putem da string-ului, în funcţie de tipul imaginii pe care o creăm, pot fi:• “Content-type: image/png” – pentru imaginile de tip png• “Content-type: image/jpeg” – pentru imaginile de tip jpg• “Content-type: image/gif” – pentru imaginile de tip gif• Este foarte important (în caz contrar se vor genera erori) ca

această funcţie să fie apelată înainte de trimiterea oricărui alt output din cadrul script-ului în care apare;

73

PHP – programare grafica

2. imagecreatetruecolor(lăţime, înălţime) - creează o resursă de tip imagine, pe 32 de biţi (truecolor) având lăţimea, respectiv înălţimea specificată. Rezultatul întors de această funcţie trebuie obligatoriu atribuit unei variabile, prin intermediul căreia se acceseaza în continuare imaginea.Imaginea este de fapt o matrice de pixeli. Orice punct din imagine se va putea referi prin coordonatele sale carteziene (x, y). Originea sistemului de coordonate se găseşte în coţul stânga-susal imaginii (0,0) iar axa Oy este îndreptată în jos. Valorile posibile pentru x şi y sunt numere întregi, cuprinse în intervalul 0..lăţime-1, respectiv 0..înălţime-1

74

PHP – programare grafica

• De exemplu, iată o reprezentare schematică a imaginii definite prin:

$imagine=imagecreatetruecolor(400, 300);

Exemplu de imagine cu puncte de coordonate (200,150) respectiv (300,75).

75

PHP – programare grafica

3. imagecolorallocate(resursă_imagine, roşu, verde, albastru) -creează o resursă de tip culoare, asociată imaginii specificată prin resursa din primul parametru. Rezultatul întors de această funcţie trebuie atribuit unei variabile, prin intermediul căreia vom accesa în continuare culoarea definită;

4. imagesetthickness(res_imag, thickness) - stabileşte grosimea liniilor la thickness pixeli, atunci când se desenează linii, dreptunghiuri, poligoane;

76

PHP – programare grafica

5. imageline(resursă_imagine,x0,y0,x1,y1,resursă_culoare) -desenează un segment de dreaptă, de culoarea specificată de resursă_culoare, în imaginea specificată de resursă_imagine, între punctele de coordonate (x0,y0) şi (x1,y1);

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 puţin 2 pixeli;

77

PHP – programare grafica

7. imageellipse(resursă_imagine,x0,y0,diam_x,diam_y,resursă_culoare) - desenează o elipsă cu axe paralele cu axele de coordonate, având centrul în punctul de coordonate (x0,y0) şi diametrul orizontal dat de diam_x respectiv cel vertical dat de diam_y;

8. imagerectangle(res_imag,x0,y0,x1,y1, resursă_culoare) –desenează un dreptunghi având colţurile diagonal opuse în punctele de coordonate (x0,y0) respectiv (x1,y1), cu culoarea dată de resursa res_culoare;

78

PHP – programare grafica

9. imagefilledrectangle(res_imag,x0,y0,x1,y1, resursă_culoare) –desenează un dreptunghi plin, cu colţurile diagonal opuse în punctele de coordonate (x0,y0) respectiv (x1,y1), de culoarea dată de resursa res_culoare;

10. imagefilledellipse(res_imag,x0,y0,diam_x,diam_y, resursă_culoare) - la fel ca imageellipse, doar că elipsa desenată este plină, având culoarea dată de resursă_culoare;

79

PHP – programare grafica

11. imagechar(res_imag,font,x0,y0,caracter, resursă_culoare) –afişează în imagine caracterul caracter, începând de la coordonatele (x0,y0) în dreapta şi în jos, având culoarea dată de resursă_culoare. font poate fi unul dintre font-urile predefinite 1, 2, 3, 4, 5, sau orice resursă de tip font încărcat prin imageloadfont();

12. imagestring(res_imag,font,x0,y0,caracter, resursă_culoare) –afişează în imagine string-ul string, începând de la coordonatele (x0,y0) în dreapta şi în jos, având culoarea dată de resursă_culoare. font poate fi unul dintre font-urile predefinite 1, 2, 3, 4, 5, sau orice resursă de tip font încărcat prin imageloadfont();

80

PHP – programare grafica

Adaugam in exemplul anterior textul "Proba text", cu caractere albe.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);$text = ImageColorAllocate ($img,255,255,255);ImageString ($img,5,10,10,"Proba text",$text);ImageJPEG ($img, '', 100);

?>

81

PHP – programare grafica

Cream o linie din punctul (10,90) in punctul (190,90). Referinta coordonatelor este coltul stanga sus.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);$col = ImageColorAllocate ($img,255,255,255);ImageLine ($img,10,90,190,90,$col);ImageJPEG ($img, '', 100);

?>

82

PHP – programare grafica

Completam exemplul anterior cu inca 2 linii pentru a desena un triunghi.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);$col = ImageColorAllocate ($img,255,255,255);ImageLine ($img,10,90,190,90,$col);ImageLine ($img,10,90,100,10,$col);ImageLine ($img,100,10,190,90,$col);ImageJPEG ($img, '', 100);

?>

83

PHP – programare grafica

Cream o elipsa in centrul imaginii (100,50), avand latimea 180 si inaltimea 80.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);$col = ImageColorAllocate ($img,255,255,255);ImageEllipse ($img,100,50,180,80,$col);ImageJPEG ($img, '', 100);

?>

84

PHP – programare grafica

Cream un trapez.

<?phpheader ("Content-type: image/jpeg");$img = ImageCreate (200,100);$fond = ImageColorAllocate ($img,0,200,0);$col = ImageColorAllocate ($img,255,255,255);ImagePolygon ($img,array(60,10,140,10,190,90,10,90),4,$col);ImageJPEG ($img, '', 100);

?>

85

Alte elemente în PHP

1. Upload de fişiere utilizand PHP

2. Variabile cookie

3. Programare grafică în PHP

4. Sesiuni în PHP

86

Sesiuni in PHP

• Sesiunile, reprezinta o functionalitate prin care anumite informatii sunt mentinute de la o pagina la alta.

• O sesiune dureaza atît timp cît utilizatorul acceseaza un site si se încheie odata cu închiderea browser-ului.

87

Sesiuni in PHP

1. Requesturi 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 întâmplă si atunci cînd sunt accesate mai multe pagini diferite una dupa alta.

88

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 intîmplat” î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;

89

Sesiuni in PHP

Datorita naturii stateless a request-urilor pagina b.php nu va afisa nimic, intrucît 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 cînd executia scriptului din a.php se termina.

90

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 cîteva 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).

91

Sesiuni in PHP

2. Sesiuni în PHP

În PHP o sesiune reprezinta perioada de timp in care mai multe scripturi PHP, accesate la momente diferite de timp, pot stoca si folosi informatii comune. O sesiune incepe atunci cînd un script apeleaza funcția

session_start() si se termina atunci cînd utilizatorul inchide browser-ul.

O sesiune se intinde pe mai multe request-uri (pe parcursul a mai multor accesari ale diferitelor pagini), iar pentru a identifica existenta unei sesiuni PHP poate folosi cookie-uri sau parametrii GET în URL-ul paginii.

92

Sesiuni in PHP

3. Mecanismul de funcționare a sesiunilor în PHP

În momentul în care un script apeleaza funcția session_start() pentru prima data într-o sesiune de lucru, se transmite un cookie catre browser-ul clientului (un header de tipul „Set-Cookie‟).

Fiind vorba de un cookie, este necesar ca funcția 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.

93

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 avînd specificat parametrul în URL).

Este apoi responsabilitatea programatorului sa includa manual acest identificator in toate celelalte link-uri de pe pagina, asigurîndu-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 ID-ul.

94

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, existînd 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 cînd nu exista un Session ID) sau sa

continue o sesiune existenta, identificata printr-un Session ID.

95

Sesiuni in PHP

Exista o funcție care returneaza Session ID-ul curent: session_id().

Aceasta este utila cînd este nevoie ca identificatorul sa fie transmis in URL. Alternativ se poate folosi constanta globala SID.

De asemenea exista o funcție pe permite inchiderea unei sesiuni pe parcursul executiei scriptului curent.

Închiderea sesiunii inseamna oprirea posibilitatii de a scrie/citi date, nu stergerea datelor salvate deja.

Datele ramîn salvate si pot fi accesate din nou dupa apelarea funcției session_start().

96

Sesiuni in PHP

<?phpsession_start();echo session_id();echo SID; // are acelasi efect ca instructiunea anterioara

session_write_close(); // permite inchiderea sesiunii in script-ul curent

?>

97

Sesiuni in PHP

4. Accesarea datelorDin 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 funcție ce permite inregistrarea datelor pe sesiune (nu si modificarea lor), dar folosirea acesteia nu este recomandata.

Funcția se numeste session_register() si a fost marcata ca invechita in versiunea 5.3 a limbajului PHP.

98

Sesiuni in PHP

Citirea datelor persistente se poate realiza tot prin intermediul $_SESSION:

<?phpsession_start();// inregistrarea datelor in sesiune$_SESSION['text'] = 'Mesaj persistat';// citirea din sesiuneecho $_SESSION['text'];

99

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 stocatecho $_SESSION['litere'][0]; // afiseaza aecho $_SESSION['litere'][2]; // afiseaza c

?>Scrierea si citirea datelor de sesiune se realizeaza practic la fel ca manipularea unui vector asociativ, ceea ce face aceasta functionalitate usor de folosit.

100

Referinte

• http://php.net/manual/en/book.image.php

Tehnologii WEB

101

Întrebări?

102


Recommended