Documente Academic
Documente Profesional
Documente Cultură
www.infoacademy.net
Ionut Cristian Morar
rev. 255
1. NOTIUNI DE BAZA PHP
Cuprinsul materialului:
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
1
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
1.1. PHP - primul contact
PHP este un limbaj de programare interpretat1, orientat catre dezvoltarea web de tip open source2. El a fost creat
in anul 1995 de catre Rasmus Lerdorf si numit initial PHP/FI (Personal Home Page/Forms Interpreter), fiind
mai tarziu rescris de la zero de catre Andi Gutmans si Zeev Suraski si redenumit simplu PHP (PHP Hypertext
Processor). Cei doi sunt creatorii nucleului actual al PHP (denumit Zend - o combinatie a numelor Zeev si
Andi) si fondatorii companiei Zend Technologies. Versiunea curenta de PHP este 7.
Limbajul PHP s-a inspirat din multe alte limbaje; el a pornit ca limbaj de programare procedural3, cu sintaxa
asemanatoare cu C sau Perl, iar odata cu versiunea 3 i s-au adaugat facilitati de programare orientata pe obiect4,
multe dintre ele asemanatoare sau identice cu cele din Java sau C++. Toate acestea fac ca limbajul PHP sa fie,
in ziua de astazi, accesibil programatorilor de orice formatie.
1. Limbajul de programare PHP in sine (tipuri de date, operatori, instructiuni, functii etc.)
2. Modul de interactiune cu paginile web (scrise in HTML, XML etc)
3. Modul de interactiune cu bazele de date
4. Rolul PHP in administrarea/dezvoltarea mediilor web
1
Interpretor = program care executa instructiuni scrise intr-un limbaj de programare
2
Open source = principiu conform caruia codul sursa al programelor trebuie sa fie disponibil si modificabil de catre utilizatori
3
Limbaj procedural = limbaj in cadrul caruia codul este divizat in functii (proceduri) care pot fi apelate oricand, independent
4
Programare orientata pe obiect = abordare conform careia un program este un ansamblu de obiecte care interactioneaza
5
Script = fisier cu o succesiune de instructiuni ale unui limbaj de programare interpretat
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
2
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
Q: De ce se genereaza HTML folosind PHP? Nu se puteau face site-uri dinamice doar cu
HTML?
A: HTML nu este un limbaj de programare – el nu are instructiuni decizionale, operatori, structuri de
control al executiei etc -, ci doar o modalitate de a specifica structura si formatarea documentelor ce ii
sunt prezentate utilizatorului in browser. Daca dorim ca utilizatorul sa vada continut diferit in functie de
diversele lui caracteristici (adresa IP, browser, faptul de a-si fi introdus sau nu username si parola la
intrarea pe site etc) este necesar un program care sa ia decizii in functie de aceste caracteristici si sa-i
trimita utilizatorului un continut personalizat.
1.2. Interactiunea intre PHP, serverul web, serverul de baze de date si clienti
Serverul web este o aplicatie care publica continut de natura diversa (text, imagini, sunete, animatii, jocuri etc)
accesat de catre alte aplicatii ce reprezinta clientii sai. Dupa cum se va vedea, continutul publicat se poate gasi
sub forma de fisiere in memoria serverului, sau poate fi generat pe loc la cererea clientului.
Serverul este de asa natura scris incat suporta accesul concurent al mai multor clienti; acestia acceseaza in
general serverul prin intermediul infrastructurii publice pe care o denumim generic “internet”, insa este posibila
si crearea de servere accesibile numai din reteaua unei firme (intranet) sau doar de pe aceeasi statie. Acest ultim
caz este de interes special deoarece este folosit pe scara larga de catre dezvoltatorii web: ne putem instala pe
statia proprie (fie ea cea de la birou sau de acasa) un soft de server web si il folosim pentru a dezvolta un site,
urmand ca, atunci cand site-ul este gata, sa il uploadam pe serverul final pe care el va functiona.
Un protocol reprezinta o “limba” in care comunica doua aplicatii. Asa cum limbile din lumea umana sunt seturi
de conventii respectate de intregi comunitati, in acelasi fel in domeniul retelelor exista aceste seturi de reguli de
comunicatie denumite protocoale. Doua aplicatii pot comunica doar in masura in care folosesc protocoale
comune.
Comunicatia intre clientul si serverul web este asigurata de protocolul HTTP. Dezvoltatorul web este nevoit sa
cunoasca tot felul de detalii legate de acest protocol - deoarece ele intervin efectiv in procesul de programare -
dar care vor fi prezentate pe masura ce este nevoie de-a lungul acestui curs; pe moment este suficient sa
recunoastem HTTP ca fiind protocolul folosit pentru comunicatia intre clienti si servere web.
Nota: in lumea web a zilelor noastre intalnim din ce in ce mai des ca protocol de comunicatie HTTPS; acesta
nu este un protocol nou, ci tot HTTP-ul (acelasi set de reguli de comunicatie) dar tunelat printr-o conexiune
securizata folosind diversi algoritmi criptografici.
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
3
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
1.2.3. Clientii unui server web
Clientii unui server web sunt aplicatiile care “vorbesc” HTTP si care se conecteaza la server. Cel mai comun
client web este browserul, insa nu e singurul! In ziua de astazi, foarte multe dintre aplicatiile ce ruleaza pe
dispozitive mobile (telefoane, tablete etc) acceseaza si ele informatii publicate de servere web.
Remarca: pentru a rula programe PHP din linia de comanda nu este nevoie de un server web.
prin intermediul unui server web. Acest scenariu presupune ca interpretorul PHP sa fie apelat de catre
serverul web ori de cate ori acesta din urma primeste o cerere HTTP de la un client si constata ca este vorba
de un fisier PHP (pe care serverul nu are competenta de a-l executa direct). Output-ul executiei nu va mai fi
afisat pe ecranul serverului, ci va fi trimis catre client
Cel de-al doilea scenariu este cel mai raspandit si implicit de interes mai mare pentru noi. Intrepretorul PHP
poate lucra cu principalele servere web folosite in ziua de astazi (ex: Apache, IIS etc.). Interfatarea PHP cu un
server web presupune o reconfigurare a acestuia din urma astfel incat sa recunoasca fisierele PHP si sa le
execute cu ajutorul interpretorului (vezi mai jos).
Un server de baze de date este un sistem de management de baze de date care are capabilitatea de a deservi
aplicatii client aflate in retea sau in internet. O baza de date este o colectie structurata de informatii, iar un
sistem de management de baze de date reprezinta setul de programe folosit pentru crearea structurii,
introducerea si extragerea datelor si gestionarea accesului la acestea.
Exista extensii PHP pentru majoritatea sistemelor de management de baze de date majore (MySQL, Microsoft
SQL, Oracle, DB2, PostgreSQL etc). Combinatia PHP-MySQL este una foarte des intalnita – ambele softuri
sunt open-source si exista o lunga traditie a colaborarii lor.
1
Mirror = server care depoziteaza o copie a unui software, site etc. in scopul de a oferi alternative (deseori cu viteza mai buna) pentru
download
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
4
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
Serverul de baze de date este cel care stocheaza informatia folosita in generarea continutului unui site; spre
exemplu, pentru un magazin virtual serverul va memora listele de categorii, de produse, de clienti, de comenzi
etc. Programele PHP care ruleaza pe serverul web se vor conecta la serverul de baze de date si vor extrage de
acolo informatiile necesare pentru generarea paginilor web ale site-ului.
Un server web este de obicei configurat de catre administrator sa trateze diferit fisierele care i se cer in functie
de extensia acestora. Acest lucru este vital in cazul fisierelor PHP (si nu numai) deoarece, in lipsa unei
configurari adecvate, serverul web considera toate fisierele ca stocand continut static, si le livreaza clientilor
continutul acestora. Pentru fisierele PHP acesta ar reprezenta un dublu dezavantaj: pe de o parte clientul nu va
primi continutul care ar fi trebuit generat prin rularea codului PHP din fisier, iar in plus codul PHP va fi expus
clientilor, ceea ce intr-o functionare normala nu ar trebui sa se intample.
Remarca: desi acesta este cel mai des intalnit (si logic) scenariu, trebuie spus ca serverul poate fi configurat
sa NU trateze special extensia PHP (chiar daca are modulul PHP incarcat!), sau sa paseze interpretorului
PHP fisierele avand alte extensii decat .php.
Pentru a accesa resursele1 publicate de un server web, utilizatorul foloseste o adresa de forma:
http://www.infoacademy.net/cursuri/index.php
Resursele (paginile web) sunt stocate in sistemul de fisiere al serverului. Clientul nu are posibilitatea de a vedea
intregul sistem de fisiere de pe server (ar insemna sa aiba acces la configurarea serverului, la fisierele sistemului
de operare etc) ci doar ceea ce se afla dedesubtul unui director desemnat de catre administrator ca radacina a
paginilor web. Acest director (deseori numit si document root sau web root) este una dintre principalele
configurari necesare pe un server web si este ceea ce clientul vede ca radacina a resurselor partajate de catre
server (/-ul din /cursuri/index.php).
Exemple:
• daca serverul web www.example.com are document root-ul in d:\site, iar in acest director se afla un
document index.html, clientul va accesa fisierul prin intermediul URL-ului
http://www.example.com/index.html.
1
Resurse web = fisierele si continutul generat dinamic pe care le poate furniza serverul web clientilor
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
5
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
• in cazul URL-ului de mai sus (http://www.infoacademy.net/cursuri/index.php), daca serverul ar avea
document root-ul in c:\www, atunci locatia in sistemul de fisiere a fisierului index.php de pe server va fi
c:\www\cursuri\index.php.
Cand clientul solicita un URL ca cel din exemplul 1, serverul web ii va livra continutul fisierului index.html. In
exemplul 2 insa, serverul (daca este configurat corect) va executa fisierele cu extensia .php (folosindu-se de
interpretorul PHP) si ii va livra clientului output-ul executiei, care in acest caz consta in codul HTML al paginii
generate.
2. Cerere: /cursuri/index.php
Browser Server web 3. Executie: c:\www\cursuri\index.php
1. www.infoacademy.net/
9. Trimiterea paginii catre client (document root = c:\www) 8. Returnarea rezultatului executiei
cursuri/index.php
(=sursa HTML a paginii web)
<html>
10. Afisarea paginii: <html> <body>
<body> Lista de cursuri:<br />
Java<br />
Lista de cursuri: Lista de cursuri:<br /> <b>PHP</b>
Interpretor
Java PHP </body>
Java<br />
PHP </html>
<b>PHP</b>
</body> 5. Executarea codului PHP 4. Pornirea interpretorului
Nota: prefixarea numelui resursei cu document root este modalitatea default in care un server web
determina calea catre fisierul cerut. Serverele web dispun si de configurari prin care se pot crea manual
corespondente intre nume de resurse si locatii in sistemul de fisiere (asa-numitele alias-uri), sau pot fi
configurate ca, oricare ar fi numele resursei cerute, pentru prelucrarea cererii sa fie lansat in executie un
program scris in PHP sau orice alt limbaj.
4. Deoarece fisierul are extensia .php si serverul este configurat sa porneasca interpretorul PHP pentru
acest tip de fisiere, serverul va "inmana" fisierul interpretorului PHP
5. Interpretorul PHP incepe sa parcurga fisierul, executand sectiunile de cod PHP si construind treptat
output-ul programului, ce constituie sursa paginii web ce va fi trimisa clientului (vezi sectiunea despre
interactiunea PHP-HTML)
6. Codul PHP executat contine instructiuni pentru interogarea unei baze de date; se realizeaza o conexiune
intre serverul web si cel de baze de date si se solicita celui din urma lista de cursuri disponibile
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
6
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
Nota: deseori serverul web si serverul de baze de date se afla pe aceeasi masina, insa in ambele cazuri ele
sunt softuri(programe) distincte.
Remarca: executia avand loc pe server, clientul NU are acces la sursele programului PHP care a generat
pagina, el primind doar codul HTML al paginii generate. Acest caz difera de cel al paginilor web dinamice
realizate cu limbaje de programare care se executa pe masina clientului (ex: Javascript) unde utilizatorul are
acces la codul sursa al programului.
Protocolul HTTP este bidirectional – clientul poate nu numai sa obtina informatii de pe server, ci si sa trimita
date acestuia. Datele primite de la client sunt accesibile programelor PHP si pot fi folosite si ele in procesul de
generare a paginii web. Exemplu: utilizatorul completeaza un formular web de conversie valutara; cand el da
click pe submit, suma de convertit si valuta destinatie sunt transferate catre server, unde un script PHP le preia,
face conversia si genereaza o pagina cu rezultatul conversiei pe care apoi serverul o trimite clientului.
In concluzie, putem gandi un program PHP care ruleaza pe server astfel: output-ul sau este sursa paginii web
(codul HTML) pe care o primeste clientul, iar input-ul este reprezentat de datele provenite de la utilizator via
serverul web.
PHP este gandit sa fie HTML-embedded – adica sa putem crea “insule” de cod PHP in cadrul unui document
HTML, in scopul generarii dinamice a unor parti din continutul paginii. Interpretorul PHP parcurge fisierul
primit spre executie, executand numai portiunile de cod PHP si integrand output-ul lor in continutul HTML
inconjurator.
Acest lucru este necesar deoarece, in foarte multe cazuri, continutul unei pagini web nu este integral static sau
integral dinamic; spre exemplu, o pagina poate contine elemente fixe (ex: un meniu pentru navigare, un header,
un footer) si elemente dinamice (ex: o lista de produse preluata de pe un server de baze de date). Integrarea
codului PHP in HTML ne permite sa generam continut dinamic numai acolo unde este nevoie in cadrul paginii.
In aceste conditii, un fisier PHP poate fi o succesiune de sectiuni HTML si PHP (cate este nevoie); sunt permise
inclusiv extremele: fisierul poate contine exclusiv HTML (insa, in aceste conditii, nu ar avea sens sa-i punem
extensia .php) sau poate contine exclusiv cod PHP. Indiferent de situatie, se aplica regulile de sintaxa descrise
mai jos.
Nu ne putem astepta sa scriem intr-un fisier ba cod HTML, ba cod PHP, si interpretorul sa se “prinda” automat
cum ar trebui sa actioneze; este necesara o separare clara intre cele doua tipuri de cod.
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
7
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
Interpretorul PHP are doua moduri de lucru, intre care poate <html> <html>
Cod HTML Cod HTML
comuta in timpul parcurgerii unui fisier:
………… Tag inceput PHP
• modul HTML. Cat timp interpretorul se afla in Cod PHP
modul HTML, el doar preia ca atare textul din fisier Cod PHP Tag sfarsit PHP
si il trimite catre client ………… …………
• modul PHP. In acest mod de functionare, Cod HTML
Cod HTML ………...
interpretorul considera ca ceea ce citeste din fisier Tag inceput PHP
…………
reprezinta instructiuni PHP si incearca sa le valideze Cod PHP
si sa le execute ca atare Cod PHP Tag sfarsit PHP
………… </html>
Interpretorul functioneaza implicit in mod HTML; el poate </html>
fi comutat in modul PHP cu ajutorul unor delimitatori
speciali, si exista de asemenea delimitatori pereche care fac comutarea inversa, inchizand sectiunile de cod
PHP. De aceea, conditia ca portiunile de cod PHP sa fie recunoscute ca atare de catre interpretor este ca ele sa
fie delimitate de o pereche de tag-uri (marcatoare de inceput/sfarsit de cod PHP).
Atentie! Chiar daca un fisier contine excclusiv cod PHP, delimitatorii tot trebuie folositi! Aceasta deoarece,
cand incepe sa evalueze fisierul, inerpretorul porneste in mod HTML si, in lipsa delimitatorilor, ar livra intregul
cod sursa PHP catre client, fara a-l executa.
Desi in trecut “oferta” era mai bogata (dar s-a dovedit ca in mod inutil), incepand cu PHP 7 exista 2 tipuri de
tag-uri care realizeaza comutarea in mod PHP si inapoi: <?php
<?php instructiuni_php; ?> - modalitatea recomandata si cel mai des instructiuni_php;
intalnita, disponibila intotdeauna (nu este dezactivabila din fisierul de ………………….
instructiuni_php;
configurare PHP)
?>
Nota: in trecut existau si acesti doi delimitatori, retrasi insa incepand cu PHP 7:
Output-ul final al executiei scriptului va consta din cod HTML ce rezulta din compunerea a doua tipuri de
elemente:
codul HTML prezent in fisier in afara tagurilor PHP, si care este pasat nealterat catre client
output-urile executiei portiunilor de script PHP
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
8
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
<html> <html>
Cod HTML 1 Cod HTML 1
Tag inceput PHP
Cod PHP 1 Output executie cod PHP 1
Tag sfarsit PHP
………… …………
Cod HTML 2 Cod HTML 2
………... ………...
Tag inceput PHP
Cod PHP 2 Output executie cod PHP 2
Tag sfarsit PHP
</html> </html>
Cele doua tipuri de elemente apar in output-ul final in ordinea in care se aflau in fisierul executat.
Exemplu :
<html><body> <html><body>
<strong>Adresa ta IP este <strong>Adresa ta IP este
<?php 10.0.0.13
echo $_SERVER['REMOTE_ADDR']; </strong>
?> </body></html>
</strong>
</body></html>
In exemplul de mai sus, portiunea de cod PHP (<?php…..?>) este inlocuita cu output-ul comenzii echo, adica
cu adresa IP a clientului.
Nota: daca o sectiune PHP se gaseste chiar la sfarsitul fisierului (nu mai urmeaza nicio alta sectiune PHP sau
HTML) delimitatorul de inchidere poate fi omis.
Q: Dar am vazut cod HTML si inauntrul delimitatorilor PHP! Se poate asadar si invers?
A: Nu este acelasi lucru. Atunci cand un program PHP genereaza cod HTML, el poate scrie tag-uri HTML in
output-ul sau , insa aceste portiuni de sursa HTML nu sunt incluse folosind taguri delimitatoare, ci sunt
simple siruri de caractere ce apar ca argumente ale unor instructiuni PHP de afisare pe ecran (ex: echo sau
print)
<html><body> <?php
<strong>Adresa ta IP este echo '<html><body>';
<?php echo '<strong>Adresa ta IP este';
echo $_SERVER['REMOTE_ADDR']; echo $_SERVER['REMOTE_ADDR'];
?> echo '</strong>';
</strong> echo '</body></html>';
</body></html> ?>
Desi cele doua exemple de mai sus genereaza in final acelasi cod HTML, in general se prefera prima varianta,
deoarece are o mai buna separare intre codul HTML si cel PHP si in acelasi timp este un pic mai rapida.
Interpretorul PHP este configurabil: exista o multitudine de setari ce pot fi schimbate de catre administratorul
de server si care afecteaza modul de functionare al interpretorului. Sa amintim un singur element - delimitatorul
scurt (short open tag), care nu poate fi folosit decat daca este activat din configurare.
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
9
InfoAcademy
www.infoacademy.net
Ionut Cristian Morar
rev. 255
Interpretorul PHP are si proprietatea de a fi modular: el contine un nucleu de baza (“core”) iar majoritatea
functionalitatilor PHP este asigurata de module suplimentare care sunt activabile sau dezactivabile din
configurarea interpretorului.
Toate configurarile (inclusiv activare/dezactivare de module) se realizeaza fie din fisierul de configurare -
denumit implicit php.ini - fie cu ajutorul unor directive de configurare din serverul web.
Sectiunea de fata nu isi propune sa detalieze modul de configurare a PHP, ci doar sa constientizeze cititorul in
privinta faptului ca diverse aspecte ce tin de functionarea interpretorului sunt configurabile. Aceasta deoarece,
de obicei, un site este dezvoltat pe un server de development si abia apoi este uploadat pe serverul final al
beneficiarului; daca in cazul serverului de development programatorul are libertate partiala sau totala in a face
setari dupa bunul plac, acest lucru este foarte probabil sa nu se intample pe serverul final. De aceea,
programatorul nu trebuie sa scrie cod PHP care depinde de setarile de server, deoarece acestea nu sunt neaparat
sub controlul sau, riscand astfel ca un site care merge excelent pe serverul de development sa nu functioneze
partial sau deloc pe serverul final.
Desigur ca exista o multitudine de carti si tutoriale video pentru invatarea PHP. Dorim insa sa amintim faptul ca
resursa de baza pentru a cunoaste limbajul si diversele functii/clase predefinite PHP este PHP Manual -
manualul oficial PHP, disponibil online pe http://php.net/manual/en/ .
1.6. BIBLIOGRAFIE:
• PHP Manual
◦ sectiunea Introduction: http://ro.php.net/manual/en/introduction.php
◦ delimitatori PHP si comutarea intre modurile HTML si PHP:
▪ http://php.net/manual/en/language.basic-syntax.phptags.php
▪ http://php.net/manual/en/language.basic-syntax.phpmode.php
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de InfoAcademy.
10