SlideShare a Scribd company logo
1 of 217
Download to read offline
PHP

 1.   Unelte de baza - ce aveti nevoie pentru un site profesionist.
      2. Despre PHP - ce este şi instrucţiuni pentru începători.
      3. Variabile în PHP - ce sunt şi cum se folosesc.
      4. Variabile predefinite
      5. Domeniul de vizibilitate al variabilelor - Cum se pot accesa variabilele.
      6. Tipuri de variabile
      7. Afişarea mesajelor în PHP
      8. Construieşte un site cu php
      9. Câteva informaţii despre documentarea şi depanarea unui script.
      10. Operatori PHP
      11. Câteva idei utile pentru securitatea paginilor web
      12. Structuri de control în PHP
      13. Despre funcţii în PHP
      14. Clase şi obiecte în PHP
      15. Crearea imaginilor thumbnails
      16. Autentificarea în paginile restricţionate şi câteva informaţii despre cookie, uploadul
      fişierelor şi includerea lor în pagini, precum şi informaţii despre starea conexiunii.
      17. Descrierea funcţiilor care pot fi utilizate la manipularea tablourilor
      18. Lucrul cu fişiere şi directoare
      19. Descrierea funcţiilor de prelucrare a fişierelor
      20. Funcţii care faciliteaza lucrul cu directoare
      21. Valori scalare şi tablouri
      22. Lucrul cu formulare
      23. Conversia tipurilor de variabile
      24. Scrierea instrucţiunilor swich, break şi default
      25. Scrierea instrucţiunilor for
      26. Scrierea instrucţiunilor while şi do while
      27. Introducere în Clase PHP
      28. Sesiuni în PHP
      29. Crearea şi utilizarea funcţiilor
      30. Utilizarea fişierelor incluse
      31. Funcţii PHP pentru expresii regulate
      32. Utilizarea referinţelor în PHP
      33. Lucrul cu funcţii listă
      34. Interoperabilitate PHP-Java
      35. Transmiterea mesajelor prin e-mail folosind PHP şi PEAR
      36. Informaţii despre clasele încărcate
      37. Prelucrarea dinamică a imaginilor
      38. Funcţii PHP utilizate pentru accesarea şi interogarea bazelor de date MySQL
      39. Utilizarea şirurilor
      40. Manipularea şirurilor şi scrierea expresiilor regulate
      41. Utilizarea variabilelor cookie
      42. Expedierea mesajelor de poştă electronică
      43. Stocarea unor date ierarhice într-o bază de date
      44. PHP 5, Factory
      45. PHP 5, SQLite în Factory?




            Unelte de baza - ce aveti nevoie pentru un site profesionist.
De ce să folosiţi PHP în loc de HTML sau ASP sau PERL? Pentru că, faţă de alte limbaje, PHP
este gratuit.
Să spunem că aveţi de făcut un site care va conţine peste 150 de pagini. Dacă ar fi să îl faceţi
în HTML, ar dura ceva vreme. Ok. Să zicem că site-ul este gata, dar acum vreţi să schimbaţi
fontul şi culorile textului şi ale link-urilor în toate cele 150 de pagini. Vă apucă durerea de cap
doar când vă gândiţi ce aveţi de făcut. În schimb, în PHP, acest lucru şi multe altele sunt foarte
simple. Dacă site-ul respectiv ar fi fost făcut în PHP pe module, tot ce ar fi trebuit să faceţi este
ca în partea care conţine informaţiile despre text să schimbaţi informaţile despre text şi link
aşa cum doriţi şi modificarea este aceeaşi pentru toate paginile. Simplu nu?
Pentru a rula exemplele şi scripturile existente pe acest site pe calculatorul dvs. de acasă sau
pe pagina proprie trebuie să aveţi instalate şi configurate câteva aplicaţii de care o sa vorbim în
continuare. Nu trebuie să aveţi cunoştinţe preliminare de baze de date sau programare. Simpla
studiere a codului sursa şi aplicarea exemplelor vă poate lămurii ce poate face php. Deci, dacă
vă credeţi pregătiţi cititi în continuare...


                                        Unelte de bază

Crearea unor pagini dinamice la un nivel performant, precum şi punerea lor în funcţiune, nu
poate fi făcută fără anumite programe. Iată cam de ce aveţi nevoie:

Browsere - Pentru testarea paginilor este nevoie de mai multe browsere pentru că nu toate
afişează acelaşi rezultat şi este neprofesional să obligaţi vizitatorul să folosească un anumit
browser doar pentru că pagina făcută de voi arată şi merge mai bine cu acel browser. Deci vă
recomand să instalati 2-3 browsere pentru teste. Dintre cele mai folosite în prezent vă
recomand Internet Explorer (folosit pe calculatoare cu sistem de operare Windows), Firefox (se
foloseste din ce în ce mai des datorită extensiilor şi faptului că se poate instala atât pe sisteme
de operare Windows cât şi pe Mac OS X sau Linux) şi Opera (care are suport pentru mai multe
sisteme de operare).

Serverul web pentru teste - Dacă lucraţi cu PHP-MySQL sub Windows, sigur aveţi nevoie de
triada Apache - PHP - MySQL să fie instalată pe calculatorul local. Pentru aceasta aveţi două
posibilităţi: prima ar fi să descărcaţi de pe pagina producătorului fiecare aplicaţie în parte şi să
o instalaţi manual, urmând apoi să faceţi configurarea serverelor manual (lucru nerecomandat
începătorilor) şi a doua variantă să descărcaţi un program care instalează toate acestea gata
configurate pe calculator, urmând ca voi doar să vă apucaţi de lucru. Astfel de aplicaţii sunt
EasyPHP de exemplu (pentru Windows 95-98 dar merge şi pe Windows 2000 şi XP) sau
recomandarea mea WAMP5 care merge doar pe Windows NT (adica 2000, XP, 2003, Longhorn,
etc) dar care are multe alte facilităţi în plus faţă de EasyPHP pe care cu timpul când veţi învăţa
mai multe despre PHP si MySQL o să le consideraţi foarte utile (cum ar fi posibilitatea de
testare a scripturilor PHP atât pentru versiunea 4 cât si 5). Ultima recomandare, atât pentru cei
care folosesc sistemul de operare Windows cât şi Linux, ar fi XAMP care conţine toate pachetele
necesare instalării şi configurării unui server de web profesional (inclusiv server de FTP, SSI,
DNS şi MAIL), dar pe care nu îl recomand începătorilor pentru că mulţimea de facilităţi oferite
vă poate încurca.

Editoare web - După ce aţi instalat serverul web şi browserele acum vă mai trebuie un editor
bun pentru a scrie cod şi a vizualiza paginile create. Pentru aceasta recomandarea mea este
suita Macromedia (Dreamweaver, FLASH şi FreeHAND). Puteţi descărca Dreamweaver (pentru
a scrie cod şi a vedea/rula paginile în timp real) de la ei de pe site şi tot de la ei vă mai
recomand Fireworks (dacă vă ocupaţi şi cu design-ul paginilor aceasta aplicaţie vă este utilă
împreună cu Adobe Photosop sau Corel Draw) şi Flash (dacă doriţi să faceţi animaţie pentru
site). Desigur sunt o mulţime de programe care fac aceleaşi lucruri cu ce vă recomand eu, dar
dacă doriţi să lucraţi la nivel profesional recomand să lucraţi cu unelte de profesionişti.
Bineânţeles că puteţi scrie cod şi în Notepad şi desena în Paint dar aplicaţiile pe care vi le-am
recomandat vă uşurează extraordinar de mult munca şi vă semnalează rapid erorile din pagini.
Alte editoare pe care vi le recomand să le testaţi sunt: PSPad (un bun înlocuitor al Notepad-
ului, mai ales că este freeware), Zend Studio (destinat profesioniştilor).
După ce aţi făcut rost de tot ce vă trebuie ca să începeţi treaba, vă recomand să citiţi în
continuare celelalte articole, eventual să vizitaţi şi pagina de download, sigur găsiţi ceva util
acolo pentru început, apoi pagina de link-uri, unde găsiti resurse gratuite şi să discutăm pe
forum eventualele probleme pe care le întâmpinaţi.




                  Despre PHP - ce este şi instrucţiuni pentru începători.



                                          Despre PHP

PHP este limbajul ideal pentru construirea de pagini web dinamice. Este usor de învăţat, open-
source, poate fi rulat pe mai multe platforme şi se poate conecta la mai multe tipuri de baze de
date. Cel mai important aspect al limbajului este însa posibilitatea de a fi îmbricat cu cod
HTML. Putem astfel crea pagini HTML statice şi din loc în loc, acolo unde este nevoie, să
introducem dinamism cu ajutorul PHP.
Limbajul PHP s-a "născut" în 1994 din nevoia lui Rasmus Lerdorf de a afla câte persoane îi
vizitează CV-ul online. El a denumit setul de scripturi create PHP, acronimul pentru Personal
Home Page. Pe parcursul următorilor trei ani limbajul a evoluat dar adevăratul succes a început
să îl cunoască de când Zeev Suraski si Andi Gutmans au rescris motorul PHP de la cap la
coadă, motor care poartă din versiunea 4 a PHP numele Zend, o combinaţie de litere din
prenumele creatorilor săi: Zeev şi Andi.
Fiind open-source, PHP beneficiază de suport activ din partea comunităţii online, acesta fiind şi
motivul creşterii explozive a numărului site-urilor bazate pe PHP.
Interpretorul PHP este cel mai cunoscut limbaj de scripting folosit în acest moment pentru
crearea site-urilor Web interactive. Denumirea este un "acronim recursiv" pentru Hypertext
PreProcessor. Diferenţa esenţială faţă de alte limbaje de scripting (gen JavaScript) este faptul
că PHP este un interpretor server-side (operaţiile sunt executate de către server şi nu pe
calculatorul utilizatorului). Pentru a putea testa pagini PHP aveţi nevoie de un server de web
(Apache) şi de pachetul PHP instalat.
PHP permite folosirea unor elemente specifice limbajelor de programare. Ieşirea standard a
script-ului PHP devine intrarea standard pentru programul de navigare care vizualizează
pagina. Aşadar, la iesirea standard poate fi scris (de exemplu, prin intermediul comenzii echo)
orice tip de cod HTML, acesta fiind interpretat de către browser.
Pe lângă manipularea conţinutului paginilor de web, PHP poate trimite headere HTTP pentru
autentificare, seta cookie-uri sau redirecţiona utilizatorii. Mai mult, cu ajutorul bibliotecilor
externe de funcţii poate parsa fisiere XML, crea şi manipula imagini, animaţii Shokwave Flash,
PDF-uri sau se poate conecta la un server de mail, iar acestea sunt doar câteva din funcţiile pe
care le poate îndeplini.
Interpretorul PHP parcurge documentul accesat până în momentul în care întâlneşte un marcaj
de deschidere care indică faptul că textul care urmează trebuie interpretat ca fiind cod PHP. În
continuare, textul este interpretat ca fiind cod PHP până în momentul în care este întâlnit
marcajul de inchidere. Întreg textul care nu este interpretat ca fiind cod PHP este furnizat la
iesire în forma în care a fost primit ca intrare de catre interpretor. Există mai multe marcaje
care indică începerea unei secvenţe de cod PHP, dar doar două dintre ele sunt folosite de obicei
(aceste marcaje depind şi de configurarea serverului de web). Dacă dorim ca documentul să
respecte specificaţiile XML, atunci singura posibilitate de inserare a codului PHP este folosirea
unei secvente de tipul:


  Cod:

<?php
//cod PHP
?>

Cea de-a doua posibilitate este utilizarea marcajului <SCRIPT> într-o maniera asemănătoare
celei folosite pentru includerea de script-uri JavaScript. Sintaxa este urmatoarea:


  Cod:

<SCRIPT language = "php">
//cod PHP
</SCRIPT>

Există alte două posibilităţi, dar acestea sunt folosite rar, în situaţii particulare şi depinde în
mare măsură de setările serverului de web.
Este permisă "iesirea" şi "intrarea" în "modul PHP" de oricâte ori este necesar în pagină.
Aceasta este util când se lucrează cu texte de mari dimensiuni.
Pentru ca instrucţiunile PHP să fie interpretate corect, acestea trebuie separate prin caracterul
';'.
În PHP, comentariile pot fi inserate folosind sintaxele din C, C++ şi shell-urile Unix. Apariţia
secventei de caractere '//' sau a caracterului '#' indică faptul că restul liniei reprezintă un
comentariu. Pentru a insera comentarii pe mai multe linii, acestea trebuie delimitate de
secventa '/*' la început şi de secventa '*/' la sfârşit.




                        Variabile în PHP - ce sunt şi cum se folosesc.



                                        Variabile în PHP

Programarea de orice fel, nu doar PHP, are două elemente de bază: datele şi instrucţiunile.
Pentru a lucra cu datele trebuie să înţelegem ce sunt variabilele şi tipurile, iar pentru a lucra cu
instrucţiuni trebuie să aflăm ce sunt structurile de control şi funcţiile.
O variabilă este o zonă de memorie căruia i se dă un nume pentru a putea fi recunoscută
ulterior şi pentru a ne putea referi mai târziu la ea.
În PHP, o variabilă este reprezentată de semnul '$', urmat de numele variabilei. La fel ca în
limbajele C/C++ sau Java, pentru denumirea variabilelor se face distincţia între literele mari şi
literele mici.
Numele unei variabile poate începe cu o liniuţă de subliniere '_' sau o literă. Restul caracterelor
care formează numele variabilei pot fi litere, cifre sau liniuţe de subliniere. În PHP, sunt
considerate litere toate caracterele cuprinse între 'a' şi 'z', cele cuprinse între 'A' şi 'Z', precum
şi cele care au codul ASCII cuprins între 127 şi 255.
Începând cu versiunea 4, au fost introduse referinţele; astfel, o variabilă poate referi o alta,
astfel încât modificarea valorii uneia duce la modificarea automată a valorii celeilalte. O
referinţă la o variabilă este reprezentată de caracterul '&'. Iată un scurt exemplu:


  Cod:
<?php
$a = "PHP4 e slab";
$b = &$a;
$b = "PHP4 e foarte bun";
echo $a;
echo "<br>";
echo $b;
?>

După cum se vede, modificarea valorii variabilei $b a dus automat la modificarea automată a
valorii variabilei $a.
Să disecăm codul pentru a învăţa câteva lucruri:
- toate instrucţiunile PHP se termină cu punct şi virgulă. Omiterea semnului ";" este cea mai
frecventă greşeală pe care o fac programatorii începători.
- codul PHP începe întotdeauna cu "<?php" şi se termină cu "?>". El poate fi îmbricat cu cod
HTML după cum puteţi vedea în exemplul de mai sus. Puteţi chiar crea pagini HTML fără pic de
cod PHP în ele şi să le daţi extensia php. Atâta vreme cât parser-ul PHP nu "vede" tagurile "<?
php ...?> ", el va trimite pagina neschimbată către server.
- putem pune diacritice în cadrul unui string însă pentru ca browserul să le afişeze corect va
trebui să specificăm în <head> setul de caractere folosit, la fel ca într-un document HTML.
- valoarea unei variabile poate fi schimbată după necesităţi (aşa cum am schimbat valoarea lui
$a) sau ea va fi schimbată automat în funcţie de celelalte variabile de care depinde.




                                      Variabile predefinite




Începand de la versiunea 4.1.0 metodele predefinite pentru preluarea variabilelor externe
depind de setarea din php.ini a variabilelor globale (register_globals). Astfel dacă pe server
este setată register_globals=ON (nerecomandat) se pot prelua de exemplu variabilele trimise
prin GET şi POST apelând direct variabila.
Exemplu:

  Cod:

<?php
// sa spunem ca avem un formular in care exita un camp numit "camp1" si
care se trimite prin metoda POST:
// cu register_globals=ON
$camp1 = "valoarea campului";
// cu register_globals=OFF
$_POST['camp1'] = "valoarea campului";
$camp1 = $_POST['camp1'];
?>


Variabile globale:
$GLOBALS - pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP
curent; acest vector este indexat chiar prin numele variabilelor globale. Această variabilă
superglobală este accesibilă începând cu versiunea 3.0.0

$_SERVER - conţine o serie de variabile ale căror valori sunt setate de server-ul web;
majoritatea valorilor variabilelor din acest vector depind de mediul de execuţie al script-ului
curent. A fost introdusă începând de la versiunea 4.1.0. În versiunile anterioare se folosea
$HTTP_SERVER_VAR .
Este o variabilă care conţine informaţii cum ar fi headere, locaţia scriptului, sau informaţii
despre vizitator şi browser. Este posibil ca în funcţie de setările fiecărui server şi browser să nu
fie active toate informaţiile specificate de această variabilă. Această variabilă este de
asemenea globală, adică se poate folosi oriunde în script, fără apelarea ei ca funcţie globală
(adică nu trebuie să o cereţi cu global $_SERVER în funcţiile dvs.) În schimb
$HTTP_SERVER_VARS conţine aceleaşi informaţii dar nu este o funcţie globală (atenţie
$HTTP_SERVER_VARSşi $_SERVER sunt două variabile diferite, chiar dacă aparent fac
aceleaşi lucruri) Dacă directiva register_globals este ON atunci aceste variabile vor deveni la
rândul lor variabile globale în cadrul scriptului.
Elementele acestor variabile sunt cele de mai jos (atenţie: în funcţie de setările serverului şi
browserului unele elemente pot lipsi)

' PHP_SELF ' - conţine numele fişierului unde se execută scriptul curent, relativ la rădacină
(document root) De exemplu, $_SERVER['PHP_SELF'] într-un script la adresa
http://example.com/test.php/foo.bar va fi /test.php/foo.bar . Constanta __FILE__ conţine
toată calea şi numele fişierului curent.

' argv ' - Un array al argumentului trimis către script. Când scriptul rulează în linie de
comandă, va da acces C-style la parametrii liniei de comanda. Când este accesat prin metoda
GET, acesta va conţine un sir de interogare.

' argc ' - Conţine un număr al parametrilor liniei de comandă trimise către script (daca este
rulat în linie de comanda).

' GATEWAY_INTERFACE ' - Returneaza versiunea CGI utilizată pe server (exemplu ' CGI/1.1
').

' SERVER_NAME ' - Numele server-ului de hosting unde se execută scriptul curent. Dacă
scriptul rulează pe un host virtual, aceasta va conţine valoarea definită pentru acel host
virtual.

' SERVER_SOFTWARE ' - Returnează un şir de identificare al server-ului dat în header ca
raspuns la cerere.

' SERVER_PROTOCOL ' - Numele şi versiunea protocolului prin care este cerută pagina
(exemplu ' HTTP/1.0 ')

' REQUEST_METHOD ' - returnează metoda utilizată pentru accesarea paginii (exemplu ' GET
', ' HEAD ', ' POST ', ' PUT ')

' REQUEST_TIME ' - Valoarea timestamp dată la pornirea cererii. Este valabilă începând de la
versiunea PHP 5.1.0.

' QUERY_STRING ' - Sirul de interogare, dacă este, de la pagina care a fost accesată.

' DOCUMENT_ROOT ' - Directorul radăcină unde este rulat scriptul curent, aşa cum este
definit în fişierul de configuraţie al serverului.

' HTTP_ACCEPT ' - Conţinutul header-ului acceptat de la cererea curentă, dacă este unul.

' HTTP_ACCEPT_CHARSET ' - Conţine setul de caractere acceptate şi care este trimis de
header-ul cererii respective, dacă există. Exemplu: ' iso-8859-1,*,utf-8 '.

' HTTP_ACCEPT_ENCODING ' - Conţine tipul de encodare trimis de cerera curentă prin
header, dacă există.. Exemplu: ' gzip '.

' HTTP_ACCEPT_LANGUAGE ' - Conţine limbajul trimis de cererea curentă prin header, dacă
exista. Exemplu: ' en '.

' HTTP_CONNECTION ' - Conţine informaţii despre conecsiiunea trimisă de cererea curentă
prin header, dacă există. Exemplu: ' Keep-Alive '.
' HTTP_HOST ' - Conţine informaţii despre host, header-ul de la cererea curentă, dacă există.

' HTTP_REFERER ' - Adresa paginii (dacă este) de unde a venit userul în pagina curentă.
Aceasta este setată de către browser. Nu toate browserele setează această valoare, şi chiar
unele au posibilitatea de a modifica HTTP_REFERER aşa cum vor. Pe scurt, nu este de
încredere.

' HTTP_USER_AGENT ' - Conţine semnătura browser-ului trimisă prin header la cererea
curentă, dacă există. Un exemplu tipic este: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) . În
afară de asta, puteţi utiliza get_browser() pentru a vedea ce capabilitaţi are browserul
folosit de user şi astfel să returnaţi pagina specifică pentru acel browser.

' HTTPS ' - Setează o valoare dacă scriptul a fost cerut printr-un protocol securizat HTTPS

' REMOTE_ADDR ' - Adresa de IP a userului care accesează pagina curentă.

' REMOTE_HOST ' - Numele hostului userului care vede pagina curentă. Este inversul DNS-
ului userului bazat pe REMOTE_ADDR. Atenţie: Serverul web trebuie configurat pentru a crea
această variabila. De exemplu în Apache va trebui HostnameLookups On în fişierul de
configurare httpd.conf. Pentru alte detalii vedeţi şi funcţia gethostbyaddr() .

' REMOTE_PORT ' - Portul prin care userul comunică cu serverul web.

' SCRIPT_FILENAME ' - Calea absolută unde se execută scriptul curent. Atenţie: Dacă
scriptul este rulat cu CLI, ca şi cale relativă, cum ar fi file.php sau ../file.php ,
$_SERVER['SCRIPT_FILENAME'] va conţine calea relativă specificată de către user.

' SERVER_ADMIN ' - Valoarea dată de directiva SERVER_ADMIN (pentru Apache) în fişierul
de configurare al web serverului. Dacă scriptul rulează pe un host virtual, acesta va conţine
valoarea definită pentru acel host virtual.

' SERVER_PORT ' - Portul de pe server care este folosit pentru comunicare pe web. Pentru
setările standard, acesta este ' 80 '; pentru SSL, de exemplu, se va schimba cu oricare port
definit în transmisia securizată HTTP.

' SERVER_SIGNATURE ' - Conţine un şir care cuprinde versiunea serverului şi numele
hostului virtual dacă este.

' PATH_TRANSLATED ' - Calea de bază a sistemul de fişiere (nu rădacina documentului) de
la scriptul curent, după ce serverul a terminat maparea oricăror cai ( virtual-to-real mapping)
Atenţie: Începând de la PHP 4.3.2, PATH_TRANSLATED nu mai este setat implicit în Apache
2 SAPI în contrast cu situaţia din Apache 1, unde este setată aceeaşi valoare ca şi la
SCRIPT_FILENAME. Această schimbare a fost făcută pentru a fi compatibilă cu specificaţiile
CGI în care PATH_TRANSLATED trebuie să existe doar dacă PATH_INFO este definit.
Utilizatorii Apache 2 pot utiliza AcceptPathInfo = On în fişierul de configuraţie httpd.conf
pentru a defini PATH_INFO .

' SCRIPT_NAME ' - Conţine calea către scriptul curent. Acesta este util pentru pagini care
trebuiesc definite către ele însuşi. Constanta __FILE__ conţine calea completă şi numele de
fişier al scriptului curent.

' REQUEST_URI ' - URI care este dat pentru accesarea paginii curente, de exemplu '
/index.html '.

' PHP_AUTH_DIGEST ' - Când rulaţi sub Apache ca modul, acţiunea Digest HTTP, valoarea
acestei variabile este setată în 'Authorization' header trimis către client (care ar trebui utilizat
pentru a face o validare corespunzătoare).

' PHP_AUTH_USER ' - Când este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul,
actiunea HTTP authentication, această variabilă conţine numele userului trimis de către user.

' PHP_AUTH_PW ' - Când este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea
HTTP authentication, această variabilă conţine parola userului trimisă de către user.

' AUTH_TYPE ' - Când este rulat sub Apache ca modul acţiunea HTTP authenticated , această
variabilă seteaza tipul de autentificare.

Variabilele pentru trimiterea datelor:
$_GET este o variabilă array globală. A fost introdusă în versiunea 4.1.0. Pentru versiunile
anterioare se foloseşte $HTTP_GET_VARS care nu este variabilă globală. Puteţi folosi $_GET
pentru a trimite variabile cu valori prin intermediul linkurilor.
$_POST este de asemenea o variabilă array globală. A fost introdusa în versiunea 4.1.0.
Pentru versiunile anterioare se foloseşte $HTTP_POST_VARS care nu este variabilă globală.
Puteţi folosi $_POST pentru a trimite variabile cu valori prin intermediul formularelor.
$_GETşi $_POST conţin variabile primite de script prin intermediul unor transferuri care
folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi
accesate valorile câmpurilor dintr-un formular care a fost completat şi transmis folosind una
dintre cele doua metode.

Variabilele HTTP coockies:
$_COOKIE conţine valorile variabilelor care conţin informaţii referitoare la cookie-urile
păstrate pe calculatorul utilizatorului care accesează pagina web. A fost introdus în versiunea
4.1.0. În versiunile anterioare, utilizaţi $HTTP_COOKIE_VARS .

Variabile pentru uploadul fisierelor:
$_FILES conţine variabile primite de script prin intermediul încărcărilor de fişiere prin metoda
post. A fost introdus în versiunea 4.1.0. În versiunile anterioare se foloseşte
$HTTP_POST_FILES care nu este variabilă globală.

Variabilele de mediu $_ENV
$_ENV conţine variabile disponibile prin intermediul mediului în care este executat. A fost
introdus în versiunea 4.1.0. În versiunile anterioare, utilizaţi $HTTP_ENV_VARS .

Variabilele pentru cereri:
$_REQUEST conţine variabile disponibile prin intermediul oricărui tip de mecanism cu ajutorul
căruia utilizatorul poate introduce date. Este de tip array şi conţine valorile variabilelor
$_GET , $_POST , şi $_COOKIE. A fost introdusă în versiunea 4.1.0. Începând de la
versiunea 4.3.0, informaţiile din $_FILES au fost de asemenea incluse în $_REQUEST

Variabile de sesiune:
$_SESSION conţine variabile care corespund sesiunii curente a script-ului, sub formă de array.
A fost introdusă în versiunea 4.1.0 şi este de asemenea globală. În versiunile anterioare
folosiţi $HTTP_SESSION_VARS.

Variabile de mesaje de eroare:
$php_errormsg - este o variabilă ce conţine ultimul mesaj generat de către PHP Această
variabilă este folosită în scopul de a vedea ce eroare apare şi doar dacă opţiunile de
configurare a erorilor track_errors este pornita (standard este pe OFF)

Constante predefinite:
PHP conţine un mare număr de constante predefinite pentru fiecare script care rulează. Totuşi,
sunt 5 constante "magice" pe care le prezint în continuare:
__LINE__ - Conţine numărul curent al liniei din fisier.
__FILE__ - toată calea şi numele fişierului curent. Dacă este folosit în interiorul unui fişier
inclus, va returna numele fişierului inclus. Începând de la versiunea 4.0.2 conţine întotdeauna
calea absolută la fişier, pe când în versiunile anterioare conţine calea relativă, în afară de
câteva cazuri.
__FUNCTION__ - Numele funcţiei (adăugat în versiunea 4.3.0) În PHP 5 această constantă
returnează numele funcţiei care a fost declarată (case-sensitive). În PHP 4 această valoare
este întotdeauna lowercased (cu litere mici)
__CLASS__ - Numele clasei (adaugată în versiunea 4.3.0) În PHP 5 această constantă
returnează numele clasei care a fost declarată (case-sensitive). În PHP 4 această valoare este
întotdeauna lowercased (cu litere mici)
__METHOD__ - Numele metodei clasei (adaugată în versiunea 5.0.0.) Numele metodei este
returnat asa cum este declarat (case-sensitive)




         Domeniul de vizibilitate al variabilelor - Cum se pot accesa variabilele.




În PHP o variabilă poate fi accesată doar în contextul în care a fost definită. De exemplu, o
variabilă definită în interiorul unei funcţii nu va putea fi accesată decât de instrucţiunile din
interiorul acelei funcţii. Mai mult, în mod implicit, o variabilă definită în exteriorul unei funcţii
nu va putea fi accesată în interiorul funcţiei chiar dacă ea nu este redefinită în cadrul funcţiei.
Pentru ca o funcţie să aibă acces la o variabilă definită în afara ei, variabila trebuie redeclarată
ca variabilă globală în interiorul funcţiei.
Să considerăm următorul exemplu:

Cod:
<?php
$a = 1;
function test ()
   {
   echo $a;
   }
test ();
?>

Observăm că nu se afişează valoarea 1 deoarece instrucţiunea echo $a se referă la variabila
locală $a care nu este definită, deci nu are nici o valoare. În continuare, este o versiune în
care instrucţiunea echo $a va accesa variabila $a definită în afara funcţiei test():

Cod:
<?php
$a = 1;
function test ()
   {
   global $a;
   echo $a;
   }
test ();
?>

O a doua posibilitate de a accesa o variabilă definită în afara funcţiei este folosirea vectorului
$GLOBALS:
Cod:
<?php
$a = 1;
function test ()
   {
   echo $GLOBALS ["a"];
   }
test ();
?>




                                       Tipuri de variabile




Variabilele pot fi de mai multe tipuri, nu doar numere. PHP are opt tipuri de variabile. Patru
dintre acestea sunt tipuri scalare (boolean, integer, float şi string), două sunt tipuri compuse
(array şi object), iar alte două sunt tipuri speciale (resource şi null). De asemenea, din motive
de lizibilitate, au fost introduse trei pseudotipuri: mixed, number şi callback. Mai exista şi tipul
double, dar semnificaţia acestuia este aceeaşi cu cea a tipului float. Cele două denumiri
coexistă doar din motive "istorice". În PHP, de obicei, tipul unei variabile nu este specificat de
către programator, ci este stabilit în timpul execuţiei în funcţie de contextul în care este
folosită variabila.

Tipul boolean: Variabilele de acest tip pot avea doar două valori: ADEVARAT sau FALS.
Aceste valori pot fi indicate prin cuvintele cheie TRUE sau FALSE (pentru ambele nu se face
distincţie între literele mari şi literele mici). Există posibilitatea de a converti o variabilă de
orice tip la tipul boolean. În momentul efectuării unei conversii, sunt convertite la valoarea
FALSE următoarele valori:
- numărul întreg 0;
- numărul real 0.0;
- sirul vid;
- sirul "0";
- un vector fără nici un element;
- un obiect fără nici o variabilă membru;
- o variabilă de tipul NULL;
- o variabilă nedefinită.
Orice altă valoare este convertită la valoarea TRUE (inclusiv resursele).
Acest tip se poate folosi de exemplu pentru verificarea logării într-o pagină de administrare.
După ce se fac verificările, dacă utilizatorul este logat ca administrator, funcţia noastră va
returna o valoare de adevar: TRUE dacă este logat, sau FALSE dacă nu este, şi astfel vom şti
dacă să îi acordăm sau nu acces în secţiunea de administrare.

Tipul integer: O variabilă de tip integer reprezintă o valoare din mulţimea numerelor întregi.
Aceste numere pot fi specificate în baza 10, în baza 16 sau în baza 8, convenţiile fiind aceleaşi
ca şi în limbajele C/C++ sau Java. Modul de reprezentare depinde de platforma utilizată; de
obicei se foloseşte reprezentarea pe 32 de biti. Interpretorul PHP nu oferă suport pentru
numerele întregi fară semn. Trebuie remarcat faptul că în PHP nu există nici un operator
pentru efectuarea de împărţiri întregi. De exemplu, rezultatul operaţiei 3/2 nu va fi numărul
întreg 1 (ca în C/C++ sau Java), ci numărul real (float) 1.5
Şi pentru numerele întregi există posibilitatea efectuării de conversii:
- valoarea logică TRUE este convertită la valoarea întreagă 1;
- valoarea logică FALSE este convertită la valoarea întreagă 0;
- un număr real este convertit prin "rotunjire înspre 0"; asadar, valoarea reală 2.5 va fi
convertită la valoarea întreagă 2, în timp ce valoarea reală -2.5 va fi convertită la valoarea
întreagă -2;
- un sir de caractere este convertit luând în considerare doar primele caractere care conţin
informaţii numerice; aşadar şirul "10" va fi convertit la valoarea întreagă 10; de asemenea
şirul "10 ani" va fi convertit tot la valoarea 10; dacă primele caractere nu conţin informaţii
numerice, rezultatul conversiei va fi valoarea 0.

Tipul float: O variabilă de tip float poate fi specificată folosind fie forma zecimala, fie cea
ştiinţifică (cu exponent). La fel ca şi în cazul tipului integer, precizia variabilelor de tipul float
este dependentă de platforma utilizată. De obicei se foloseşte standardul IEEE 64. Există
posibilitatea de a converti o variabilă de orice tip la tipul float. Pentru numerele reale se pot
efectua următoarele conversii:
- un şir de caractere este convertit luând în considerare doar primele caractere care conţin
informaţii numerice; aşadar şirul "10.2" va fi convertit la valoarea reală 10.2; şirul "1.23E1
ani" va fi convertit la valoarea 12.3;
- în toate celelalte cazuri se realizează conversii la numere întregi care apoi sunt convertite la
valorile reale corespunzătoare.

Tipul string: O variabilă de tip string reprezintă un şir de caractere. Un caracter se reprezintă
pe un octet, deci sunt 256 de caractere distincte. Acest lucru implică faptul că interpretorul
PHP nu oferă suport nativ pentru setul de caractere Unicode. Lungimea variabilelor de tip
string nu este limitată de către interpretor. Literalii de tip şir de caractere pot fi specificaţi în
trei moduri diferite:
- prin folosirea ghilimelelor simple (exemplu $a='acesta este un sir de caractere'). Pentru a
avea în cadrul şirului simbolul "`", atunci înaintea acestuia trebuie scris caracterul "", iar
pentru a putea specifica simbolul "" acesta trebuie dublat.
- prin folosirea ghilimelelor duble. Folosind această notaţie pot fi specificate mai multe
caractere speciale, pe lângă caracterele de la varianta anterioara, printre care: sfârşit de linie
("r"), rând nou ("n"), tab orizontal ("t"), semnul dolar ("$"), ghilimelele duble ("""),
secvenţe de caractere pentru specificarea faptului că o expresie regulară este în notaţie octală
("[0-7]{1,3}") şi secvenţele de caractere pentru specificarea faptului că o expresie regulară
este în notaţie hexazecimală ("x[0-9A-Fa-f]{1,2}"). Cel mai important lucru este acela că,
folosind acest mod de specificare a literalilor de acest tip, numerele de variabile care apar în
interior vor fi transformate în valoarea lor. De exemplu dacă $a este o variabilă de tipul
integer şi are valoarea 2, atunci sirul de caractere "Variabila a are valoarea $a." va fi
transformat în şirul "Variabila a are valoarea 2".
- notaţia heredoc. Acest tip de notaţie a fost introdus la versiunea 4 a interpretorului PHP.
Pentru a specifica un sir de caractere folosind această notaţie trebuie utilizat operatorul "<<<"
urmat de un identificator ales de utilizator. Toate caracterele care se află între operatorul
"<<<" urmat de un identificator pe o singură linie, şi acelaşi identificator pe o altă linie vor
constitui valoarea sirului de caractere. De exemplu, instrucţiunea:

Cod:
$str=<<<SF

Acesta este un exemplu

de utilizare a sintaxei

heredoc

SF;

va avea ca rezultat un şir de caractere format din trei linii de text.
Pentru a accesa un anumit caracter din şirul de caractere se foloseşte, după numele variabilei
de tip string, indicile caracterului care trebuie accesat scris între acolade. De exemplu, $str{0}
returnează primul caracter din şirul de caractere $str.
În cazul în care dorim să concaternăm două şiruri de caractere vom folosi operatorul "."
Folosirea operatorului "+" nu va concaterna cele două şiruri.
Există posibilitatea de a converti o variabilă de orice tip la tipul string. Pentru şirurile de
caractere se pot efectua următoarele conversii:
- valoarea logică TRUE va fi convertită la şirul "1", iar valoarea logică FALSE va fi convertită la
şirul vid ("");
- un număr întreg va fi convertit la un şir de caractere care reprezintă valoarea numărului în
baza 10;
- un număr real va fi convertit la un şir de caractere care reprezintă notaţia ştiinţifică a
acestuia;
- obiectele sunt întotdeauna convertite la şirul "Object";
- variabilele de tipul resource sunt convertite la şirul "Resource id #n", unde n reprezintă un
număr unic ataşat resursei respective de către interpretorul PHP;
- valoarea NULL este convertită la şirul vid ("").

Tipul array - Vectorii în PHP sunt nişte mulţimi formate din chei. Fiecarei chei din vector i se
ataşează o valoare. Acest tip de date este optimizat astfel încât să poată fi folosit în locul
următoarelor structuri de date: liste, tabele de dispersie, dicţionare, colecţii, stive, cozi şi
altele. Datorită faptului că o valoare poate fi reprezentată de un alt vector, se pot simula
foarte uşor arborii n-dimensionali sau tablourile n-dimensionale. Valoarea unei variabile de tip
vector se poate specifica folosind construcţia
array (cheie => valoare, cheie => valoare, ...)
De exemplu, următoarea înstrucţiune PHP va construi un vector cu două elemente, dintre care
unul este de tip string, iar celălalt de tip boolean:
$a = array ("ch" => "string", 12 => TRUE);
Variabila $a reprezinta un vector, $a ["ch"] are valoarea string, iar $a [12] are valoarea TRUE.
În cazul în care nu se specifică o cheie pentru o valoare, atunci acea valoare va fi ataşată unei
chei care va fi cheia maximă de tip integer folosită anterior, la care se adaugă valoarea 1.
Cheile pot avea şi valori negative. Dacă nu există chei de tip integer, atunci valoarea va fi
ataşata cheii 0. De exemplu, următoarele două instrucţiuni sunt echivalente:
array (5 => 43, 32, 56, "b" => 12);
array (5 => 43, 6 => 32, 7 => 56, "b" => 12);
Dacă se foloseşte valoarea logică TRUE ca şi cheie, atunci aceasta va fi convertită la cheia de
tip întreg 1, iar valoarea FALSE va fi convertită la numărul întreg 0. Nu se pot folosi pentru
chei variabile de tipul array sau object.
O variabilă de tip array se poate modifica prin setarea explicită de valori. De exemplu
instrucţiunea $a ["x"] = 42; adaugă în vectorul $a valoarea 42 ataşată cheii "x". Dacă se
foloseşte un vector care nu a fost definit anterior, atunci acesta este creat automat. Aşadar
printr-o instrucţiune de forma $a [5] = 42, în cazul în care vectorul $a nu există, atunci se va
crea un vector cu un singur element. Cheia acestuia va fi numărul întreg 5, iar valoarea sa va
fi 42.
De asemenea, există posibilitatea de a crea un element nou fără a-i preciza cheia. Sintaxa are
forma $vector [] = valoare; această instrucţiune are ca efect adăugarea unui element a cărui
cheie este un numar întreg mai mare cu 1 decât cel mai mare număr întreg care este cheie a
unui alt element al vectorului. Dacă nu există nici o astfel de cheie, atunci noul element va
avea cheia 0. De exemplu, următoarele două secvente sunt echivalente:
$a [5] = 1; ............................ $a [5] = 1;
$a [6] = 2; ............................ $a [] = 2;
Prin conversia la un vector a unei variabile de tip scalar (boolean, integer, float, string) sau
resource se creează un vector cu un singur element; cheia acestui element este numărul
întreg 0, iar valoarea este cea a variabilei convertite.
Dacă se converteşte un obiect (variabila de tip object), atunci vectorul rezultat va conţine câte
un element pentru fiecare variabilă membru a obiectului. Cheile elementelor vor fi date de
denumirile proprietăţilor obiectului (variabilele membru ale obiectului), iar valorile elementelor
vor fi valorile proprietăţilor obiectului.
Dacă realizăm o conversie a unei variabile de tip NULL, atunci rezultatul va fi un vector vid
(care nu conţine nici un element).
În continuare sunt prezentate câteva exemple care descriu mai detaliat posibilităţile oferite de
folosirea vectorilor în PHP. Pentru început, prezint un vector al cărui elemente reprezintă
caracteristicile unei portocale:
Cod:
$a = array ('denumire' => 'portocala',
'familie' => 'citrice',

'culoare' => 'portocaliu',

'forma' => 'rotunda',

'gust' => 'dulce'

);
Putem adăuga şi alte elemente care să reprezinte diferite alte proprietăţi. De exemplu, am
putea avea nevoie de o valoare suplimentară căreia nu dorim să îi atribuim nici un nume de
identificare (cheie). Pentru ca vectorul să conţina un element suplimentar cu valoarea 4, vom
putea defini vectorul astfel:
Cod:
$a = array ('denumire' => 'portocala',

'familie' => 'citrice',

'culoare' => 'portocaliu',

'forma' => 'rotunda',

'gust' => 'dulce',

4);
Cheia elementului cu valoarea 4 va fi numărul întreg 0 deoarece nu există nici o altă cheie
care este număr întreg. O alternativă de construire a acestui vector este următoarea:
Cod:
 $v['denumire'] = 'portocala';

 $v['familie'] = 'citrice';

 $v['culoare'] = 'portocaliu';

 $v['forma'] = 'rotunda';

 $v['gust'] = 'dulce';

 $v[] = 4;
Exemplul următor ilustrează cum puteţi folosi vectorii la afişarea unei pagini cu text colorat:
Cod:
$colors = array (`red`,
`green`,
`blue`,
`silver` );

foreach       ($colors as $color)
   {
   echo       "<FONT size = 4 color = $color>";
   echo       "<b>Acest text este <i>$color!</i>";
   echo       "</b></FONT><br>";
   }

Tipul object: Pentru a defini un obiect care poate fi folosit pentru afişarea mesajului
SALUTARE LUME! se scrie următoarea secvenţă:

Cod:
class salutare
   {
   function Displaysalutare ()
{
         echo "SALUTARE LUME!";
         }
     }
Pentru a utiliza o variabilă de tip obiect va trebui să realizăm o instanţiere prin intermediul
instrucţiunii new. Sintaxa este:
$a = new salutare;
Astfel, variabila $a devine un obiect ale cărui metode pot fi utilizate. Pentru afişarea propriu-
zisă a mesajului va trebui să executăm metoda Displaysalutare() printr-o instrucţiune de tipul
$a -> Displaysalutare();
Orice variabilă de un anumit tip poate fi convertită într-un obiect. Dacă variabila respectivă
este un obiect, atunci ea nu va fi modificată. În caz contrar, efectul conversiei este crearea
unei noi instanţe a clasei stdClass. Dacă variabila are tipul NULL, atunci noua instanţă va fi
vidă. În toate celelalte cazuri instanţa va conţine o variabilă membru numită scalar a cărei
valoare va fi cea a variabilei convertite. Pentru conversii vom folosi instrucţiuni de tipul
$obiect = (object) "SALUTARE LUME!"
După realizarea conversiei vom putea tipări mesajul SALUTARE LUME! folosind instrucţiunea
echo $obiect->scalar;

Tipul resource: Variabilele de tip resource sunt folosite pentru păstrarea unor referinţe către
anumite resurse externe cum ar fi conexiuni la baze de date, fişiere, etc. Resursele sunt create
şi utilizate de anumite funcţii speciale. Datorită specificului acestui tip de date valoarea nici
unei variabile de alt tip nu poate fi convertită la tipul resource.

Tipul NULL: Valoarea specială NULL este atribuită oricărei variabile care nu a fost iniţializată.
Această valoare este singura pe care o pot avea variabilele de tip NULL. Se consideră că o
variabilă are tipul NULL dacă:
- i s-a atribuit constanta NULL;
- nu a fost iniţializată;
- a fost deziniţializată (prin intermediul funcţiei unset() ).




                                  Afişarea mesajelor în PHP




Limbajul PHP oferă mai multe variante de a trimite la browser mesaje şi şiruri de caractere sau
chiar cod HTML. Cea mai folosită funcţie este echo(). Sintaxa corectă este:

<?php

echo("sir de caractere");

?>

Instrucţiunea de mai sus va afişa în browser mesajul introdus între ghilimele. Funcţia echo, la
fel ca şi print, nu este chiar o funcţie, ci mai degrabă un constructor al limbajului şi nu este
nevoie să folosiţi parantezele ca pentru o funcţie. De fapt, dacă doriţi să trimiteţi mai mulţi
parametri către echo, nu trebuie să includeţi aceşti parametrii între paranteze. Există chiar şi o
variantă mai scurtă a lui echo, dar aceasta funcţionează doar dacă este setat în configuraţia
php.ini directiva short_open_tag pe ON. Sintaxa pentru varianta scurtă este:

<?=$foo?>

În cazul de mai sus, imediat după deschiderea tagului php se va afişa valoarea variabilei $foo.
Nu recomand această abordare, deoarece nu toate serverele au setată în configuraţia lor
short_open_tag pe ON şi nu va funcţiona.
O funcţie asemănătoare cu echo este print. La fel ca şi echo, nici aceasta nu este chiar o
funcţie ci un constructor al limbajului, şi nu trebuie să utilizaţi parantezele. Textul ce urmează
a fi afişat trebuie introdus între ghilimele simple sau duble, rezultatul fiind uşor diferit.
Folosind ghilimelele duble, orice variabilă din cadrul stringului este parsată. Astfel, dacă am
avea de exemplu:

<?php

$x = 1;

$rezultat = $x*1;

print "Rezultatul inmultirii lui $x cu 1 este $rezultat";

?>

afişează în browser:

Rezultatul inmultirii lui 1 cu 1 este 2

Dacă am folosi ghilimelele simple (print '...'), variabilele $x şi $rezultat nu ar fi fost parsate şi
output-ul ar fi fost:

Rezultatul inmultirii lui $x cu 1 este $rezultat

Putem afişa variabilele şi dacă folosim ghilimelele simple, "rupând" stringul şi intercalându-l cu
variabile, în forma urmatoăre, folosind operatorul "."(punct) de concaternare a stringurilor
(şirurilor):

<?php

print 'Rezultatul inmultirii lui '.$x.' cu 1 este '.$rezultat;

?>

Pentru a afişa caracterele speciale folosite de PHP (ghilimelele simple ', ghilimelele duble ",
backslash-ul , semnul $) trebuie să le precedaţi cu semnul , astfel:

<?php

echo "Semnul dolar $, back-slash ";

?>

Ghilimelele trebuie precedate de semnul  doar dacă sunt de acelaşi tip cu cele care încadrează
string-ul. În plus, într-un string puteţi folosi celelalte ghilimele normal. Dacă doriţi să afişaţi
doar valoarea unei variabile, puteţi să nu o încadraţi între ghilimele. Exemplu:

<?php

echo $x;

?>

Alte informaţii despre aceste funcţii, precum şi altele asemănătoare cu acestea, de genul
printf(), şi flush() puteţi găsi în manualul oficial pe care îl puteţi lua gratuit de pe site-ul oficial
al PHP - www.php.net.
Construieşte un site cu php


În continuare, o să încerc să vă prezint cum se poate construi un site cu ajutorul limbajului
PHP. Exemplul prezentat nu este un standard, este doar o modalitate de a vedea cum se poate
construi un site şi cum se preiau sau trimite variabilele prin intermediul site-ului. Puteţi, pe
baza acestui exemplu, să vă construiţi propriul site, în forma preferată de dvs. şi adaptând
modelul acesta la necesitaţile voastre.
În exemplul meu, am preferat să am o singură pagină, anume index.php, în care să includ
dinamic conţinutul şi meniul, în funcţie de ce link accesează vizitatorul. Puteţi vedea acest
model într-un fel modular, fiecare script fiind de fapt un modul care execută anumite operaţii
specifice. Astfel, în pagina index.php se includ mai multe module (scripturi) care luate separat,
fiecare fac anumite lucruri, dar puse împreună, formează pagina de web generată dinamic. În
acest exemplu, nu am folosit o bază de date, dar pe acelaşi principiu se poate adapta ideea la
un site care preia datele din baza de date.

Partea de sus a paginii (head)                       După cum puteţi vedea alăturat, am despărţit
Partea cu meniul orizontal generat dinamic           fiecare parte a unei pagini în bucăţi, fiecare
(partea de body)                                     bucată este colorată diferit pentru o mai bună
                                       aici se pot   vizualizare. Puteţi introduce în fiecare bucată
         partea in care se afiseaza pune alte        câte un script php care să genereze respectiva
meniul
         continutul paginilor, si alte informatii    bucată dinamic. Astel, în cazul unei modificări,
lateral
         informatii                    generate      va fi mult mai uşor să modificaţi doar scriptul
                                       dinamic       care se ocupa de o anumită parte a paginii, pe
partea de incheiere a paginii (footer)               când daca tot site-ul ar fi fost facut static în
                                                     HTML, la un site cu 100-200 de pagini chiar şi
                                                     cea mai mică modificare ar fi însemnat un chin.


Am numit fiecare script care se ocupă de o anumită parte a site-ului astfe:
head.php - conţine partea dintre tagurile HTML <head> şi </head>
body.php - conţine partea dintre tagurile HTML <body> şi conţinutul paginii
footer.php - conţine partea de jos a paginii

În continuare, o să vă prezint fiecare modul în parte.
index.php -
  - head.php -
    - css.php -
    - js.php -
  - body.php -
    - meniu_orizontal.php -
    - meniu_vertical.php -
    - continut.php -
       - contact.php -
    - module.php -
       - /module/data_ora.php -
    - footer.php -

index.php - în care se setează nivelul de raportare al erorilor (dacă nu doriţi ca vizitatorii să
vada eventualele erori raportate de către php, puteţi stabili nivelul 0).Apoi, se verifică dacă
există fisierul head.php şi body.php şi se încarcă sau se opreşte cu un mesaj de eroare.
head.php - în acest fişier se afisează codul html pentru începutul paginii, şi dacă există, se
încarcă şi fişierele cu cod CSS şi JavaScript folosite în pagină.
css.php - acest fişier conţine codul CSS folosit pentru formatarea şi afişarea paginii HTML.
js.php - dacă se foloseşte cod JavaScript în pagini, este de preferat să se salveze codul în
acest fişier, pentru a putea avea acces rapid la el în cazul în care doriti să faceţi modificări.
body.php - conţine codul HTML existent între tagurile <body> şi </body> Dacă există, se
încarcă şi fişierele care conţin meniul orizontal şi/sau vertical, precum şi fişierul care afişează
conţinutul paginii cerute. Pe langă acestea, dacă doriţi să bagaţi alte scripturi în pagini, se
include şi fisierul module.php
meniu_orizontal.php - conţine codul HTML pentru meniul orizontal.
meniu_vertical.php - conşine codul HTML pentru meniul vertical
continut.php - afişează conşinutul paginilor, în funcţie de linkul cerut. Dacă se cer pagini
externe, se verifică daca acea pagină există şi se încarcă pentru afişare.
contact.php - poate fi o pagina externă, cu conţinut HTML sau PHP, precum şi formulare de
contact.
module.php - este un fişier care atunci când este accesat, verifică ce fişiere există în
directorul MODULE şi le încarcă pe fiecare.
data_ora.php - este un fişier extern, care afişează câteva informaţii despre vizitator.
footer.php - este fişierul care afişează în josul paginii numele curent al paginii

Acest exemplu îl puteţi descărca de aici şi îl puteţi testa şi modifica pe serverul dvs.




            Câteva informaţii despre documentarea şi depanarea unui script.




În afară de a furniza nume descriptive fişierelor care conţin scripturile dvs. PHP, trebuie să
includeţi în fiecare script atât comentarii care să permită unui cititor să determine cu uşurinţă
utilitatea scriptului, cât şi alte informaţii referitoare la script. De exemplu, puteţi include un
comentariu care precizează numele fişierului care conţine scriptul, astfel încât acesta să apară
în versiunile tipărite ale scriptului. Iată un model sintactic pentru comentariile PHP:

// Scrieti aici comentariul dvs.

După cum se poate vedea, un comentariu începe cu două caractere slash, urmate de un
spatiu. În continuare, linia conţine comentariul, care poate include orice caractere doriţi,
inclusiv caractere speciale.
O modalitate de a crea un comentariu pe mai multe linii este de a începe fiecare linie cu
ajutorul caracterelor //. Totuşi, puteţi crea un comentariu din mai multe linii şi în alte moduri,
dacă preferaţi. Iată un exemplu:

/*
Acesta este un comentariu pe mai multe linii.
Poate fi alcatuit dintr-un numar oricat de mare de linii.
*/

Pentru a începe un comentariu alcătuit din mai multe linii, scrieţi caracterele /*, iar pentru a
încheia comentariul, scrieţi caracterele */
Între cele două perechi de caractere, puteţi scrie orice text doriţi, folosind oricâte linii doriţi.

Uneori, în locul datelor de ieşire ale scriptului, puteţi vedea unul din următoarele:
- Textul scriptului, în loc de datele de ieşire ale acestuia
- O casetă de dialog, prin care sunteţi întrebat dacă doriţi să descărcaţi fişierul care conţine
scriptul.
- Un mesaj în care se spune că scriptul nu există
- Un mesaj în care se spune că browserul web nu are permisiunea de a obţine accesul la script
- Un mesaj în care se spune că scriptul conţine o eroare

La vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar dacă scriptul
în sine e corect. Dacă vedeţi textul scriptului sau o casetă de dialog prin care sunteţi întrebat
dacă doriţi să descărcaţi fişierul care conţine scriptul, este posibil ca extensia fişierului script
să fie incorectă sau ca serverul PHP să nu funcţioneze. Deşi fişierele script PHP trebuie să aibă,
în general, extensia .php, este posibil ca un administrator de sistem să configureze un server
PHP astfel încât acesta să impună o altă extensie de fişier.
Dacă vedeti un mesaj în care se spune că scriptul nu există, este posibil ca să fi tastat incorect
adresa URL. Verificaţi dacă aţi tastat corect adresa URL precum şi dacă aţi ataşat corect la
aceasta numele fişierului care conţine scriptul, folosind un slash numai dacă adresa URL nu se
încheie cu un atare caracter.
Dacă vedeţi un mesaj în care se arată că browserul web nu are permisiunea de a obţine
accesul la script, poate că este necesar să modificaţi permisiunile fişierului script (cmod).
Dacă vedeţi un mesaj în care se spune că scriptul conţine o eroare, verificaţi dacă nu au
apărut următoarele probleme:
- O eroare de tastare, cum ar fi scrierea greşită a cuvântului echo
- O eroare de punctuaţie, cum ar fi paranteze, ghilimele duble sau punct şi virgulă lipsă sau
inserate greşit.
- Neincluderea sau includerea eronată a liniilor de delimitare a scriptului, în speţă <?php şi ?>
- Un marcaj de comentariu (//) care lipseşte sau a fost introdus gresit.

Şirurile şi caracterele speciale

Spre deosebire de numere întregi şi de numere duble, care conţin cu precădere cifre, şirurile
pot conţine orice caracter. Ca atare, şirurile sunt utile pentru stocarea datelor care nu pot fi
calculate, precum nume şi adrese. De asemenea, şirurile pot fi utilizate pentru stocarea
datelor numerice. Pentru a specifica un şir în PHP, caracterele care alcătuiesc şirul sunt incluse
între ghilimele duble; de exemplu, şirul reprezentând numele "Albert Einstein". Aşa cum am
mai spus, un şir poate conţine date numerice; de exemplu , "3.141516". PHP facilitează
includerea în şiruri a unor caractere speciale, precum caracterele de salt la linie nouă sau retur
de car, prin furnizarea de secvenţe escape care reprezintă caractere speciale. Iată secvenţele
escape folosite în PHP:

n - salt la linie noua
r - retur de car
t - caracter de tabulare pe orizontală
 - backslash
$ - simbolul dolarului
" - ghilimele duble

Ca exemplu, iată un şir care include un retur de car, urmat de un salt la linie nouă:

"Salut! rn".

Reţineţi că fiecare secvenţă escape începe cu un backslash (). Pentru a include un backslash
într-un şir, trebuie să folosiţi secvenţa escape adecvată, care este alcătuită din două caractere
backslash. Pentru a introduce ghilimele duble în cadrul unui şir fără a folosi secventa escape,
puteţi include şirul între ghilimele simple astfel:

'Pe ea o cheama "Nikita"'

Aceasta este util când doriţi să introduceţi într-un şir taguri HTML, astfel:

$sir = '<a href="index.php" target="_blank">Prima pagină</a>';

După cum observaţi deoarece standardul HTML necesită folosirea ghilimelelor pentru a nu se
încurca cu codul php am folosit pentru acest sir ghilimele simple. Sigur, acest cod se poate
scrie şi asa:

$sir = "<a href="index.php" target="_blank">Prima pagină</a>";
dar personal mi se pare greu inteligibil acest cod şi la un volum mare de date pot apare multe
erori datorate scrierii incorecte a codului html în interiorul codului php.


                                         Operatori PHP


Interpretorul PHP permite folosirea a nouă tipuri diferite de operatori. Aceştia operează asupra
unor expresii (una, doua sau trei) şi furnizează ca rezultat o altă expresie (rezultatul operaţiei
corespunzătoare).

Operatori aritmetici:
Toţi operatorii aritmetici operează asupra a două expresii (operanzi). Există cinci astfel de
operatori:
- adunare ('+');
- scădere ('-');
- înmulţire ('*');
- împarţire ('/');
- rest ('%').
Aceste operaţii se aplică asupra unor valori care reprezintă tipuri numerice. Dacă unul dintre
operanzi nu are tip numeric, atunci el va fi convertit automat la o valoare întreagă. Dacă cel
puţin unul dintre operanzi (după efectuarea eventualelor conversii necesare) este un număr
real, atunci rezultatul operaţiei va fi tot un număr real, cu excepţia operatorului rest; rezultatul
operaţiei de determinare a restului este întotdeauna un număr întreg. Dacă ambii operanzi
sunt numere întregi, atunci rezultatul va fi un număr întreg, cu excepţia împărţirii al cărei
rezultat este întotdeauna un număr real. Dacă operatorul rest este aplicat asupra unor numere
reale, atunci rezultatul este un număr întreg. Nu este permisă împărţirea la valoarea 0. Dacă
al doilea operand asupra căruia se aplică unul dintre operatorii '/' sau '%' are valoarea 0, va fi
semnalată o eroare.

Operatori de comparare:
Interpretorul PHP pune la dispozitie mai mulţi operatori care pot fi folosiţi pentru compararea a
două valori. Expresiile în care apar astfel de operatori au ca rezultat valori logice (true sau
false).
Cel mai des întâlnit operator este cel de atribuire, definit prin semnul =
Dacă scriem $x = 1 nu înseamnă că $x este egal cu 1 ci că i s-a acordat valoarea 1. Dacă
scriem $rezultat = $x + $y nu înseamnă că $rezultat este egal cu suma celor două, ci că i-am
atribuit (acordat) valoarea sumei celor două.
Operatorul de egalitate este == si se foloseşte cel mai des în propoziţii condiţionale, pentru a
testa egalitatea. Opusul său, !=, este operatorul de inegalitate şi se foloseşte în acelaşi scop.
Operatorul de egalitate se foloseşte pentru a compara egalitatea a două valori. Pentru a vă
lămuri cum stă treaba cu egalitatea şi atribuirea, testaţi următorul cod:



Cod:

<?php
$x = 1;
$y = 7;
if ($x ==    $y)
    {
    print    "$x este egal cu $y";
    }
if ($x !=    $y)
    {
    print    "$x este diferit de $y";
}
?>

Alţi operatori folosiţi pentru compararea valorilor variabilelor sunt:
'>' mai mare
'>=' mai mare sau egal
'<' mai mic
'<=' mai mic sau egal

Exemplu:

Cod:

<?php
$x = 5;
$y = 4;
if ($x > $y)
    {
    print "$x este mai mare ca $y";
    }
if ($x <= $y)
    {
    print "$x este mai mic sau egal cu $y";
    }
?>

'==' - rezultatul este true dacă cele două expresii au aceeaşi valoare;
'===' - rezultatul este true dacă cele două expresii au aceeaşi valoare şi au acelaşi tip;
'!=' sau '<>' - rezultatul este true dacă cele două expresii au valori diferite;
'!==' - rezultatul este true dacă cele două expresii au valori diferite sau au tipuri diferite;
'<' - rezultatul este true dacă valoarea primei expresii este mai mică decât valoarea celei de-
a doua expresii;
'>' - rezultatul este true dacă valoarea primei expresii este mai mare decât valoarea celei de-
a doua expresii;
'<=' - rezultatul este true dacă valoarea primei expresii este mai mică sau egală cu valoarea
celei de-a doua expresii;
'>=' - rezultatul este true dacă valoarea primei expresii este mai mare sau egală cu valoarea
celei de-a doua expresii.

Pe lângă acestea există şi operatorul condiţional '?' care are forma expresie1?
expresie2:expresie3 şi are ca rezultat valoarea expresiei expresie2 dacă valoarea expresiei
expresie1 este true (eventual după conversia la tipul boolean) sau valoarea expresiei
expresie3 în caz contrar.

Operatori pentru şiruri de caractere:
Operatorii pentru stringuri sunt '.' (punct) pentru concaternare şi '.=' (punct şi egal) pentru
atribuirea concaternării. Aceşti operatori sunt folosiţi pentru a unii stringuri, în felul urmator:



Cod:

<?php
// concaternarea stringurilor
$test = 'Am scris un '.'text'.'oarecare';
print $test;
// pe ecran va fi afisat "Am scris un text oarecare"

// concaternarea stringurilor cu variabile
$nr = 5;
print 'Am scris numarul '.$nr.' si un text '.' oarecare';
// pe ecran va fi afisat "Am scris numarul 5 si un text oarecare"

// atribuirea concaternarii
$nr = 6;
$text = "Un text ";
$text .= "oarecare ";
$text .= "si numarul ".$nr;
print $text;
// pe ecran va fi afisat "Un text oarecare si numarul 6"
?>

Operatori pe biţi şi operatori logici:
Interpretorul PHP pune la dispoziţie şase operatori care operează asupra biţilor unui număr
întreg sau ai unui şir de caractere. Aceştia sunt:
- conjuncţie ('&') - SI (AND);
- disjuncţie ('|') - SAU (OR);
- disjuncţie exclusivă ('^') - SAU exclusiv (XOR);
- negaţie ('~') - NU (NOT);
- deplasare la stânga ('<<');
- deplasare la dreapta ('>>').

Operatorii logici vă vor veni la îndemână în execuţia scriptului atunci când aveţi nevoie să
lucraţi cu valori de adevăr. Să presupunem că la intrarea în secţiunea de administrare avem
un formular care cere numele şi parola de acces în secţiune. Pentru contruirea expresiilor
logice operanzii trebuie să aibă tipul boolean; dacă operatorii au alt tip, valoarea este
convertită la o valoare booleană. Scriptul PHP ar putea verifica aceste informaţii pentru a
autoriza accesul în secţiune folosind operatorii logici astfel:
- operatorul 'xor' (SAU exclusiv)
Expresia în care apare operatorul 'xor' va avea valoarea true dacă exact unul dintre operanzi
are valuarea true

- operatorul '!' (NOT)
if (!parola_e_buna) ... parola nu este bună, accesul este interzis
if (!parola_nu_e_buna) ... parola e bună, accesul este permis
Operatorul '!' returneaza TRUE dacă valoarea iniţială de adevăr e FALSE şi FALSE dacă
valoarea iniţială este TRUE.

- operatorul '||' (OR)
if (numele_este_valid) || parola_este_buna) ...
verifică dacă numele sau parola sunt valide şi dacă oricare dintre ele este, returnează valoarea
de adevăr TRUE. În acest exemplu de pseudocod dacă numele ar fi valid dar parola nu, i-am
acorda utilizatorului acces mai departe, ceea ce nu este de dorit. Trebuie să fim siguri că şi
numele şi parola sunt valide. Operatorul '||' returnează TRUE dacă oricare din valorile
verificate e TRUE. Returnează FALSE doar dacă amândouă sunt FALSE.

- operatorul '&&' (AND)
if (numele_este_valid && parola_este_buna) ...
dacă atât numele cât şi parola sunt valide putem acorda utilizatorului acces în secţiunea de
administrare. Operatorul '&&' returnează TRUE doar dacă ambele valori verificate sunt TRUE.
El returnează FALSE dacă oricare dintre ele este FALSE (sau dacă amândouă sunt FALSE).

Operatori de atribuire:
Primul operand asupra căruia este aplicat un astfel de operator de atribuire trebuie să fie o
variabilă, iar al doilea poate fi o expresie.
Operaţia                           Varianta scurtă              Varianta standard
adunare ('+=')                     $a += 2                      $a = $a + 2
scădere ('-=')                 $a   -= 2     $a   =   $a   -2
înmulţire ('*=')               $a   *= 2     $a   =   $a   *2
împărţire ('/=')               $a   /= 2     $a   =   $a   /2
rest ('%=')                    $a   %= 2     $a   =   $a   %2
conjuncţie ('&=')              $a   &= 2     $a   =   $a   &2
disjuncţie ('|=')              $a   |= 2     $a   =   $a   |2
disjuncţie exclusivă ('^=')    $a   ^= 2     $a   =   $a   ^2
deplasare la stânga ('<<=')    $a   <<= 2    $a   =   $a   << 2
deplasare la dreapta ('>>=')   $a   >>= 2    $a   =   $a   >> 2
concaternare ('.=')            $a   .= "2"   $a   =   $a   . "2"

Exemplu:

Cod:

<?php
$b = 2;
$a = 1;
echo "<TT>$a += $b = ";
echo $a += $b;

$b =   2;
$a =   1;
echo   "<br>$a -= $b = ";
echo   $a -= $b;

$b =   2;
$a =   1;
echo   "<br>$a *= $b = ";
echo   $a *= $b;

$b =   2;
$a =   1;
echo   "<br>$a /= $b = ";
echo   $a /= $b;

$b =   2;
$a =   1;
echo   "<br>$a %= $b = ";
echo   $a %= $b;

$b =   2;
$a =   1;
echo   "<br>$a &= $b = ";
echo   $a &= $b;

$b =   2;
$a =   1;
echo   "<br>$a |= $b = ";
echo   $a |= $b;

$b =   2;
$a =   1;
echo   "<br>$a ^= $b = ";
echo   $a ^= $b;

$b = 2;
$a = 1;
echo "<br>$a <<= $b = ";
echo $a <<= $b;

$b =   2;
$a =   1;
echo   "<br>$a >>= $b = ";
echo   $a >>= $b;

$b =   2;
$a =   1;
echo   "<br>$a .= $b = ";
echo   $a .= $b;
echo   "</TT>";
?>


Rezultatul codului de mai sus este:

1   += 2 = 3
1   -= 2 = -1
1   *= 2 = 2
1   /= 2 = 0.5
1   %= 2 = 1
1   &= 2 = 0
1   |= 2 = 3
1   ^= 2 = 3
1   <<= 2 = 4
1   >>= 2 = 0
1   .= 2 = 12


Operatori de incrementare şi decrementare:
Operatorul de incrementare (++) are ca efect creşterea cu 1 a valorii unei variabile, iar cel de
decrementare (--) are ca efect scăderea cu 1 a valorii variabilei. Tipul variabilei poate fi întreg
sau real. Dacă operatorul precede variabila, atunci rezultatul expresiei este valoarea obţinută
după incrementare sau decrementare. Dacă variabila precede operatorul, atunci rezultatul
expresiei este valoarea variabilei înaintea incrementării sau decrementării. Cu alte cuvinte,
dacă operatorul precede variabila, atunci valoarea variabilei este mai întâi modificată şi apoi
utilizată, iar dacă variabila precede operatorul, atunci valoarea ei este mai întâi utilizată şi apoi
modificată.
Aceşti operatori pot fi utilizaţi şi pentru variabile care conţin şiruri de caractere. Operatorul de
incrementare duce la creşterea cu 1 a codului ASCII a ultimului caracter din şir dacă acesta
este o litera sau cifră. În cazul în care litera este 'z', respectiv 'Z', sau cifra este '9', atunci ea
devine 'a', respectiv 'A', sau cifra '0' şi se încearcă incrementarea penultimului caracter. Dacă
aceasta este tot '9', 'z' sau 'Z' se aplică acelaşi procedeu şi se trece la antepenultimul
caracter. Procedeul continuă până în momentul în care se ajunge la un caracter care nu este
'9', 'z' sau 'Z' sau se ajunge la începutul şirului. În acest ultim caz, la începutul şirului se
adaugă caracterul '1', 'a' sau 'A'. Incrementarea nu are nici un efect pentru caracterele care
nu sunt cifre sau litere.
Decrementarea şirurilor de caractere nu are nici un efect, valorile variabilelor rămânând
nemodificate. Există o singură excepţie şi anume şirurile care reprezintă numere întregi sau
reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice.

Exemplu:
Cod:

<?php
$a = 7;
echo "<tt>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>
";
echo $a++;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>
";
echo ++$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>
";
echo $a--;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>
";
echo --$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
$a = 7.5;
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>
";
echo $a++;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>
";
echo ++$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>
";
echo $a--;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>
";
echo --$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
$a = "PHP";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt>
";
echo $a++;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt>
";
echo ++$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt>
";
echo $a--;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "<br>a = $a";
echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt>
";
echo --$a;
echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t
t>$a.";
echo "</tt>";
?>


Rezultatul codului de mai sus este:

a   =   7: Rezultatul operatiei a++ este 7. Noua valoare a variabilei a este 8.
a   =   8: Rezultatul operatiei ++a este 9. Noua valoare a variabilei a este 9.
a   =   9: Rezultatul operatiei a-- este 9. Noua valoare a variabilei a este 8.
a   =   8: Rezultatul operatiei --a este 7. Noua valoare a variabilei a este 7.
a   =   7.5: Rezultatul operatiei a++ este 7.5. Noua valoare a variabilei a este   8.5.
a   =   8.5: Rezultatul operatiei ++a este 9.5. Noua valoare a variabilei a este   9.5.
a   =   9.5: Rezultatul operatiei a-- este 9.5. Noua valoare a variabilei a este   8.5.
a   =   8.5: Rezultatul operatiei --a este 7.5. Noua valoare a variabilei a este   7.5.
a   =   PHP: Rezultatul operatiei a++ este PHP. Noua valoare a variabilei a este   PHQ.
a   =   PHQ: Rezultatul operatiei ++a este PHR. Noua valoare a variabilei a este   PHR.
a   =   PHR: Rezultatul operatiei a-- este PHR. Noua valoare a variabilei a este   PHR.
a   =   PHR: Rezultatul operatiei --a este PHR. Noua valoare a variabilei a este   PHR.

Aceşti operatori sunt utili de exemplu pentru monitorizarea unui download, dacă doriţi să ştiţi
de câte ori a fost descărcat un fişier dintr-o anumită pagină. La fiecare accesare a fişierului,
scriptul incrementează cu 1 şi afişează valoarea. (scriptul îl gândiţi voi, doar nu vreţi totul la
tavă)

Operatori pentru controlul erorilor:
În PHP există un operator (@) care permite ignorarea erorilor. Dacă este aplicat asupra unei
expresii care ar duce la afişarea unui mesaj de eroare, atunci mesajul respectiv nu va fi afişat.

Operatori de execuţie:
Interpretorul PHP permite executarea unor comenzi sistem prin intermediul operatorului (` `)
. Comanda respectivă este cuprinsă între apostroafele inverse (tasta de lângă 1 deasupra
tastei tab), iar rezultatul acestei comenzi este un şir de caractere care reprezintă şi rezultatul
expresiei.
Urmatorul script PHP determină execuţia pe server a comenzii help /? şi afişarea rezultatului
în fereastra programului de navigare.
Cod:

<?php
echo "<PRE>".`help /?`."</PRE>";
?>


Atenţie!
Pe unele configuraţii de server nu se permite executarea de comenzi prin intermediul PHP (ca
măsură de siguranţă, altfel oricine ar putea da un format sau reboot la server prin intermediul
unui script PHP).

Operatori pentru vectori:
Singurul operator care poate fi aplicat asupra vectorilor este cel de concaternare (+)
Rezultatul concaternării a doi vectori este un vector care conţine elementele din cei doi vectori.
Dacă cei doi vectori conţin elemente cu aceeaşi cheie, atunci este păstrat doar elementul din
vectorul care reprezintă primul operand.

Exemplu:


Cod:

<?php
$x[2] = 2;
$x[4] = 4;
$x[5] = 5;
$x[7] = 7;
$y[1] = 100;
$y[2] = 200;
$y[3] = 300;
$y[4] = 400;
$y[5] = 500;
$z = $x + $y;
echo "$z[1] $z[2] $z[3] $z[4] $z[5] $z[7]";
?>

Rezultatul codului de mai sus este:

100 2 300 4 5 7

Ordinea operaţiilor:
Evident, o expresie poate conţine mai mulţi operatori, din categorii diferite. Pentru a indica
ordinea în care trebuie efectuate calculele, trebuie stabilită o ordine a operaţiilor. Pentru
aceasta a fost definită precedenta şi asociativitatea operaţiilor.
Valoarea expresiilor corespunzătoare operatorilor cu precedenta mai mare va fi calculată
înaintea valorilor expresiilor cu o precedentă mai mică. De exemplu, pentru expresia 1 + 2 *
3 va fi efectuată mai întâi înmulţirea 2 * 3, datorită faptului că operatorul '*' are precedenta
mai mare decât cea a operatorului '+'.
Dacă o expresie sau o subexpresie conţine numai operatori cu aceeaşi precedentă, atunci
operaţiile se vor efectua în ordinea determinată de asociativitatea acestor operatori care poate
fi de la dreapta la stânga sau de la stânga la dreapta. Toţi operatorii cu aceeaţi precedentă au
aceeaşi tip de asociativitate.
Evident, pentru a modifica ordinea implicită de efectuare a operaţiilor pot fi folosite paranteze
pentru a indica faptul că o anumită operaţie trebuie efectuată înaintea altora, chiar dacă
acestea din urmă au o precedentă mai mare.
Trebuie observat faptul că, datorită asociativităţii de la dreapta spre stânga a operatorilor de
atribuire, expresiile de tipul $a = $b = 1 sunt valide. Mai întâi se va efectua atribuirea $b =
1; variabila $b va primi valoarea 1 şi, datorită faptului că rezultatul unei operaţii de atribuire
este valoarea atribuită variabilei care reprezintă primul operand, în continuare se va efectua
atribuirea $a = 1, deci şi variabila $a va primi tot valoarea 1. Tabelul de mai jos conţine o
listă cu majoritatea operatorilor din PHP. Liniile tabelului indică precedenta, în sensul că un
operator are aceeaşi precedentă cu operatorii de pe linie în care apare şi o precedentă mai
mare decât oricare operator aflat pe o linie anterioară. În acest tabel se observă faptul că, deşi
operatorii '&&' şi 'and', respectiv '||' şi 'or' realizează aceeaşi operaţie, ei au precedente
diferite, deci nu sunt echivalenţi din toate punctele de vedere.

          Tip asociativitate       Tip                              Operanzi
de   la   stânga la dreapta       unar                            . (selectare)
de   la   stânga la dreapta       binar                                  or
de   la   stânga la dreapta       binar                                 xor
de   la   stânga la dreapta       binar                                 and
de   la   stânga la dreapta       binar                                print
                                                                         =
                                                                        +=
                                                                        -=
                                                                        *=
                                                                         /=
                                                                         .=
de la stânga la dreapta           binar                                 %=
                                                                        &=
                                                                         |=
                                                                        ^=
                                                                        ~=
                                                                       <<=
                                                                       >>=
de   la   stânga   la   dreapta   ternar                                ?:
de   la   stânga   la   dreapta    binar                                 ||
de   la   stânga   la   dreapta    binar                                &&
de   la   stânga   la   dreapta    binar                                  |
de   la   stânga   la   dreapta    binar                                  ^
de   la   stânga   la   dreapta    binar                                  &
                                                                        ==
                                                                         !=
fără asociativitate               binar
                                                                       ===
                                                                       !==
                                                                          <
                                                                        <=
fără asociativitate               binar
                                                                          >
                                                                        >=
                                                                        <<
de la stânga la dreapta           binar
                                                                        >>
                                                                          +
de la stânga la dreapta           binar                                   -
                                                               . (concaternare)
                                                                          *
de la stânga la dreapta           binar                                   /
                                                                         %
de la stânga la dreapta           unar                                    !
                                                                          ~
                                                                        ++
                                                                         --
                                                                       (int)
                                                                      (float)
                                                                     (string)
                                                                     (array)
                                                                     (object)
@
de la stânga la dreapta            unar                                 [
fără asociativitate                unar                                new

În tabel este prezentat şi numărul expresiilor asupra cărora acţionează un operand. Operatorii
unari acţionează asupra unei singure expresii, cei binari asupra a două expresii şi singurul
operator ternar asupra a trei expresii.

În continuare sunt câţiva operatori care execută operaţii utile:

-   abs(x) - returnează valoarea absolută a lui x;
-   ceil(x) - returnează valoarea x, rotunjită la întregul imediat superior;
-   floor(x) - returnează valoarea x, rotunjită la întregul imediat inferior;
-   max(x, y, ...) - returnează valoarea maximă a unui set de valori;
-   min(x, y, ...) - returnează valoarea minimă a unui set de valori;
-   pow(x, n) - returnează numărul x, ridicat la puterea specificată n;
-   strftime(f) - returnează data curentă, formatată conform conţinutului parametrului f;
-   sqrt(x) - returnează rădăcina pătrată a lui x

Mai jos sunt cateva exemple:

$lungime = sqrt($arie);

Acest exemplu calculează lungimea laturilor unui pătrat, dacă este cunoscută aria pătratului.
În continuare este prezentat modul de utilizare al funcţiei max, care preia mai multe
argumente:

$punctaj_castigator = max($punctaj1, $punctaj2, $punctaj3);

Un alt exemplu calculează aria unui cerc de rază dată:



Cod:

<?php
$raza = 2.0;
$pi = 3.14159;
$arie = $pi * $raza * $raza;
echo "raza = ";
echo $raza;
echo "<br>arie = ";
echo $arie;
?>



                      Câteva idei utile pentru securitatea paginilor web


Regula numărul unu a securităţii online este: nu vă încredeţi niciodată în utilizator.
Întotdeauna verificaţi datele trimise către server şi "curăţaţi-le" înainte de a le utiliza. Pentru
aceasta trebuie să luaţi în considerare câteva posibile "găuri" de securitate. Menţionez că cele
scrise aici sunt doar noţiuni generale, pentru o securitate ridicată ar trebui sa aveţi noţiuni
specializate de baze de date şi de administrare a serverelor web.

1. Variabilele globale
Având variabilele globale din php.ini setate pe ON puteţi accesa datele trimise prin formulare
mai simplu: $variabila în loc de $_GET['variabila'], la fel şi pentru POST sau FILES. Dacă
scriptul nu este foarte bine gândit, variabilele globale pot prezenta un risc major de securitate.
Din acest motiv php.ini este distribuit cu globals=off în ultimele versiuni.

2. Ghilimele "magice"
Dacă în php.ini magic_quotes_gpc sunt OFF folosiţi funcţia addslashes pentru a preceda
ghilimelele din datele trimise de utilizatori cu caracterul . Dacă magic_quotes_gpc sunt ON,
PHP adaugă automat caracterul  înainte de ghilimele dar dacă ele sunt OFF, ghilimelele din
input vă pot crea probleme serioase.
Ca exemplu, să presupunem că interogarea SQL de verificare a numelui şi a parolei pentru
înregistrarea pe site este

SELECT * FROM users WHERE nume='$nume' AND parola='$parola'

şi dacă interogarea este executată cu succes, utilizatorul este logat. În acest caz, folosind
parola 'OR' 1=1 oricine poate avea acces pe site deoarece interogarea

SELECT * FROM user WHERE nume='un nume oarecare' AND parola=" OR '1=1'

este executată cu succes şi returnează un rezultat (toate înregistrarile din baza de date, de
fapt). Mai mult, atunci când vă aşteptaţi ca baza de date să returneze un singur rând, verificaţi
acest lucru şi nu dacă interogarea s-a executat cu succes. Implicit în php.ini
magic_quotes_gpc sunt ON pentru a vă proteja de astfel de atacuri, dar este bine să verificaţi
înainte de a renunţa la addslashes.

3. Includere
Încercaţi să evitaţi includerea "vizibilă" a fişierelor în forma http://site.ro/fisier.php?
file=cutare.html pentru a include fişiere în cadrul unei pagini. Cu puţină neatenţie din partea
voastră atacatorul ar putea accesa astfel de informaţii sensibile din cadrul sistemului. Nu
includeţi fişiere străine. PHP poate "include" fişiere aflate pe alte servere decât cel care rulează
dacă setarea URL fopen wrappers este activată în php.ini. În exemplul de mai sus, un atacator
ar fi putut accesa adresa

http://site.ro/fisier.php?file=http://www.rau.ro/scriptultau.php

pentru a include în fisier un script localizat pe alt server şi astfel obţine acces către toate
resursele sistemului la care are acces PHP, putând rula comenzi de sistem, afişa informaţii
confidenţiale sau sterge baza de date. Nu permiteţi includerea fişierelor din altă parte decât de
pe serverul vostru. Setaţi allow_url_fopen=OFF în php.ini.

4. Formulare
Folosiţi metoda POST în formulare atunci când informaţia din acestea urmează să fie introdusă
în baza de date. Dacă variabilele globale sunt OFF în php.ini sau metoda de transmitere a
formularului este GET, un utilizator rău intenţionat ar putea accesa adresa dvs. şi ar introduce
comentariul lui (exemplu "blabla") în baza voastră de date fără să treacă propriuzis prin site.
Aşa vă puteţi trezi că nu mai aveţi spaţiu pe server iar în baza de date sunt câteva milioane de
comentarii care spun acelaşi lucru "blabla".
Verificarea provenienţei cererilor către server este foarte importantă şi în alt caz: formularele
de loghin. Cineva care ştie numele de utilizator ar putea încerca să vă găsească parola foarte
usor. În acest caz va trebui să puneţi o protecţie suplimentară care să nu permită mai mult de
X încercări consecutive eşuate de logare pentru un nume de utilizator. Această problemă se
rezolva uşor folosind sesiunile. În momentul când cineva încearcă să trimita numele şi parola
din formular putem seta o variabilă de sesiune $_SESSION['login_count'] care să ţină minte
numărul de încercări. Când valoarea acesteia trece de 3 (încercări nereuşite) nici măcar nu
mai interogaţi baza de date pentru a verifica datele trimise. Variabila de sesiune va rămâne în
memorie cât timp browserul este deschis şi sesiunea activă (opţiunea implicită a PHP de
menţinere a sesiunilor active este de o oră). Dacă atacatorul aşteaptă o ora sau îşi închide
browserul, sesiunea va fi închisă şi va putea de alte X ori să se logheze. De cele mai multe ori
acestă măsură de siguranta este suficientă pentru a preveni încercările de aflare a parolelor.
5. Extensii
O practică obişnuită este de a acorda extensia .inc fişierelor care conţin biblioteci de funcţii ce
urmează a fi incluse şi folosite în cod. PHP nu parsează fişierele cu extensia .inc şi dacă
acestea sunt apelate direct ele sunt trimise plain text către browser. Nu puneţi informaţii
sensibile (precum nume şi parola) în fişiere cu extensia .inc, .txt, sau .html care pot fi
accesate şi văzute. Folosiţi pentru aceste fişiere extensia .php care, dacă sunt accesate direct,
vor fi rulate fără să afişeze informaţiile conţinute în ele.

6. Comanda CHMOD - setarea atributelor
Comanda CHMOD (abreviere pentru change mode permissions of a file) este folosită pentru a
schimba modul de acces (de permitere) a fişierelor şi directoarelor de pe server. Setarea poate
afecta modul cum poate fi citit, sau cum se poate executa un fişier pe server. De exemplu,
dacă aveţi un fişier .php care trebuie să execute o comandă de scriere pe server într-un fişier
.txt trebuie să îi daţi dreptul să poata fi executat iar la fişierul .txt trebuie să îi daţi dreptul de
a se putea scrie în el. Aveti 3 tipuri de acces - OWNER - GROUP - WORLD - fiecare cu câte 3
setări - READ - WRITE - EXECUTE -
Este bine ca la WORLD să nu daţi decât acces la citire (pentru a putea accesa paginile de pe
site) dar nu şi drepturi de scriere sau execuţie (pentru că nu doriţi ca oricine să vă scrie ce
vrea în respectivul fişier .txt)
În programul TOTAL COMMANDER (pe care eu îl folosesc şi pentru FTP) setarea atributelor pe
server se face din meniul FILES - CHANGES ATTRIBUTES. Fiecare program de FTP are în
meniul lui setare pentru atributele fişierelor de pe server.

7. Cookies
Dacă aveţi o secţiune de administrare pe site, unde accesul este restrictionat doar la membrii
de exemplu, este bine ca în toate paginile din această secţiune să încludă o pagină de
verificare a accesului. Această pagina va verifica la fiecare accesare dacă utilizatorul este
înregistrat şi are acces pe pagina respectivă şi permite rularea paginii doar dacă utilizatorul
este înregistrat. Fără această verificare, un utilizator ar putea accesa paginile din secţiunea de
administrare fără să treacă prin formularul de înregistrare. După autentificarea propriu-zisă,
vom folosi variabile de sesiune pentru a păstra în memorie câteva informaţii despre
autentificare, pentru a le verifica mai târziu, atunci când accesăm alte pagini din cadrul
secţiunii de administrare. Pornim întâi sesiunea după care trecem la salvarea informaţiilor în
ea ca în exemplul de mai jos:

session_start();
$_SESSION ['nume_admin'] = $_POST ['nume'];
$_SESSION ['parola_encriptata'] = $parolaEncriptata;

Pe lângă acestea, pentru o şi mai mare siguranţă, vom salva id-ul sesiunii în altă variabilă.
Toate sesiunile au un id unic, un string care seamănă cu rezultatul unei criptări MD5:
$_SESSION ['key_admin'] = session_id();
Cu autentificare făcută, spunem scriptului să încarce prima pagină din secţiunea de
administrare:

header ("location: admin.php");

În continuare pentru a împiedica accesul neautorizat la paginile din această secţiune, scriem
un mic script de verificare a datelor sesiunii înainte de a încărca orice pagină din secţiunea de
administrare:

session_start();
if ($_SESSION ['key_admin'] != session_id ()) {
print 'Acces neautorizat!';
exit;
}

8. Loguri de acces
Pentru o verificare ulterioară a persoanelor care încearcă să intre în paginile restrictionate de
pe site, este bine să salvăm în baza de date (sau într-un fişier text) numele, parola criptata,
ora, data, semnătura browserului şi ip-ul. Aşa veţi ştii cine a încercat să vă spargă site-ul şi
puteţi crea un script care sa verifice de exemplu ip-ul şi dacă corespunde cu unul din cele care
sunt blocate să nu aibă acces la nici una din pagini (chiar dacă găseşte userul şi parola
corecte)

9. Criptarea parolelor cu MD5
Parolele care sunt salvate în baza de date este recomandat să le ţineţi criptate, astfel dacă
cineva încearcă să citeasca parolele le va vedea criptate.

INSERT INTO admin VALUES ("administrator", md5("parola"));

Criptarea folosind md5 nu este reversibila (şi astfel nici dvs., nici altcineva nu o va putea afla
chiar dacă are acces la baza de date).

10. Pagina index.php în subdirectoare
Dacă aveţi mai multe directoare şi subdirectoare pe server este recomandat pentru a preveni
accesul la datele aflate în aceste directoare să introduceţi în fiecare director o pagină numită
index.html sau index.php care să facă redirectarea automat către pagina principală a site-ului.
Astfel minimizati riscul să intre cineva şi să vadă tot ce este în aceste subdirectoare.

11. Fişierul .htaccess
Pentru a bloca accesul la un anumit director (sau chiar la tot site-ul) puteti crea un fişier numit
.htaccess (cu punct înainte) în care să introduceţi ip-ul care doriţi să îl blocaţi (sau care să
aibă acces)

Order Deny,Allow
Allow from all

În exemplul de mai sus, toată lumea are acces. Dacă de exemplu ip-ul 192.168.1.1 nu doriţi
să aibă acces la acel director scrieţi

Deny from 192.168.1.1

Atenţie, să nu vă blocaţi singuri ip-ul la site, că altfel trebuie să luaţi legătura cu
administratorul serverului să steargă fişierul ca să puteţi intra din nou pe site, sau sa scrieti
prin FTP un nou fişier .htaccess. (la subdirectoare ştergeţi directorul sau salvaţi un alt fişier
.htaccess) În cazul în care după de aţi pus fişierul pe server nu îl vedeţi, el este acolo dar
serverul seteaza acest nume de fişier ca fişier ascuns.

12. Roboţii de căutare
Motoarele de căutare pot indexa tot ce se află la voi pe site. Dacă doriţi ca un fişier sau
director să nu fie indexat de către motoarele de căutare, trebuie să creaţi un fişier numit
robots.txt care să se afle în directorul principal de pe site (nu în subdirectoare). În el scrieţi
următoarele comenzi:

# robots.txt for http://www.tutoriale.far-php.ro
User-agent: *
Disallow: /cache/
Disallow: /admin
disallow: /search

unde pentru fiecare director sau fişier se specifică locaţia şi numele. Pentru mai multă
siguranţă, am găsit pe web un mic script care verifică tipul de browser şi dacă nu este un
browser cunoscut nu permite accesul (dacă cineva încearcă să citească paginile cu programe
spion sau gen web offline).
Cum am specificat şi la începutul acestui articol, cele spuse mai sus nunt doar cateva indicii şi
idei pentru a vă putea proteja mai bine paginile.




                                 Structuri de control în PHP


După cum ştiţi, instrucţiunile PHP sunt separate prin caracterul ';'. Deseori, suntem nevoiţi să
grupăm mai multe instrucţiuni pentru a forma un bloc. Astfel, obţinem instrucţiunile compuse
care sunt formate din mai multe instrucţiuni simple, separate prin caracterul ';'. În PHP,
instrucţiunile compuse au următoarea sintaxa:

{ instructiune #1 instructiune #2 ... instructiune #n }

Instrucţiunile care formează instrucţiunea compusă pot fi de orice tip: orice structură de
control, alte instrucţiuni compuse etc. Aşadar un bloc de instructiuni (o instrucţiune compusă),
în PHP, este delimitat de acolade.


Structura if

Una dintre cele mai importante structuri în orice limbaj este cea alternativa. În PHP sintaxa
acestei structuri este următoarea:

if (conditie) instructiune

Folosirea unei astfel de structuri indică faptul că instrucţiunea se va executa dacă şi numai
dacă valoarea expresiei conditie (eventual după conversia la tipul boolean) este true.


Construcţia if - else

În foarte multe cazuri dorim să executăm o altă instrucţiune dacă valoarea expresiei condiţie
este false. În PHP putem utiliza o construcţie de tipul if - else în acest scop. Sintaxa este:

if (conditie) instructiune #1
else instructiune #2


Construcţia elseif

Uneori, suntem nevoiţi să folosim structuri alternative îmbricate în diferite scopuri. Folosind
construcţii de tipul if - else vom obţine o secvenţă de tipul:

if (conditie #1) instructiune #1
elseif (conditie #2) instructiune #2
else ...
elseif (conditie #n) instructiune #n
else instructiune #n+1

Limbajul PHP permite folosirea unei prescurtări şi anume construcţia elseif. Practic, aceasta
înlocuieste un else urmat de un if. Folosind această structură, codul anterior poate fi scris
astfel:

if (conditie #1) instructiune #1
elseif (conditie #2) instructiune #2
elseif ...
elseif (conditie #n) instruciune #n
else instructiune #n+1


Sintaxe alternative

Dacă dorim să se execute mai multe instrucţiuni când este indeplinită o anumită condiţie,
atunci ar trebui să folosim instrucţiunile compuse. De exemplu, pentru o structură if vom
scrie:

if (conditie):
instructiune #1
instructiune #2 ...
instructiune #n
endif

Practic, pentru orice structură de control PHP, putem înlocui acolada deschisa prin caracterul
':' şi acolada închisă printr-un cuvânt cheie opţinut prin adăugarea prefixului end la cuvântul
cheie care indică structura de control. Trebuie observat faptul că else şi elseif nu sunt
structuri, ele fiind simple construcţii folosite în cadrul structurii if. Din acest motiv, nu vom
avea niciodată endelse sau endelseif, ci doar endif-uri. Aşadar, sintaxa alternativă pentru o
structură if în care se folosesc construcţii else şi elseif este următoarea:

if (conditie #1)
grup instructiuni #1
elseif (conditie #2)
grup instructiuni #2
elseif ...
elseif (conditie #n)
grup instructiuni #n
else grup instructiuni #n+1
endif;


Structura while

Majoritatea script-urilor PHP vor conţine cicluri. Pentru a folosi o buclă anterior condiţionată
vom utiliza structura while. Sintaxa acestei proceduri este:

while (conditie) instructiune

Efectul acestei structuri este executarea instrucţiunii atât timp cât valoarea expresiei condiţie
(eventual după conversia la tipul boolean) este true. Trebuie observat faptul că este posibil ca
instrucţiunea să nu fie executată niciodată. Si pentru această structură avem la dispoziţie o
sintaxă alternativă şi anume:

while (conditie):
grup instructiuni
endwhile;


Structura do - while

Uneori, dorim să folosim bucle posterior condiţionate. În acest scop, în PHP avem la dispoziţie
structura do - while a cărei sintaxă este:

do instructiune while (conditie);
Singura diferenţă faţă de structura while este faptul că valoarea condiţiei este determinată, de
fiecare dată, după executarea instrucţiunii. Ca urmare, instrucţiunea va fi executată cel puţin o
dată. Nu există o sintaxă alternativă pentru această structură.


Structura for

O alternativă cu o funcţionalitate mai ridicată pentru utilizarea buclelor este structura
repetitivă for. Sintaxa este foarte asemănătoare cu cea din limbajele C/C++ şi Java şi anume:


for (expresie #1; expresie #2; expresie #3)
instructiune

Prima expresie este evaluată o singură dată, înainte de începerea execuţiei ciclului.
Instrucţiunea este executată cât timp cea de-a doua expresie are valoarea true. De fiecare
dată, după executarea instrucţiunii, este evaluată cea de-a treia expresie. Oricare dintre cele
trei expresii poate lipsi; în cazul în care o expresie lipseste, se consideră că ea are valoarea
true. Pentru structura for poate fi folosită şi următoarea sintaxă alternativă:

for (expresie #1; expresie #2; expresie #3):
instructiune
endfor;


Exemple

În continuare aveţi un exemplu care afişează numerele cuprinse între 1 şi 15. Numerele pare
vor fi scrise cu roşu, iar cele impare care sunt divizibile cu 3 cu verde, iar celelalte cu albastru.
Vom folosi o structură repetitivă pentru a afişa numerele şi o structură alternativă pentru a
determina culoarea cu care vor fi afişate. Putem utiliza oricare dintre cele trei structuri
repetitive; codul PHP pentru cele trei variante este prezentat mai jos.


Cod:

<?php
// Structuri alternative si repetitive
// Bucla for
// Exemplu
for ($i = 1; $i <= 15; $i++):
echo "<b><font size = 3 ";
echo "color = ";
if ( ! ($i % 2))
echo "red";
elseif ( ! ($i % 3))
echo "green";
else
echo "blue";
echo "> $i </font></b>";
endfor;
?>


Cod:

<?php
// Structuri alternative si repetitive
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php
48892700 invatam-php

More Related Content

Similar to 48892700 invatam-php

Similar to 48892700 invatam-php (20)

XAMPP
XAMPPXAMPP
XAMPP
 
XAMPP
XAMPPXAMPP
XAMPP
 
Proiect Programare Web
Proiect Programare WebProiect Programare Web
Proiect Programare Web
 
Galerie
GalerieGalerie
Galerie
 
Galerie
GalerieGalerie
Galerie
 
Felicitari personalizate
Felicitari personalizateFelicitari personalizate
Felicitari personalizate
 
Prezentare site Coafor Virtual
Prezentare site Coafor VirtualPrezentare site Coafor Virtual
Prezentare site Coafor Virtual
 
Proiect web
Proiect webProiect web
Proiect web
 
Drupal Install FEST
Drupal Install FESTDrupal Install FEST
Drupal Install FEST
 
Pptpw
PptpwPptpw
Pptpw
 
Pptpw
PptpwPptpw
Pptpw
 
Prezentare
PrezentarePrezentare
Prezentare
 
Prezentare1
Prezentare1Prezentare1
Prezentare1
 
Licenta web aplicatie.pptx
Licenta web aplicatie.pptxLicenta web aplicatie.pptx
Licenta web aplicatie.pptx
 
Proiect Programare WEB
Proiect Programare WEBProiect Programare WEB
Proiect Programare WEB
 
Webappdev
WebappdevWebappdev
Webappdev
 
Project Smart - DefCamp 2012
Project Smart  - DefCamp 2012Project Smart  - DefCamp 2012
Project Smart - DefCamp 2012
 
Un site cu si despre muzica
Un site cu si despre muzicaUn site cu si despre muzica
Un site cu si despre muzica
 
Un site cu si despre muzica2
Un site cu si despre muzica2Un site cu si despre muzica2
Un site cu si despre muzica2
 
Un site cu si despre muzica
Un site cu si despre muzicaUn site cu si despre muzica
Un site cu si despre muzica
 

48892700 invatam-php

  • 1. PHP 1. Unelte de baza - ce aveti nevoie pentru un site profesionist. 2. Despre PHP - ce este şi instrucţiuni pentru începători. 3. Variabile în PHP - ce sunt şi cum se folosesc. 4. Variabile predefinite 5. Domeniul de vizibilitate al variabilelor - Cum se pot accesa variabilele. 6. Tipuri de variabile 7. Afişarea mesajelor în PHP 8. Construieşte un site cu php 9. Câteva informaţii despre documentarea şi depanarea unui script. 10. Operatori PHP 11. Câteva idei utile pentru securitatea paginilor web 12. Structuri de control în PHP 13. Despre funcţii în PHP 14. Clase şi obiecte în PHP 15. Crearea imaginilor thumbnails 16. Autentificarea în paginile restricţionate şi câteva informaţii despre cookie, uploadul fişierelor şi includerea lor în pagini, precum şi informaţii despre starea conexiunii. 17. Descrierea funcţiilor care pot fi utilizate la manipularea tablourilor 18. Lucrul cu fişiere şi directoare 19. Descrierea funcţiilor de prelucrare a fişierelor 20. Funcţii care faciliteaza lucrul cu directoare 21. Valori scalare şi tablouri 22. Lucrul cu formulare 23. Conversia tipurilor de variabile 24. Scrierea instrucţiunilor swich, break şi default 25. Scrierea instrucţiunilor for 26. Scrierea instrucţiunilor while şi do while 27. Introducere în Clase PHP 28. Sesiuni în PHP 29. Crearea şi utilizarea funcţiilor 30. Utilizarea fişierelor incluse 31. Funcţii PHP pentru expresii regulate 32. Utilizarea referinţelor în PHP 33. Lucrul cu funcţii listă 34. Interoperabilitate PHP-Java 35. Transmiterea mesajelor prin e-mail folosind PHP şi PEAR 36. Informaţii despre clasele încărcate 37. Prelucrarea dinamică a imaginilor 38. Funcţii PHP utilizate pentru accesarea şi interogarea bazelor de date MySQL 39. Utilizarea şirurilor 40. Manipularea şirurilor şi scrierea expresiilor regulate 41. Utilizarea variabilelor cookie 42. Expedierea mesajelor de poştă electronică 43. Stocarea unor date ierarhice într-o bază de date 44. PHP 5, Factory 45. PHP 5, SQLite în Factory? Unelte de baza - ce aveti nevoie pentru un site profesionist.
  • 2. De ce să folosiţi PHP în loc de HTML sau ASP sau PERL? Pentru că, faţă de alte limbaje, PHP este gratuit. Să spunem că aveţi de făcut un site care va conţine peste 150 de pagini. Dacă ar fi să îl faceţi în HTML, ar dura ceva vreme. Ok. Să zicem că site-ul este gata, dar acum vreţi să schimbaţi fontul şi culorile textului şi ale link-urilor în toate cele 150 de pagini. Vă apucă durerea de cap doar când vă gândiţi ce aveţi de făcut. În schimb, în PHP, acest lucru şi multe altele sunt foarte simple. Dacă site-ul respectiv ar fi fost făcut în PHP pe module, tot ce ar fi trebuit să faceţi este ca în partea care conţine informaţiile despre text să schimbaţi informaţile despre text şi link aşa cum doriţi şi modificarea este aceeaşi pentru toate paginile. Simplu nu? Pentru a rula exemplele şi scripturile existente pe acest site pe calculatorul dvs. de acasă sau pe pagina proprie trebuie să aveţi instalate şi configurate câteva aplicaţii de care o sa vorbim în continuare. Nu trebuie să aveţi cunoştinţe preliminare de baze de date sau programare. Simpla studiere a codului sursa şi aplicarea exemplelor vă poate lămurii ce poate face php. Deci, dacă vă credeţi pregătiţi cititi în continuare... Unelte de bază Crearea unor pagini dinamice la un nivel performant, precum şi punerea lor în funcţiune, nu poate fi făcută fără anumite programe. Iată cam de ce aveţi nevoie: Browsere - Pentru testarea paginilor este nevoie de mai multe browsere pentru că nu toate afişează acelaşi rezultat şi este neprofesional să obligaţi vizitatorul să folosească un anumit browser doar pentru că pagina făcută de voi arată şi merge mai bine cu acel browser. Deci vă recomand să instalati 2-3 browsere pentru teste. Dintre cele mai folosite în prezent vă recomand Internet Explorer (folosit pe calculatoare cu sistem de operare Windows), Firefox (se foloseste din ce în ce mai des datorită extensiilor şi faptului că se poate instala atât pe sisteme de operare Windows cât şi pe Mac OS X sau Linux) şi Opera (care are suport pentru mai multe sisteme de operare). Serverul web pentru teste - Dacă lucraţi cu PHP-MySQL sub Windows, sigur aveţi nevoie de triada Apache - PHP - MySQL să fie instalată pe calculatorul local. Pentru aceasta aveţi două posibilităţi: prima ar fi să descărcaţi de pe pagina producătorului fiecare aplicaţie în parte şi să o instalaţi manual, urmând apoi să faceţi configurarea serverelor manual (lucru nerecomandat începătorilor) şi a doua variantă să descărcaţi un program care instalează toate acestea gata configurate pe calculator, urmând ca voi doar să vă apucaţi de lucru. Astfel de aplicaţii sunt EasyPHP de exemplu (pentru Windows 95-98 dar merge şi pe Windows 2000 şi XP) sau recomandarea mea WAMP5 care merge doar pe Windows NT (adica 2000, XP, 2003, Longhorn, etc) dar care are multe alte facilităţi în plus faţă de EasyPHP pe care cu timpul când veţi învăţa mai multe despre PHP si MySQL o să le consideraţi foarte utile (cum ar fi posibilitatea de testare a scripturilor PHP atât pentru versiunea 4 cât si 5). Ultima recomandare, atât pentru cei care folosesc sistemul de operare Windows cât şi Linux, ar fi XAMP care conţine toate pachetele necesare instalării şi configurării unui server de web profesional (inclusiv server de FTP, SSI, DNS şi MAIL), dar pe care nu îl recomand începătorilor pentru că mulţimea de facilităţi oferite vă poate încurca. Editoare web - După ce aţi instalat serverul web şi browserele acum vă mai trebuie un editor bun pentru a scrie cod şi a vizualiza paginile create. Pentru aceasta recomandarea mea este suita Macromedia (Dreamweaver, FLASH şi FreeHAND). Puteţi descărca Dreamweaver (pentru a scrie cod şi a vedea/rula paginile în timp real) de la ei de pe site şi tot de la ei vă mai recomand Fireworks (dacă vă ocupaţi şi cu design-ul paginilor aceasta aplicaţie vă este utilă împreună cu Adobe Photosop sau Corel Draw) şi Flash (dacă doriţi să faceţi animaţie pentru site). Desigur sunt o mulţime de programe care fac aceleaşi lucruri cu ce vă recomand eu, dar dacă doriţi să lucraţi la nivel profesional recomand să lucraţi cu unelte de profesionişti. Bineânţeles că puteţi scrie cod şi în Notepad şi desena în Paint dar aplicaţiile pe care vi le-am recomandat vă uşurează extraordinar de mult munca şi vă semnalează rapid erorile din pagini. Alte editoare pe care vi le recomand să le testaţi sunt: PSPad (un bun înlocuitor al Notepad- ului, mai ales că este freeware), Zend Studio (destinat profesioniştilor).
  • 3. După ce aţi făcut rost de tot ce vă trebuie ca să începeţi treaba, vă recomand să citiţi în continuare celelalte articole, eventual să vizitaţi şi pagina de download, sigur găsiţi ceva util acolo pentru început, apoi pagina de link-uri, unde găsiti resurse gratuite şi să discutăm pe forum eventualele probleme pe care le întâmpinaţi. Despre PHP - ce este şi instrucţiuni pentru începători. Despre PHP PHP este limbajul ideal pentru construirea de pagini web dinamice. Este usor de învăţat, open- source, poate fi rulat pe mai multe platforme şi se poate conecta la mai multe tipuri de baze de date. Cel mai important aspect al limbajului este însa posibilitatea de a fi îmbricat cu cod HTML. Putem astfel crea pagini HTML statice şi din loc în loc, acolo unde este nevoie, să introducem dinamism cu ajutorul PHP. Limbajul PHP s-a "născut" în 1994 din nevoia lui Rasmus Lerdorf de a afla câte persoane îi vizitează CV-ul online. El a denumit setul de scripturi create PHP, acronimul pentru Personal Home Page. Pe parcursul următorilor trei ani limbajul a evoluat dar adevăratul succes a început să îl cunoască de când Zeev Suraski si Andi Gutmans au rescris motorul PHP de la cap la coadă, motor care poartă din versiunea 4 a PHP numele Zend, o combinaţie de litere din prenumele creatorilor săi: Zeev şi Andi. Fiind open-source, PHP beneficiază de suport activ din partea comunităţii online, acesta fiind şi motivul creşterii explozive a numărului site-urilor bazate pe PHP. Interpretorul PHP este cel mai cunoscut limbaj de scripting folosit în acest moment pentru crearea site-urilor Web interactive. Denumirea este un "acronim recursiv" pentru Hypertext PreProcessor. Diferenţa esenţială faţă de alte limbaje de scripting (gen JavaScript) este faptul că PHP este un interpretor server-side (operaţiile sunt executate de către server şi nu pe calculatorul utilizatorului). Pentru a putea testa pagini PHP aveţi nevoie de un server de web (Apache) şi de pachetul PHP instalat. PHP permite folosirea unor elemente specifice limbajelor de programare. Ieşirea standard a script-ului PHP devine intrarea standard pentru programul de navigare care vizualizează pagina. Aşadar, la iesirea standard poate fi scris (de exemplu, prin intermediul comenzii echo) orice tip de cod HTML, acesta fiind interpretat de către browser. Pe lângă manipularea conţinutului paginilor de web, PHP poate trimite headere HTTP pentru autentificare, seta cookie-uri sau redirecţiona utilizatorii. Mai mult, cu ajutorul bibliotecilor externe de funcţii poate parsa fisiere XML, crea şi manipula imagini, animaţii Shokwave Flash, PDF-uri sau se poate conecta la un server de mail, iar acestea sunt doar câteva din funcţiile pe care le poate îndeplini. Interpretorul PHP parcurge documentul accesat până în momentul în care întâlneşte un marcaj de deschidere care indică faptul că textul care urmează trebuie interpretat ca fiind cod PHP. În continuare, textul este interpretat ca fiind cod PHP până în momentul în care este întâlnit marcajul de inchidere. Întreg textul care nu este interpretat ca fiind cod PHP este furnizat la iesire în forma în care a fost primit ca intrare de catre interpretor. Există mai multe marcaje care indică începerea unei secvenţe de cod PHP, dar doar două dintre ele sunt folosite de obicei (aceste marcaje depind şi de configurarea serverului de web). Dacă dorim ca documentul să respecte specificaţiile XML, atunci singura posibilitate de inserare a codului PHP este folosirea unei secvente de tipul: Cod: <?php //cod PHP
  • 4. ?> Cea de-a doua posibilitate este utilizarea marcajului <SCRIPT> într-o maniera asemănătoare celei folosite pentru includerea de script-uri JavaScript. Sintaxa este urmatoarea: Cod: <SCRIPT language = "php"> //cod PHP </SCRIPT> Există alte două posibilităţi, dar acestea sunt folosite rar, în situaţii particulare şi depinde în mare măsură de setările serverului de web. Este permisă "iesirea" şi "intrarea" în "modul PHP" de oricâte ori este necesar în pagină. Aceasta este util când se lucrează cu texte de mari dimensiuni. Pentru ca instrucţiunile PHP să fie interpretate corect, acestea trebuie separate prin caracterul ';'. În PHP, comentariile pot fi inserate folosind sintaxele din C, C++ şi shell-urile Unix. Apariţia secventei de caractere '//' sau a caracterului '#' indică faptul că restul liniei reprezintă un comentariu. Pentru a insera comentarii pe mai multe linii, acestea trebuie delimitate de secventa '/*' la început şi de secventa '*/' la sfârşit. Variabile în PHP - ce sunt şi cum se folosesc. Variabile în PHP Programarea de orice fel, nu doar PHP, are două elemente de bază: datele şi instrucţiunile. Pentru a lucra cu datele trebuie să înţelegem ce sunt variabilele şi tipurile, iar pentru a lucra cu instrucţiuni trebuie să aflăm ce sunt structurile de control şi funcţiile. O variabilă este o zonă de memorie căruia i se dă un nume pentru a putea fi recunoscută ulterior şi pentru a ne putea referi mai târziu la ea. În PHP, o variabilă este reprezentată de semnul '$', urmat de numele variabilei. La fel ca în limbajele C/C++ sau Java, pentru denumirea variabilelor se face distincţia între literele mari şi literele mici. Numele unei variabile poate începe cu o liniuţă de subliniere '_' sau o literă. Restul caracterelor care formează numele variabilei pot fi litere, cifre sau liniuţe de subliniere. În PHP, sunt considerate litere toate caracterele cuprinse între 'a' şi 'z', cele cuprinse între 'A' şi 'Z', precum şi cele care au codul ASCII cuprins între 127 şi 255. Începând cu versiunea 4, au fost introduse referinţele; astfel, o variabilă poate referi o alta, astfel încât modificarea valorii uneia duce la modificarea automată a valorii celeilalte. O referinţă la o variabilă este reprezentată de caracterul '&'. Iată un scurt exemplu: Cod: <?php $a = "PHP4 e slab"; $b = &$a; $b = "PHP4 e foarte bun"; echo $a; echo "<br>";
  • 5. echo $b; ?> După cum se vede, modificarea valorii variabilei $b a dus automat la modificarea automată a valorii variabilei $a. Să disecăm codul pentru a învăţa câteva lucruri: - toate instrucţiunile PHP se termină cu punct şi virgulă. Omiterea semnului ";" este cea mai frecventă greşeală pe care o fac programatorii începători. - codul PHP începe întotdeauna cu "<?php" şi se termină cu "?>". El poate fi îmbricat cu cod HTML după cum puteţi vedea în exemplul de mai sus. Puteţi chiar crea pagini HTML fără pic de cod PHP în ele şi să le daţi extensia php. Atâta vreme cât parser-ul PHP nu "vede" tagurile "<? php ...?> ", el va trimite pagina neschimbată către server. - putem pune diacritice în cadrul unui string însă pentru ca browserul să le afişeze corect va trebui să specificăm în <head> setul de caractere folosit, la fel ca într-un document HTML. - valoarea unei variabile poate fi schimbată după necesităţi (aşa cum am schimbat valoarea lui $a) sau ea va fi schimbată automat în funcţie de celelalte variabile de care depinde. Variabile predefinite Începand de la versiunea 4.1.0 metodele predefinite pentru preluarea variabilelor externe depind de setarea din php.ini a variabilelor globale (register_globals). Astfel dacă pe server este setată register_globals=ON (nerecomandat) se pot prelua de exemplu variabilele trimise prin GET şi POST apelând direct variabila. Exemplu: Cod: <?php // sa spunem ca avem un formular in care exita un camp numit "camp1" si care se trimite prin metoda POST: // cu register_globals=ON $camp1 = "valoarea campului"; // cu register_globals=OFF $_POST['camp1'] = "valoarea campului"; $camp1 = $_POST['camp1']; ?> Variabile globale: $GLOBALS - pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent; acest vector este indexat chiar prin numele variabilelor globale. Această variabilă superglobală este accesibilă începând cu versiunea 3.0.0 $_SERVER - conţine o serie de variabile ale căror valori sunt setate de server-ul web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuţie al script-ului curent. A fost introdusă începând de la versiunea 4.1.0. În versiunile anterioare se folosea $HTTP_SERVER_VAR . Este o variabilă care conţine informaţii cum ar fi headere, locaţia scriptului, sau informaţii despre vizitator şi browser. Este posibil ca în funcţie de setările fiecărui server şi browser să nu fie active toate informaţiile specificate de această variabilă. Această variabilă este de asemenea globală, adică se poate folosi oriunde în script, fără apelarea ei ca funcţie globală (adică nu trebuie să o cereţi cu global $_SERVER în funcţiile dvs.) În schimb
  • 6. $HTTP_SERVER_VARS conţine aceleaşi informaţii dar nu este o funcţie globală (atenţie $HTTP_SERVER_VARSşi $_SERVER sunt două variabile diferite, chiar dacă aparent fac aceleaşi lucruri) Dacă directiva register_globals este ON atunci aceste variabile vor deveni la rândul lor variabile globale în cadrul scriptului. Elementele acestor variabile sunt cele de mai jos (atenţie: în funcţie de setările serverului şi browserului unele elemente pot lipsi) ' PHP_SELF ' - conţine numele fişierului unde se execută scriptul curent, relativ la rădacină (document root) De exemplu, $_SERVER['PHP_SELF'] într-un script la adresa http://example.com/test.php/foo.bar va fi /test.php/foo.bar . Constanta __FILE__ conţine toată calea şi numele fişierului curent. ' argv ' - Un array al argumentului trimis către script. Când scriptul rulează în linie de comandă, va da acces C-style la parametrii liniei de comanda. Când este accesat prin metoda GET, acesta va conţine un sir de interogare. ' argc ' - Conţine un număr al parametrilor liniei de comandă trimise către script (daca este rulat în linie de comanda). ' GATEWAY_INTERFACE ' - Returneaza versiunea CGI utilizată pe server (exemplu ' CGI/1.1 '). ' SERVER_NAME ' - Numele server-ului de hosting unde se execută scriptul curent. Dacă scriptul rulează pe un host virtual, aceasta va conţine valoarea definită pentru acel host virtual. ' SERVER_SOFTWARE ' - Returnează un şir de identificare al server-ului dat în header ca raspuns la cerere. ' SERVER_PROTOCOL ' - Numele şi versiunea protocolului prin care este cerută pagina (exemplu ' HTTP/1.0 ') ' REQUEST_METHOD ' - returnează metoda utilizată pentru accesarea paginii (exemplu ' GET ', ' HEAD ', ' POST ', ' PUT ') ' REQUEST_TIME ' - Valoarea timestamp dată la pornirea cererii. Este valabilă începând de la versiunea PHP 5.1.0. ' QUERY_STRING ' - Sirul de interogare, dacă este, de la pagina care a fost accesată. ' DOCUMENT_ROOT ' - Directorul radăcină unde este rulat scriptul curent, aşa cum este definit în fişierul de configuraţie al serverului. ' HTTP_ACCEPT ' - Conţinutul header-ului acceptat de la cererea curentă, dacă este unul. ' HTTP_ACCEPT_CHARSET ' - Conţine setul de caractere acceptate şi care este trimis de header-ul cererii respective, dacă există. Exemplu: ' iso-8859-1,*,utf-8 '. ' HTTP_ACCEPT_ENCODING ' - Conţine tipul de encodare trimis de cerera curentă prin header, dacă există.. Exemplu: ' gzip '. ' HTTP_ACCEPT_LANGUAGE ' - Conţine limbajul trimis de cererea curentă prin header, dacă exista. Exemplu: ' en '. ' HTTP_CONNECTION ' - Conţine informaţii despre conecsiiunea trimisă de cererea curentă prin header, dacă există. Exemplu: ' Keep-Alive '.
  • 7. ' HTTP_HOST ' - Conţine informaţii despre host, header-ul de la cererea curentă, dacă există. ' HTTP_REFERER ' - Adresa paginii (dacă este) de unde a venit userul în pagina curentă. Aceasta este setată de către browser. Nu toate browserele setează această valoare, şi chiar unele au posibilitatea de a modifica HTTP_REFERER aşa cum vor. Pe scurt, nu este de încredere. ' HTTP_USER_AGENT ' - Conţine semnătura browser-ului trimisă prin header la cererea curentă, dacă există. Un exemplu tipic este: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) . În afară de asta, puteţi utiliza get_browser() pentru a vedea ce capabilitaţi are browserul folosit de user şi astfel să returnaţi pagina specifică pentru acel browser. ' HTTPS ' - Setează o valoare dacă scriptul a fost cerut printr-un protocol securizat HTTPS ' REMOTE_ADDR ' - Adresa de IP a userului care accesează pagina curentă. ' REMOTE_HOST ' - Numele hostului userului care vede pagina curentă. Este inversul DNS- ului userului bazat pe REMOTE_ADDR. Atenţie: Serverul web trebuie configurat pentru a crea această variabila. De exemplu în Apache va trebui HostnameLookups On în fişierul de configurare httpd.conf. Pentru alte detalii vedeţi şi funcţia gethostbyaddr() . ' REMOTE_PORT ' - Portul prin care userul comunică cu serverul web. ' SCRIPT_FILENAME ' - Calea absolută unde se execută scriptul curent. Atenţie: Dacă scriptul este rulat cu CLI, ca şi cale relativă, cum ar fi file.php sau ../file.php , $_SERVER['SCRIPT_FILENAME'] va conţine calea relativă specificată de către user. ' SERVER_ADMIN ' - Valoarea dată de directiva SERVER_ADMIN (pentru Apache) în fişierul de configurare al web serverului. Dacă scriptul rulează pe un host virtual, acesta va conţine valoarea definită pentru acel host virtual. ' SERVER_PORT ' - Portul de pe server care este folosit pentru comunicare pe web. Pentru setările standard, acesta este ' 80 '; pentru SSL, de exemplu, se va schimba cu oricare port definit în transmisia securizată HTTP. ' SERVER_SIGNATURE ' - Conţine un şir care cuprinde versiunea serverului şi numele hostului virtual dacă este. ' PATH_TRANSLATED ' - Calea de bază a sistemul de fişiere (nu rădacina documentului) de la scriptul curent, după ce serverul a terminat maparea oricăror cai ( virtual-to-real mapping) Atenţie: Începând de la PHP 4.3.2, PATH_TRANSLATED nu mai este setat implicit în Apache 2 SAPI în contrast cu situaţia din Apache 1, unde este setată aceeaşi valoare ca şi la SCRIPT_FILENAME. Această schimbare a fost făcută pentru a fi compatibilă cu specificaţiile CGI în care PATH_TRANSLATED trebuie să existe doar dacă PATH_INFO este definit. Utilizatorii Apache 2 pot utiliza AcceptPathInfo = On în fişierul de configuraţie httpd.conf pentru a defini PATH_INFO . ' SCRIPT_NAME ' - Conţine calea către scriptul curent. Acesta este util pentru pagini care trebuiesc definite către ele însuşi. Constanta __FILE__ conţine calea completă şi numele de fişier al scriptului curent. ' REQUEST_URI ' - URI care este dat pentru accesarea paginii curente, de exemplu ' /index.html '. ' PHP_AUTH_DIGEST ' - Când rulaţi sub Apache ca modul, acţiunea Digest HTTP, valoarea
  • 8. acestei variabile este setată în 'Authorization' header trimis către client (care ar trebui utilizat pentru a face o validare corespunzătoare). ' PHP_AUTH_USER ' - Când este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conţine numele userului trimis de către user. ' PHP_AUTH_PW ' - Când este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conţine parola userului trimisă de către user. ' AUTH_TYPE ' - Când este rulat sub Apache ca modul acţiunea HTTP authenticated , această variabilă seteaza tipul de autentificare. Variabilele pentru trimiterea datelor: $_GET este o variabilă array globală. A fost introdusă în versiunea 4.1.0. Pentru versiunile anterioare se foloseşte $HTTP_GET_VARS care nu este variabilă globală. Puteţi folosi $_GET pentru a trimite variabile cu valori prin intermediul linkurilor. $_POST este de asemenea o variabilă array globală. A fost introdusa în versiunea 4.1.0. Pentru versiunile anterioare se foloseşte $HTTP_POST_VARS care nu este variabilă globală. Puteţi folosi $_POST pentru a trimite variabile cu valori prin intermediul formularelor. $_GETşi $_POST conţin variabile primite de script prin intermediul unor transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi accesate valorile câmpurilor dintr-un formular care a fost completat şi transmis folosind una dintre cele doua metode. Variabilele HTTP coockies: $_COOKIE conţine valorile variabilelor care conţin informaţii referitoare la cookie-urile păstrate pe calculatorul utilizatorului care accesează pagina web. A fost introdus în versiunea 4.1.0. În versiunile anterioare, utilizaţi $HTTP_COOKIE_VARS . Variabile pentru uploadul fisierelor: $_FILES conţine variabile primite de script prin intermediul încărcărilor de fişiere prin metoda post. A fost introdus în versiunea 4.1.0. În versiunile anterioare se foloseşte $HTTP_POST_FILES care nu este variabilă globală. Variabilele de mediu $_ENV $_ENV conţine variabile disponibile prin intermediul mediului în care este executat. A fost introdus în versiunea 4.1.0. În versiunile anterioare, utilizaţi $HTTP_ENV_VARS . Variabilele pentru cereri: $_REQUEST conţine variabile disponibile prin intermediul oricărui tip de mecanism cu ajutorul căruia utilizatorul poate introduce date. Este de tip array şi conţine valorile variabilelor $_GET , $_POST , şi $_COOKIE. A fost introdusă în versiunea 4.1.0. Începând de la versiunea 4.3.0, informaţiile din $_FILES au fost de asemenea incluse în $_REQUEST Variabile de sesiune: $_SESSION conţine variabile care corespund sesiunii curente a script-ului, sub formă de array. A fost introdusă în versiunea 4.1.0 şi este de asemenea globală. În versiunile anterioare folosiţi $HTTP_SESSION_VARS. Variabile de mesaje de eroare: $php_errormsg - este o variabilă ce conţine ultimul mesaj generat de către PHP Această variabilă este folosită în scopul de a vedea ce eroare apare şi doar dacă opţiunile de configurare a erorilor track_errors este pornita (standard este pe OFF) Constante predefinite: PHP conţine un mare număr de constante predefinite pentru fiecare script care rulează. Totuşi, sunt 5 constante "magice" pe care le prezint în continuare: __LINE__ - Conţine numărul curent al liniei din fisier.
  • 9. __FILE__ - toată calea şi numele fişierului curent. Dacă este folosit în interiorul unui fişier inclus, va returna numele fişierului inclus. Începând de la versiunea 4.0.2 conţine întotdeauna calea absolută la fişier, pe când în versiunile anterioare conţine calea relativă, în afară de câteva cazuri. __FUNCTION__ - Numele funcţiei (adăugat în versiunea 4.3.0) În PHP 5 această constantă returnează numele funcţiei care a fost declarată (case-sensitive). În PHP 4 această valoare este întotdeauna lowercased (cu litere mici) __CLASS__ - Numele clasei (adaugată în versiunea 4.3.0) În PHP 5 această constantă returnează numele clasei care a fost declarată (case-sensitive). În PHP 4 această valoare este întotdeauna lowercased (cu litere mici) __METHOD__ - Numele metodei clasei (adaugată în versiunea 5.0.0.) Numele metodei este returnat asa cum este declarat (case-sensitive) Domeniul de vizibilitate al variabilelor - Cum se pot accesa variabilele. În PHP o variabilă poate fi accesată doar în contextul în care a fost definită. De exemplu, o variabilă definită în interiorul unei funcţii nu va putea fi accesată decât de instrucţiunile din interiorul acelei funcţii. Mai mult, în mod implicit, o variabilă definită în exteriorul unei funcţii nu va putea fi accesată în interiorul funcţiei chiar dacă ea nu este redefinită în cadrul funcţiei. Pentru ca o funcţie să aibă acces la o variabilă definită în afara ei, variabila trebuie redeclarată ca variabilă globală în interiorul funcţiei. Să considerăm următorul exemplu: Cod: <?php $a = 1; function test () { echo $a; } test (); ?> Observăm că nu se afişează valoarea 1 deoarece instrucţiunea echo $a se referă la variabila locală $a care nu este definită, deci nu are nici o valoare. În continuare, este o versiune în care instrucţiunea echo $a va accesa variabila $a definită în afara funcţiei test(): Cod: <?php $a = 1; function test () { global $a; echo $a; } test (); ?> O a doua posibilitate de a accesa o variabilă definită în afara funcţiei este folosirea vectorului $GLOBALS:
  • 10. Cod: <?php $a = 1; function test () { echo $GLOBALS ["a"]; } test (); ?> Tipuri de variabile Variabilele pot fi de mai multe tipuri, nu doar numere. PHP are opt tipuri de variabile. Patru dintre acestea sunt tipuri scalare (boolean, integer, float şi string), două sunt tipuri compuse (array şi object), iar alte două sunt tipuri speciale (resource şi null). De asemenea, din motive de lizibilitate, au fost introduse trei pseudotipuri: mixed, number şi callback. Mai exista şi tipul double, dar semnificaţia acestuia este aceeaşi cu cea a tipului float. Cele două denumiri coexistă doar din motive "istorice". În PHP, de obicei, tipul unei variabile nu este specificat de către programator, ci este stabilit în timpul execuţiei în funcţie de contextul în care este folosită variabila. Tipul boolean: Variabilele de acest tip pot avea doar două valori: ADEVARAT sau FALS. Aceste valori pot fi indicate prin cuvintele cheie TRUE sau FALSE (pentru ambele nu se face distincţie între literele mari şi literele mici). Există posibilitatea de a converti o variabilă de orice tip la tipul boolean. În momentul efectuării unei conversii, sunt convertite la valoarea FALSE următoarele valori: - numărul întreg 0; - numărul real 0.0; - sirul vid; - sirul "0"; - un vector fără nici un element; - un obiect fără nici o variabilă membru; - o variabilă de tipul NULL; - o variabilă nedefinită. Orice altă valoare este convertită la valoarea TRUE (inclusiv resursele). Acest tip se poate folosi de exemplu pentru verificarea logării într-o pagină de administrare. După ce se fac verificările, dacă utilizatorul este logat ca administrator, funcţia noastră va returna o valoare de adevar: TRUE dacă este logat, sau FALSE dacă nu este, şi astfel vom şti dacă să îi acordăm sau nu acces în secţiunea de administrare. Tipul integer: O variabilă de tip integer reprezintă o valoare din mulţimea numerelor întregi. Aceste numere pot fi specificate în baza 10, în baza 16 sau în baza 8, convenţiile fiind aceleaşi ca şi în limbajele C/C++ sau Java. Modul de reprezentare depinde de platforma utilizată; de obicei se foloseşte reprezentarea pe 32 de biti. Interpretorul PHP nu oferă suport pentru numerele întregi fară semn. Trebuie remarcat faptul că în PHP nu există nici un operator pentru efectuarea de împărţiri întregi. De exemplu, rezultatul operaţiei 3/2 nu va fi numărul întreg 1 (ca în C/C++ sau Java), ci numărul real (float) 1.5 Şi pentru numerele întregi există posibilitatea efectuării de conversii: - valoarea logică TRUE este convertită la valoarea întreagă 1; - valoarea logică FALSE este convertită la valoarea întreagă 0; - un număr real este convertit prin "rotunjire înspre 0"; asadar, valoarea reală 2.5 va fi convertită la valoarea întreagă 2, în timp ce valoarea reală -2.5 va fi convertită la valoarea întreagă -2;
  • 11. - un sir de caractere este convertit luând în considerare doar primele caractere care conţin informaţii numerice; aşadar şirul "10" va fi convertit la valoarea întreagă 10; de asemenea şirul "10 ani" va fi convertit tot la valoarea 10; dacă primele caractere nu conţin informaţii numerice, rezultatul conversiei va fi valoarea 0. Tipul float: O variabilă de tip float poate fi specificată folosind fie forma zecimala, fie cea ştiinţifică (cu exponent). La fel ca şi în cazul tipului integer, precizia variabilelor de tipul float este dependentă de platforma utilizată. De obicei se foloseşte standardul IEEE 64. Există posibilitatea de a converti o variabilă de orice tip la tipul float. Pentru numerele reale se pot efectua următoarele conversii: - un şir de caractere este convertit luând în considerare doar primele caractere care conţin informaţii numerice; aşadar şirul "10.2" va fi convertit la valoarea reală 10.2; şirul "1.23E1 ani" va fi convertit la valoarea 12.3; - în toate celelalte cazuri se realizează conversii la numere întregi care apoi sunt convertite la valorile reale corespunzătoare. Tipul string: O variabilă de tip string reprezintă un şir de caractere. Un caracter se reprezintă pe un octet, deci sunt 256 de caractere distincte. Acest lucru implică faptul că interpretorul PHP nu oferă suport nativ pentru setul de caractere Unicode. Lungimea variabilelor de tip string nu este limitată de către interpretor. Literalii de tip şir de caractere pot fi specificaţi în trei moduri diferite: - prin folosirea ghilimelelor simple (exemplu $a='acesta este un sir de caractere'). Pentru a avea în cadrul şirului simbolul "`", atunci înaintea acestuia trebuie scris caracterul "", iar pentru a putea specifica simbolul "" acesta trebuie dublat. - prin folosirea ghilimelelor duble. Folosind această notaţie pot fi specificate mai multe caractere speciale, pe lângă caracterele de la varianta anterioara, printre care: sfârşit de linie ("r"), rând nou ("n"), tab orizontal ("t"), semnul dolar ("$"), ghilimelele duble ("""), secvenţe de caractere pentru specificarea faptului că o expresie regulară este în notaţie octală ("[0-7]{1,3}") şi secvenţele de caractere pentru specificarea faptului că o expresie regulară este în notaţie hexazecimală ("x[0-9A-Fa-f]{1,2}"). Cel mai important lucru este acela că, folosind acest mod de specificare a literalilor de acest tip, numerele de variabile care apar în interior vor fi transformate în valoarea lor. De exemplu dacă $a este o variabilă de tipul integer şi are valoarea 2, atunci sirul de caractere "Variabila a are valoarea $a." va fi transformat în şirul "Variabila a are valoarea 2". - notaţia heredoc. Acest tip de notaţie a fost introdus la versiunea 4 a interpretorului PHP. Pentru a specifica un sir de caractere folosind această notaţie trebuie utilizat operatorul "<<<" urmat de un identificator ales de utilizator. Toate caracterele care se află între operatorul "<<<" urmat de un identificator pe o singură linie, şi acelaşi identificator pe o altă linie vor constitui valoarea sirului de caractere. De exemplu, instrucţiunea: Cod: $str=<<<SF Acesta este un exemplu de utilizare a sintaxei heredoc SF; va avea ca rezultat un şir de caractere format din trei linii de text. Pentru a accesa un anumit caracter din şirul de caractere se foloseşte, după numele variabilei de tip string, indicile caracterului care trebuie accesat scris între acolade. De exemplu, $str{0} returnează primul caracter din şirul de caractere $str. În cazul în care dorim să concaternăm două şiruri de caractere vom folosi operatorul "." Folosirea operatorului "+" nu va concaterna cele două şiruri. Există posibilitatea de a converti o variabilă de orice tip la tipul string. Pentru şirurile de caractere se pot efectua următoarele conversii:
  • 12. - valoarea logică TRUE va fi convertită la şirul "1", iar valoarea logică FALSE va fi convertită la şirul vid (""); - un număr întreg va fi convertit la un şir de caractere care reprezintă valoarea numărului în baza 10; - un număr real va fi convertit la un şir de caractere care reprezintă notaţia ştiinţifică a acestuia; - obiectele sunt întotdeauna convertite la şirul "Object"; - variabilele de tipul resource sunt convertite la şirul "Resource id #n", unde n reprezintă un număr unic ataşat resursei respective de către interpretorul PHP; - valoarea NULL este convertită la şirul vid (""). Tipul array - Vectorii în PHP sunt nişte mulţimi formate din chei. Fiecarei chei din vector i se ataşează o valoare. Acest tip de date este optimizat astfel încât să poată fi folosit în locul următoarelor structuri de date: liste, tabele de dispersie, dicţionare, colecţii, stive, cozi şi altele. Datorită faptului că o valoare poate fi reprezentată de un alt vector, se pot simula foarte uşor arborii n-dimensionali sau tablourile n-dimensionale. Valoarea unei variabile de tip vector se poate specifica folosind construcţia array (cheie => valoare, cheie => valoare, ...) De exemplu, următoarea înstrucţiune PHP va construi un vector cu două elemente, dintre care unul este de tip string, iar celălalt de tip boolean: $a = array ("ch" => "string", 12 => TRUE); Variabila $a reprezinta un vector, $a ["ch"] are valoarea string, iar $a [12] are valoarea TRUE. În cazul în care nu se specifică o cheie pentru o valoare, atunci acea valoare va fi ataşată unei chei care va fi cheia maximă de tip integer folosită anterior, la care se adaugă valoarea 1. Cheile pot avea şi valori negative. Dacă nu există chei de tip integer, atunci valoarea va fi ataşata cheii 0. De exemplu, următoarele două instrucţiuni sunt echivalente: array (5 => 43, 32, 56, "b" => 12); array (5 => 43, 6 => 32, 7 => 56, "b" => 12); Dacă se foloseşte valoarea logică TRUE ca şi cheie, atunci aceasta va fi convertită la cheia de tip întreg 1, iar valoarea FALSE va fi convertită la numărul întreg 0. Nu se pot folosi pentru chei variabile de tipul array sau object. O variabilă de tip array se poate modifica prin setarea explicită de valori. De exemplu instrucţiunea $a ["x"] = 42; adaugă în vectorul $a valoarea 42 ataşată cheii "x". Dacă se foloseşte un vector care nu a fost definit anterior, atunci acesta este creat automat. Aşadar printr-o instrucţiune de forma $a [5] = 42, în cazul în care vectorul $a nu există, atunci se va crea un vector cu un singur element. Cheia acestuia va fi numărul întreg 5, iar valoarea sa va fi 42. De asemenea, există posibilitatea de a crea un element nou fără a-i preciza cheia. Sintaxa are forma $vector [] = valoare; această instrucţiune are ca efect adăugarea unui element a cărui cheie este un numar întreg mai mare cu 1 decât cel mai mare număr întreg care este cheie a unui alt element al vectorului. Dacă nu există nici o astfel de cheie, atunci noul element va avea cheia 0. De exemplu, următoarele două secvente sunt echivalente: $a [5] = 1; ............................ $a [5] = 1; $a [6] = 2; ............................ $a [] = 2; Prin conversia la un vector a unei variabile de tip scalar (boolean, integer, float, string) sau resource se creează un vector cu un singur element; cheia acestui element este numărul întreg 0, iar valoarea este cea a variabilei convertite. Dacă se converteşte un obiect (variabila de tip object), atunci vectorul rezultat va conţine câte un element pentru fiecare variabilă membru a obiectului. Cheile elementelor vor fi date de denumirile proprietăţilor obiectului (variabilele membru ale obiectului), iar valorile elementelor vor fi valorile proprietăţilor obiectului. Dacă realizăm o conversie a unei variabile de tip NULL, atunci rezultatul va fi un vector vid (care nu conţine nici un element). În continuare sunt prezentate câteva exemple care descriu mai detaliat posibilităţile oferite de folosirea vectorilor în PHP. Pentru început, prezint un vector al cărui elemente reprezintă caracteristicile unei portocale: Cod: $a = array ('denumire' => 'portocala',
  • 13. 'familie' => 'citrice', 'culoare' => 'portocaliu', 'forma' => 'rotunda', 'gust' => 'dulce' ); Putem adăuga şi alte elemente care să reprezinte diferite alte proprietăţi. De exemplu, am putea avea nevoie de o valoare suplimentară căreia nu dorim să îi atribuim nici un nume de identificare (cheie). Pentru ca vectorul să conţina un element suplimentar cu valoarea 4, vom putea defini vectorul astfel: Cod: $a = array ('denumire' => 'portocala', 'familie' => 'citrice', 'culoare' => 'portocaliu', 'forma' => 'rotunda', 'gust' => 'dulce', 4); Cheia elementului cu valoarea 4 va fi numărul întreg 0 deoarece nu există nici o altă cheie care este număr întreg. O alternativă de construire a acestui vector este următoarea: Cod: $v['denumire'] = 'portocala'; $v['familie'] = 'citrice'; $v['culoare'] = 'portocaliu'; $v['forma'] = 'rotunda'; $v['gust'] = 'dulce'; $v[] = 4; Exemplul următor ilustrează cum puteţi folosi vectorii la afişarea unei pagini cu text colorat: Cod: $colors = array (`red`, `green`, `blue`, `silver` ); foreach ($colors as $color) { echo "<FONT size = 4 color = $color>"; echo "<b>Acest text este <i>$color!</i>"; echo "</b></FONT><br>"; } Tipul object: Pentru a defini un obiect care poate fi folosit pentru afişarea mesajului SALUTARE LUME! se scrie următoarea secvenţă: Cod: class salutare { function Displaysalutare ()
  • 14. { echo "SALUTARE LUME!"; } } Pentru a utiliza o variabilă de tip obiect va trebui să realizăm o instanţiere prin intermediul instrucţiunii new. Sintaxa este: $a = new salutare; Astfel, variabila $a devine un obiect ale cărui metode pot fi utilizate. Pentru afişarea propriu- zisă a mesajului va trebui să executăm metoda Displaysalutare() printr-o instrucţiune de tipul $a -> Displaysalutare(); Orice variabilă de un anumit tip poate fi convertită într-un obiect. Dacă variabila respectivă este un obiect, atunci ea nu va fi modificată. În caz contrar, efectul conversiei este crearea unei noi instanţe a clasei stdClass. Dacă variabila are tipul NULL, atunci noua instanţă va fi vidă. În toate celelalte cazuri instanţa va conţine o variabilă membru numită scalar a cărei valoare va fi cea a variabilei convertite. Pentru conversii vom folosi instrucţiuni de tipul $obiect = (object) "SALUTARE LUME!" După realizarea conversiei vom putea tipări mesajul SALUTARE LUME! folosind instrucţiunea echo $obiect->scalar; Tipul resource: Variabilele de tip resource sunt folosite pentru păstrarea unor referinţe către anumite resurse externe cum ar fi conexiuni la baze de date, fişiere, etc. Resursele sunt create şi utilizate de anumite funcţii speciale. Datorită specificului acestui tip de date valoarea nici unei variabile de alt tip nu poate fi convertită la tipul resource. Tipul NULL: Valoarea specială NULL este atribuită oricărei variabile care nu a fost iniţializată. Această valoare este singura pe care o pot avea variabilele de tip NULL. Se consideră că o variabilă are tipul NULL dacă: - i s-a atribuit constanta NULL; - nu a fost iniţializată; - a fost deziniţializată (prin intermediul funcţiei unset() ). Afişarea mesajelor în PHP Limbajul PHP oferă mai multe variante de a trimite la browser mesaje şi şiruri de caractere sau chiar cod HTML. Cea mai folosită funcţie este echo(). Sintaxa corectă este: <?php echo("sir de caractere"); ?> Instrucţiunea de mai sus va afişa în browser mesajul introdus între ghilimele. Funcţia echo, la fel ca şi print, nu este chiar o funcţie, ci mai degrabă un constructor al limbajului şi nu este nevoie să folosiţi parantezele ca pentru o funcţie. De fapt, dacă doriţi să trimiteţi mai mulţi parametri către echo, nu trebuie să includeţi aceşti parametrii între paranteze. Există chiar şi o variantă mai scurtă a lui echo, dar aceasta funcţionează doar dacă este setat în configuraţia php.ini directiva short_open_tag pe ON. Sintaxa pentru varianta scurtă este: <?=$foo?> În cazul de mai sus, imediat după deschiderea tagului php se va afişa valoarea variabilei $foo. Nu recomand această abordare, deoarece nu toate serverele au setată în configuraţia lor
  • 15. short_open_tag pe ON şi nu va funcţiona. O funcţie asemănătoare cu echo este print. La fel ca şi echo, nici aceasta nu este chiar o funcţie ci un constructor al limbajului, şi nu trebuie să utilizaţi parantezele. Textul ce urmează a fi afişat trebuie introdus între ghilimele simple sau duble, rezultatul fiind uşor diferit. Folosind ghilimelele duble, orice variabilă din cadrul stringului este parsată. Astfel, dacă am avea de exemplu: <?php $x = 1; $rezultat = $x*1; print "Rezultatul inmultirii lui $x cu 1 este $rezultat"; ?> afişează în browser: Rezultatul inmultirii lui 1 cu 1 este 2 Dacă am folosi ghilimelele simple (print '...'), variabilele $x şi $rezultat nu ar fi fost parsate şi output-ul ar fi fost: Rezultatul inmultirii lui $x cu 1 este $rezultat Putem afişa variabilele şi dacă folosim ghilimelele simple, "rupând" stringul şi intercalându-l cu variabile, în forma urmatoăre, folosind operatorul "."(punct) de concaternare a stringurilor (şirurilor): <?php print 'Rezultatul inmultirii lui '.$x.' cu 1 este '.$rezultat; ?> Pentru a afişa caracterele speciale folosite de PHP (ghilimelele simple ', ghilimelele duble ", backslash-ul , semnul $) trebuie să le precedaţi cu semnul , astfel: <?php echo "Semnul dolar $, back-slash "; ?> Ghilimelele trebuie precedate de semnul doar dacă sunt de acelaşi tip cu cele care încadrează string-ul. În plus, într-un string puteţi folosi celelalte ghilimele normal. Dacă doriţi să afişaţi doar valoarea unei variabile, puteţi să nu o încadraţi între ghilimele. Exemplu: <?php echo $x; ?> Alte informaţii despre aceste funcţii, precum şi altele asemănătoare cu acestea, de genul printf(), şi flush() puteţi găsi în manualul oficial pe care îl puteţi lua gratuit de pe site-ul oficial al PHP - www.php.net.
  • 16. Construieşte un site cu php În continuare, o să încerc să vă prezint cum se poate construi un site cu ajutorul limbajului PHP. Exemplul prezentat nu este un standard, este doar o modalitate de a vedea cum se poate construi un site şi cum se preiau sau trimite variabilele prin intermediul site-ului. Puteţi, pe baza acestui exemplu, să vă construiţi propriul site, în forma preferată de dvs. şi adaptând modelul acesta la necesitaţile voastre. În exemplul meu, am preferat să am o singură pagină, anume index.php, în care să includ dinamic conţinutul şi meniul, în funcţie de ce link accesează vizitatorul. Puteţi vedea acest model într-un fel modular, fiecare script fiind de fapt un modul care execută anumite operaţii specifice. Astfel, în pagina index.php se includ mai multe module (scripturi) care luate separat, fiecare fac anumite lucruri, dar puse împreună, formează pagina de web generată dinamic. În acest exemplu, nu am folosit o bază de date, dar pe acelaşi principiu se poate adapta ideea la un site care preia datele din baza de date. Partea de sus a paginii (head) După cum puteţi vedea alăturat, am despărţit Partea cu meniul orizontal generat dinamic fiecare parte a unei pagini în bucăţi, fiecare (partea de body) bucată este colorată diferit pentru o mai bună aici se pot vizualizare. Puteţi introduce în fiecare bucată partea in care se afiseaza pune alte câte un script php care să genereze respectiva meniul continutul paginilor, si alte informatii bucată dinamic. Astel, în cazul unei modificări, lateral informatii generate va fi mult mai uşor să modificaţi doar scriptul dinamic care se ocupa de o anumită parte a paginii, pe partea de incheiere a paginii (footer) când daca tot site-ul ar fi fost facut static în HTML, la un site cu 100-200 de pagini chiar şi cea mai mică modificare ar fi însemnat un chin. Am numit fiecare script care se ocupă de o anumită parte a site-ului astfe: head.php - conţine partea dintre tagurile HTML <head> şi </head> body.php - conţine partea dintre tagurile HTML <body> şi conţinutul paginii footer.php - conţine partea de jos a paginii În continuare, o să vă prezint fiecare modul în parte. index.php - - head.php - - css.php - - js.php - - body.php - - meniu_orizontal.php - - meniu_vertical.php - - continut.php - - contact.php - - module.php - - /module/data_ora.php - - footer.php - index.php - în care se setează nivelul de raportare al erorilor (dacă nu doriţi ca vizitatorii să vada eventualele erori raportate de către php, puteţi stabili nivelul 0).Apoi, se verifică dacă există fisierul head.php şi body.php şi se încarcă sau se opreşte cu un mesaj de eroare. head.php - în acest fişier se afisează codul html pentru începutul paginii, şi dacă există, se încarcă şi fişierele cu cod CSS şi JavaScript folosite în pagină. css.php - acest fişier conţine codul CSS folosit pentru formatarea şi afişarea paginii HTML. js.php - dacă se foloseşte cod JavaScript în pagini, este de preferat să se salveze codul în acest fişier, pentru a putea avea acces rapid la el în cazul în care doriti să faceţi modificări. body.php - conţine codul HTML existent între tagurile <body> şi </body> Dacă există, se încarcă şi fişierele care conţin meniul orizontal şi/sau vertical, precum şi fişierul care afişează
  • 17. conţinutul paginii cerute. Pe langă acestea, dacă doriţi să bagaţi alte scripturi în pagini, se include şi fisierul module.php meniu_orizontal.php - conţine codul HTML pentru meniul orizontal. meniu_vertical.php - conşine codul HTML pentru meniul vertical continut.php - afişează conşinutul paginilor, în funcţie de linkul cerut. Dacă se cer pagini externe, se verifică daca acea pagină există şi se încarcă pentru afişare. contact.php - poate fi o pagina externă, cu conţinut HTML sau PHP, precum şi formulare de contact. module.php - este un fişier care atunci când este accesat, verifică ce fişiere există în directorul MODULE şi le încarcă pe fiecare. data_ora.php - este un fişier extern, care afişează câteva informaţii despre vizitator. footer.php - este fişierul care afişează în josul paginii numele curent al paginii Acest exemplu îl puteţi descărca de aici şi îl puteţi testa şi modifica pe serverul dvs. Câteva informaţii despre documentarea şi depanarea unui script. În afară de a furniza nume descriptive fişierelor care conţin scripturile dvs. PHP, trebuie să includeţi în fiecare script atât comentarii care să permită unui cititor să determine cu uşurinţă utilitatea scriptului, cât şi alte informaţii referitoare la script. De exemplu, puteţi include un comentariu care precizează numele fişierului care conţine scriptul, astfel încât acesta să apară în versiunile tipărite ale scriptului. Iată un model sintactic pentru comentariile PHP: // Scrieti aici comentariul dvs. După cum se poate vedea, un comentariu începe cu două caractere slash, urmate de un spatiu. În continuare, linia conţine comentariul, care poate include orice caractere doriţi, inclusiv caractere speciale. O modalitate de a crea un comentariu pe mai multe linii este de a începe fiecare linie cu ajutorul caracterelor //. Totuşi, puteţi crea un comentariu din mai multe linii şi în alte moduri, dacă preferaţi. Iată un exemplu: /* Acesta este un comentariu pe mai multe linii. Poate fi alcatuit dintr-un numar oricat de mare de linii. */ Pentru a începe un comentariu alcătuit din mai multe linii, scrieţi caracterele /*, iar pentru a încheia comentariul, scrieţi caracterele */ Între cele două perechi de caractere, puteţi scrie orice text doriţi, folosind oricâte linii doriţi. Uneori, în locul datelor de ieşire ale scriptului, puteţi vedea unul din următoarele: - Textul scriptului, în loc de datele de ieşire ale acestuia - O casetă de dialog, prin care sunteţi întrebat dacă doriţi să descărcaţi fişierul care conţine scriptul. - Un mesaj în care se spune că scriptul nu există - Un mesaj în care se spune că browserul web nu are permisiunea de a obţine accesul la script - Un mesaj în care se spune că scriptul conţine o eroare La vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar dacă scriptul în sine e corect. Dacă vedeţi textul scriptului sau o casetă de dialog prin care sunteţi întrebat
  • 18. dacă doriţi să descărcaţi fişierul care conţine scriptul, este posibil ca extensia fişierului script să fie incorectă sau ca serverul PHP să nu funcţioneze. Deşi fişierele script PHP trebuie să aibă, în general, extensia .php, este posibil ca un administrator de sistem să configureze un server PHP astfel încât acesta să impună o altă extensie de fişier. Dacă vedeti un mesaj în care se spune că scriptul nu există, este posibil ca să fi tastat incorect adresa URL. Verificaţi dacă aţi tastat corect adresa URL precum şi dacă aţi ataşat corect la aceasta numele fişierului care conţine scriptul, folosind un slash numai dacă adresa URL nu se încheie cu un atare caracter. Dacă vedeţi un mesaj în care se arată că browserul web nu are permisiunea de a obţine accesul la script, poate că este necesar să modificaţi permisiunile fişierului script (cmod). Dacă vedeţi un mesaj în care se spune că scriptul conţine o eroare, verificaţi dacă nu au apărut următoarele probleme: - O eroare de tastare, cum ar fi scrierea greşită a cuvântului echo - O eroare de punctuaţie, cum ar fi paranteze, ghilimele duble sau punct şi virgulă lipsă sau inserate greşit. - Neincluderea sau includerea eronată a liniilor de delimitare a scriptului, în speţă <?php şi ?> - Un marcaj de comentariu (//) care lipseşte sau a fost introdus gresit. Şirurile şi caracterele speciale Spre deosebire de numere întregi şi de numere duble, care conţin cu precădere cifre, şirurile pot conţine orice caracter. Ca atare, şirurile sunt utile pentru stocarea datelor care nu pot fi calculate, precum nume şi adrese. De asemenea, şirurile pot fi utilizate pentru stocarea datelor numerice. Pentru a specifica un şir în PHP, caracterele care alcătuiesc şirul sunt incluse între ghilimele duble; de exemplu, şirul reprezentând numele "Albert Einstein". Aşa cum am mai spus, un şir poate conţine date numerice; de exemplu , "3.141516". PHP facilitează includerea în şiruri a unor caractere speciale, precum caracterele de salt la linie nouă sau retur de car, prin furnizarea de secvenţe escape care reprezintă caractere speciale. Iată secvenţele escape folosite în PHP: n - salt la linie noua r - retur de car t - caracter de tabulare pe orizontală - backslash $ - simbolul dolarului " - ghilimele duble Ca exemplu, iată un şir care include un retur de car, urmat de un salt la linie nouă: "Salut! rn". Reţineţi că fiecare secvenţă escape începe cu un backslash (). Pentru a include un backslash într-un şir, trebuie să folosiţi secvenţa escape adecvată, care este alcătuită din două caractere backslash. Pentru a introduce ghilimele duble în cadrul unui şir fără a folosi secventa escape, puteţi include şirul între ghilimele simple astfel: 'Pe ea o cheama "Nikita"' Aceasta este util când doriţi să introduceţi într-un şir taguri HTML, astfel: $sir = '<a href="index.php" target="_blank">Prima pagină</a>'; După cum observaţi deoarece standardul HTML necesită folosirea ghilimelelor pentru a nu se încurca cu codul php am folosit pentru acest sir ghilimele simple. Sigur, acest cod se poate scrie şi asa: $sir = "<a href="index.php" target="_blank">Prima pagină</a>";
  • 19. dar personal mi se pare greu inteligibil acest cod şi la un volum mare de date pot apare multe erori datorate scrierii incorecte a codului html în interiorul codului php. Operatori PHP Interpretorul PHP permite folosirea a nouă tipuri diferite de operatori. Aceştia operează asupra unor expresii (una, doua sau trei) şi furnizează ca rezultat o altă expresie (rezultatul operaţiei corespunzătoare). Operatori aritmetici: Toţi operatorii aritmetici operează asupra a două expresii (operanzi). Există cinci astfel de operatori: - adunare ('+'); - scădere ('-'); - înmulţire ('*'); - împarţire ('/'); - rest ('%'). Aceste operaţii se aplică asupra unor valori care reprezintă tipuri numerice. Dacă unul dintre operanzi nu are tip numeric, atunci el va fi convertit automat la o valoare întreagă. Dacă cel puţin unul dintre operanzi (după efectuarea eventualelor conversii necesare) este un număr real, atunci rezultatul operaţiei va fi tot un număr real, cu excepţia operatorului rest; rezultatul operaţiei de determinare a restului este întotdeauna un număr întreg. Dacă ambii operanzi sunt numere întregi, atunci rezultatul va fi un număr întreg, cu excepţia împărţirii al cărei rezultat este întotdeauna un număr real. Dacă operatorul rest este aplicat asupra unor numere reale, atunci rezultatul este un număr întreg. Nu este permisă împărţirea la valoarea 0. Dacă al doilea operand asupra căruia se aplică unul dintre operatorii '/' sau '%' are valoarea 0, va fi semnalată o eroare. Operatori de comparare: Interpretorul PHP pune la dispozitie mai mulţi operatori care pot fi folosiţi pentru compararea a două valori. Expresiile în care apar astfel de operatori au ca rezultat valori logice (true sau false). Cel mai des întâlnit operator este cel de atribuire, definit prin semnul = Dacă scriem $x = 1 nu înseamnă că $x este egal cu 1 ci că i s-a acordat valoarea 1. Dacă scriem $rezultat = $x + $y nu înseamnă că $rezultat este egal cu suma celor două, ci că i-am atribuit (acordat) valoarea sumei celor două. Operatorul de egalitate este == si se foloseşte cel mai des în propoziţii condiţionale, pentru a testa egalitatea. Opusul său, !=, este operatorul de inegalitate şi se foloseşte în acelaşi scop. Operatorul de egalitate se foloseşte pentru a compara egalitatea a două valori. Pentru a vă lămuri cum stă treaba cu egalitatea şi atribuirea, testaţi următorul cod: Cod: <?php $x = 1; $y = 7; if ($x == $y) { print "$x este egal cu $y"; } if ($x != $y) { print "$x este diferit de $y";
  • 20. } ?> Alţi operatori folosiţi pentru compararea valorilor variabilelor sunt: '>' mai mare '>=' mai mare sau egal '<' mai mic '<=' mai mic sau egal Exemplu: Cod: <?php $x = 5; $y = 4; if ($x > $y) { print "$x este mai mare ca $y"; } if ($x <= $y) { print "$x este mai mic sau egal cu $y"; } ?> '==' - rezultatul este true dacă cele două expresii au aceeaşi valoare; '===' - rezultatul este true dacă cele două expresii au aceeaşi valoare şi au acelaşi tip; '!=' sau '<>' - rezultatul este true dacă cele două expresii au valori diferite; '!==' - rezultatul este true dacă cele două expresii au valori diferite sau au tipuri diferite; '<' - rezultatul este true dacă valoarea primei expresii este mai mică decât valoarea celei de- a doua expresii; '>' - rezultatul este true dacă valoarea primei expresii este mai mare decât valoarea celei de- a doua expresii; '<=' - rezultatul este true dacă valoarea primei expresii este mai mică sau egală cu valoarea celei de-a doua expresii; '>=' - rezultatul este true dacă valoarea primei expresii este mai mare sau egală cu valoarea celei de-a doua expresii. Pe lângă acestea există şi operatorul condiţional '?' care are forma expresie1? expresie2:expresie3 şi are ca rezultat valoarea expresiei expresie2 dacă valoarea expresiei expresie1 este true (eventual după conversia la tipul boolean) sau valoarea expresiei expresie3 în caz contrar. Operatori pentru şiruri de caractere: Operatorii pentru stringuri sunt '.' (punct) pentru concaternare şi '.=' (punct şi egal) pentru atribuirea concaternării. Aceşti operatori sunt folosiţi pentru a unii stringuri, în felul urmator: Cod: <?php // concaternarea stringurilor $test = 'Am scris un '.'text'.'oarecare'; print $test; // pe ecran va fi afisat "Am scris un text oarecare" // concaternarea stringurilor cu variabile
  • 21. $nr = 5; print 'Am scris numarul '.$nr.' si un text '.' oarecare'; // pe ecran va fi afisat "Am scris numarul 5 si un text oarecare" // atribuirea concaternarii $nr = 6; $text = "Un text "; $text .= "oarecare "; $text .= "si numarul ".$nr; print $text; // pe ecran va fi afisat "Un text oarecare si numarul 6" ?> Operatori pe biţi şi operatori logici: Interpretorul PHP pune la dispoziţie şase operatori care operează asupra biţilor unui număr întreg sau ai unui şir de caractere. Aceştia sunt: - conjuncţie ('&') - SI (AND); - disjuncţie ('|') - SAU (OR); - disjuncţie exclusivă ('^') - SAU exclusiv (XOR); - negaţie ('~') - NU (NOT); - deplasare la stânga ('<<'); - deplasare la dreapta ('>>'). Operatorii logici vă vor veni la îndemână în execuţia scriptului atunci când aveţi nevoie să lucraţi cu valori de adevăr. Să presupunem că la intrarea în secţiunea de administrare avem un formular care cere numele şi parola de acces în secţiune. Pentru contruirea expresiilor logice operanzii trebuie să aibă tipul boolean; dacă operatorii au alt tip, valoarea este convertită la o valoare booleană. Scriptul PHP ar putea verifica aceste informaţii pentru a autoriza accesul în secţiune folosind operatorii logici astfel: - operatorul 'xor' (SAU exclusiv) Expresia în care apare operatorul 'xor' va avea valoarea true dacă exact unul dintre operanzi are valuarea true - operatorul '!' (NOT) if (!parola_e_buna) ... parola nu este bună, accesul este interzis if (!parola_nu_e_buna) ... parola e bună, accesul este permis Operatorul '!' returneaza TRUE dacă valoarea iniţială de adevăr e FALSE şi FALSE dacă valoarea iniţială este TRUE. - operatorul '||' (OR) if (numele_este_valid) || parola_este_buna) ... verifică dacă numele sau parola sunt valide şi dacă oricare dintre ele este, returnează valoarea de adevăr TRUE. În acest exemplu de pseudocod dacă numele ar fi valid dar parola nu, i-am acorda utilizatorului acces mai departe, ceea ce nu este de dorit. Trebuie să fim siguri că şi numele şi parola sunt valide. Operatorul '||' returnează TRUE dacă oricare din valorile verificate e TRUE. Returnează FALSE doar dacă amândouă sunt FALSE. - operatorul '&&' (AND) if (numele_este_valid && parola_este_buna) ... dacă atât numele cât şi parola sunt valide putem acorda utilizatorului acces în secţiunea de administrare. Operatorul '&&' returnează TRUE doar dacă ambele valori verificate sunt TRUE. El returnează FALSE dacă oricare dintre ele este FALSE (sau dacă amândouă sunt FALSE). Operatori de atribuire: Primul operand asupra căruia este aplicat un astfel de operator de atribuire trebuie să fie o variabilă, iar al doilea poate fi o expresie. Operaţia Varianta scurtă Varianta standard adunare ('+=') $a += 2 $a = $a + 2
  • 22. scădere ('-=') $a -= 2 $a = $a -2 înmulţire ('*=') $a *= 2 $a = $a *2 împărţire ('/=') $a /= 2 $a = $a /2 rest ('%=') $a %= 2 $a = $a %2 conjuncţie ('&=') $a &= 2 $a = $a &2 disjuncţie ('|=') $a |= 2 $a = $a |2 disjuncţie exclusivă ('^=') $a ^= 2 $a = $a ^2 deplasare la stânga ('<<=') $a <<= 2 $a = $a << 2 deplasare la dreapta ('>>=') $a >>= 2 $a = $a >> 2 concaternare ('.=') $a .= "2" $a = $a . "2" Exemplu: Cod: <?php $b = 2; $a = 1; echo "<TT>$a += $b = "; echo $a += $b; $b = 2; $a = 1; echo "<br>$a -= $b = "; echo $a -= $b; $b = 2; $a = 1; echo "<br>$a *= $b = "; echo $a *= $b; $b = 2; $a = 1; echo "<br>$a /= $b = "; echo $a /= $b; $b = 2; $a = 1; echo "<br>$a %= $b = "; echo $a %= $b; $b = 2; $a = 1; echo "<br>$a &= $b = "; echo $a &= $b; $b = 2; $a = 1; echo "<br>$a |= $b = "; echo $a |= $b; $b = 2; $a = 1; echo "<br>$a ^= $b = "; echo $a ^= $b; $b = 2;
  • 23. $a = 1; echo "<br>$a <<= $b = "; echo $a <<= $b; $b = 2; $a = 1; echo "<br>$a >>= $b = "; echo $a >>= $b; $b = 2; $a = 1; echo "<br>$a .= $b = "; echo $a .= $b; echo "</TT>"; ?> Rezultatul codului de mai sus este: 1 += 2 = 3 1 -= 2 = -1 1 *= 2 = 2 1 /= 2 = 0.5 1 %= 2 = 1 1 &= 2 = 0 1 |= 2 = 3 1 ^= 2 = 3 1 <<= 2 = 4 1 >>= 2 = 0 1 .= 2 = 12 Operatori de incrementare şi decrementare: Operatorul de incrementare (++) are ca efect creşterea cu 1 a valorii unei variabile, iar cel de decrementare (--) are ca efect scăderea cu 1 a valorii variabilei. Tipul variabilei poate fi întreg sau real. Dacă operatorul precede variabila, atunci rezultatul expresiei este valoarea obţinută după incrementare sau decrementare. Dacă variabila precede operatorul, atunci rezultatul expresiei este valoarea variabilei înaintea incrementării sau decrementării. Cu alte cuvinte, dacă operatorul precede variabila, atunci valoarea variabilei este mai întâi modificată şi apoi utilizată, iar dacă variabila precede operatorul, atunci valoarea ei este mai întâi utilizată şi apoi modificată. Aceşti operatori pot fi utilizaţi şi pentru variabile care conţin şiruri de caractere. Operatorul de incrementare duce la creşterea cu 1 a codului ASCII a ultimului caracter din şir dacă acesta este o litera sau cifră. În cazul în care litera este 'z', respectiv 'Z', sau cifra este '9', atunci ea devine 'a', respectiv 'A', sau cifra '0' şi se încearcă incrementarea penultimului caracter. Dacă aceasta este tot '9', 'z' sau 'Z' se aplică acelaşi procedeu şi se trece la antepenultimul caracter. Procedeul continuă până în momentul în care se ajunge la un caracter care nu este '9', 'z' sau 'Z' sau se ajunge la începutul şirului. În acest ultim caz, la începutul şirului se adaugă caracterul '1', 'a' sau 'A'. Incrementarea nu are nici un efect pentru caracterele care nu sunt cifre sau litere. Decrementarea şirurilor de caractere nu are nici un efect, valorile variabilelor rămânând nemodificate. Există o singură excepţie şi anume şirurile care reprezintă numere întregi sau reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice. Exemplu:
  • 24. Cod: <?php $a = 7; echo "<tt>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt> "; echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt> "; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt> "; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt> "; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; $a = 7.5; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt> "; echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt> "; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt> "; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt> "; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; $a = "PHP"; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a++</tt><i> este </i><tt> ";
  • 25. echo $a++; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>++a</tt><i> este </i><tt> "; echo ++$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>a--</tt><i> este </i><tt> "; echo $a--; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "<br>a = $a"; echo ": </tt><i>Rezultatul operatiei </i><tt>--a</tt><i> este </i><tt> "; echo --$a; echo "</tt>. <i>Noua valoare a variabilei </i><tt>a</tt><i> este </i><t t>$a."; echo "</tt>"; ?> Rezultatul codului de mai sus este: a = 7: Rezultatul operatiei a++ este 7. Noua valoare a variabilei a este 8. a = 8: Rezultatul operatiei ++a este 9. Noua valoare a variabilei a este 9. a = 9: Rezultatul operatiei a-- este 9. Noua valoare a variabilei a este 8. a = 8: Rezultatul operatiei --a este 7. Noua valoare a variabilei a este 7. a = 7.5: Rezultatul operatiei a++ este 7.5. Noua valoare a variabilei a este 8.5. a = 8.5: Rezultatul operatiei ++a este 9.5. Noua valoare a variabilei a este 9.5. a = 9.5: Rezultatul operatiei a-- este 9.5. Noua valoare a variabilei a este 8.5. a = 8.5: Rezultatul operatiei --a este 7.5. Noua valoare a variabilei a este 7.5. a = PHP: Rezultatul operatiei a++ este PHP. Noua valoare a variabilei a este PHQ. a = PHQ: Rezultatul operatiei ++a este PHR. Noua valoare a variabilei a este PHR. a = PHR: Rezultatul operatiei a-- este PHR. Noua valoare a variabilei a este PHR. a = PHR: Rezultatul operatiei --a este PHR. Noua valoare a variabilei a este PHR. Aceşti operatori sunt utili de exemplu pentru monitorizarea unui download, dacă doriţi să ştiţi de câte ori a fost descărcat un fişier dintr-o anumită pagină. La fiecare accesare a fişierului, scriptul incrementează cu 1 şi afişează valoarea. (scriptul îl gândiţi voi, doar nu vreţi totul la tavă) Operatori pentru controlul erorilor: În PHP există un operator (@) care permite ignorarea erorilor. Dacă este aplicat asupra unei expresii care ar duce la afişarea unui mesaj de eroare, atunci mesajul respectiv nu va fi afişat. Operatori de execuţie: Interpretorul PHP permite executarea unor comenzi sistem prin intermediul operatorului (` `) . Comanda respectivă este cuprinsă între apostroafele inverse (tasta de lângă 1 deasupra tastei tab), iar rezultatul acestei comenzi este un şir de caractere care reprezintă şi rezultatul expresiei. Urmatorul script PHP determină execuţia pe server a comenzii help /? şi afişarea rezultatului în fereastra programului de navigare.
  • 26. Cod: <?php echo "<PRE>".`help /?`."</PRE>"; ?> Atenţie! Pe unele configuraţii de server nu se permite executarea de comenzi prin intermediul PHP (ca măsură de siguranţă, altfel oricine ar putea da un format sau reboot la server prin intermediul unui script PHP). Operatori pentru vectori: Singurul operator care poate fi aplicat asupra vectorilor este cel de concaternare (+) Rezultatul concaternării a doi vectori este un vector care conţine elementele din cei doi vectori. Dacă cei doi vectori conţin elemente cu aceeaşi cheie, atunci este păstrat doar elementul din vectorul care reprezintă primul operand. Exemplu: Cod: <?php $x[2] = 2; $x[4] = 4; $x[5] = 5; $x[7] = 7; $y[1] = 100; $y[2] = 200; $y[3] = 300; $y[4] = 400; $y[5] = 500; $z = $x + $y; echo "$z[1] $z[2] $z[3] $z[4] $z[5] $z[7]"; ?> Rezultatul codului de mai sus este: 100 2 300 4 5 7 Ordinea operaţiilor: Evident, o expresie poate conţine mai mulţi operatori, din categorii diferite. Pentru a indica ordinea în care trebuie efectuate calculele, trebuie stabilită o ordine a operaţiilor. Pentru aceasta a fost definită precedenta şi asociativitatea operaţiilor. Valoarea expresiilor corespunzătoare operatorilor cu precedenta mai mare va fi calculată înaintea valorilor expresiilor cu o precedentă mai mică. De exemplu, pentru expresia 1 + 2 * 3 va fi efectuată mai întâi înmulţirea 2 * 3, datorită faptului că operatorul '*' are precedenta mai mare decât cea a operatorului '+'. Dacă o expresie sau o subexpresie conţine numai operatori cu aceeaşi precedentă, atunci operaţiile se vor efectua în ordinea determinată de asociativitatea acestor operatori care poate fi de la dreapta la stânga sau de la stânga la dreapta. Toţi operatorii cu aceeaţi precedentă au aceeaşi tip de asociativitate. Evident, pentru a modifica ordinea implicită de efectuare a operaţiilor pot fi folosite paranteze pentru a indica faptul că o anumită operaţie trebuie efectuată înaintea altora, chiar dacă acestea din urmă au o precedentă mai mare. Trebuie observat faptul că, datorită asociativităţii de la dreapta spre stânga a operatorilor de atribuire, expresiile de tipul $a = $b = 1 sunt valide. Mai întâi se va efectua atribuirea $b =
  • 27. 1; variabila $b va primi valoarea 1 şi, datorită faptului că rezultatul unei operaţii de atribuire este valoarea atribuită variabilei care reprezintă primul operand, în continuare se va efectua atribuirea $a = 1, deci şi variabila $a va primi tot valoarea 1. Tabelul de mai jos conţine o listă cu majoritatea operatorilor din PHP. Liniile tabelului indică precedenta, în sensul că un operator are aceeaşi precedentă cu operatorii de pe linie în care apare şi o precedentă mai mare decât oricare operator aflat pe o linie anterioară. În acest tabel se observă faptul că, deşi operatorii '&&' şi 'and', respectiv '||' şi 'or' realizează aceeaşi operaţie, ei au precedente diferite, deci nu sunt echivalenţi din toate punctele de vedere. Tip asociativitate Tip Operanzi de la stânga la dreapta unar . (selectare) de la stânga la dreapta binar or de la stânga la dreapta binar xor de la stânga la dreapta binar and de la stânga la dreapta binar print = += -= *= /= .= de la stânga la dreapta binar %= &= |= ^= ~= <<= >>= de la stânga la dreapta ternar ?: de la stânga la dreapta binar || de la stânga la dreapta binar && de la stânga la dreapta binar | de la stânga la dreapta binar ^ de la stânga la dreapta binar & == != fără asociativitate binar === !== < <= fără asociativitate binar > >= << de la stânga la dreapta binar >> + de la stânga la dreapta binar - . (concaternare) * de la stânga la dreapta binar / % de la stânga la dreapta unar ! ~ ++ -- (int) (float) (string) (array) (object)
  • 28. @ de la stânga la dreapta unar [ fără asociativitate unar new În tabel este prezentat şi numărul expresiilor asupra cărora acţionează un operand. Operatorii unari acţionează asupra unei singure expresii, cei binari asupra a două expresii şi singurul operator ternar asupra a trei expresii. În continuare sunt câţiva operatori care execută operaţii utile: - abs(x) - returnează valoarea absolută a lui x; - ceil(x) - returnează valoarea x, rotunjită la întregul imediat superior; - floor(x) - returnează valoarea x, rotunjită la întregul imediat inferior; - max(x, y, ...) - returnează valoarea maximă a unui set de valori; - min(x, y, ...) - returnează valoarea minimă a unui set de valori; - pow(x, n) - returnează numărul x, ridicat la puterea specificată n; - strftime(f) - returnează data curentă, formatată conform conţinutului parametrului f; - sqrt(x) - returnează rădăcina pătrată a lui x Mai jos sunt cateva exemple: $lungime = sqrt($arie); Acest exemplu calculează lungimea laturilor unui pătrat, dacă este cunoscută aria pătratului. În continuare este prezentat modul de utilizare al funcţiei max, care preia mai multe argumente: $punctaj_castigator = max($punctaj1, $punctaj2, $punctaj3); Un alt exemplu calculează aria unui cerc de rază dată: Cod: <?php $raza = 2.0; $pi = 3.14159; $arie = $pi * $raza * $raza; echo "raza = "; echo $raza; echo "<br>arie = "; echo $arie; ?> Câteva idei utile pentru securitatea paginilor web Regula numărul unu a securităţii online este: nu vă încredeţi niciodată în utilizator. Întotdeauna verificaţi datele trimise către server şi "curăţaţi-le" înainte de a le utiliza. Pentru aceasta trebuie să luaţi în considerare câteva posibile "găuri" de securitate. Menţionez că cele scrise aici sunt doar noţiuni generale, pentru o securitate ridicată ar trebui sa aveţi noţiuni specializate de baze de date şi de administrare a serverelor web. 1. Variabilele globale Având variabilele globale din php.ini setate pe ON puteţi accesa datele trimise prin formulare
  • 29. mai simplu: $variabila în loc de $_GET['variabila'], la fel şi pentru POST sau FILES. Dacă scriptul nu este foarte bine gândit, variabilele globale pot prezenta un risc major de securitate. Din acest motiv php.ini este distribuit cu globals=off în ultimele versiuni. 2. Ghilimele "magice" Dacă în php.ini magic_quotes_gpc sunt OFF folosiţi funcţia addslashes pentru a preceda ghilimelele din datele trimise de utilizatori cu caracterul . Dacă magic_quotes_gpc sunt ON, PHP adaugă automat caracterul înainte de ghilimele dar dacă ele sunt OFF, ghilimelele din input vă pot crea probleme serioase. Ca exemplu, să presupunem că interogarea SQL de verificare a numelui şi a parolei pentru înregistrarea pe site este SELECT * FROM users WHERE nume='$nume' AND parola='$parola' şi dacă interogarea este executată cu succes, utilizatorul este logat. În acest caz, folosind parola 'OR' 1=1 oricine poate avea acces pe site deoarece interogarea SELECT * FROM user WHERE nume='un nume oarecare' AND parola=" OR '1=1' este executată cu succes şi returnează un rezultat (toate înregistrarile din baza de date, de fapt). Mai mult, atunci când vă aşteptaţi ca baza de date să returneze un singur rând, verificaţi acest lucru şi nu dacă interogarea s-a executat cu succes. Implicit în php.ini magic_quotes_gpc sunt ON pentru a vă proteja de astfel de atacuri, dar este bine să verificaţi înainte de a renunţa la addslashes. 3. Includere Încercaţi să evitaţi includerea "vizibilă" a fişierelor în forma http://site.ro/fisier.php? file=cutare.html pentru a include fişiere în cadrul unei pagini. Cu puţină neatenţie din partea voastră atacatorul ar putea accesa astfel de informaţii sensibile din cadrul sistemului. Nu includeţi fişiere străine. PHP poate "include" fişiere aflate pe alte servere decât cel care rulează dacă setarea URL fopen wrappers este activată în php.ini. În exemplul de mai sus, un atacator ar fi putut accesa adresa http://site.ro/fisier.php?file=http://www.rau.ro/scriptultau.php pentru a include în fisier un script localizat pe alt server şi astfel obţine acces către toate resursele sistemului la care are acces PHP, putând rula comenzi de sistem, afişa informaţii confidenţiale sau sterge baza de date. Nu permiteţi includerea fişierelor din altă parte decât de pe serverul vostru. Setaţi allow_url_fopen=OFF în php.ini. 4. Formulare Folosiţi metoda POST în formulare atunci când informaţia din acestea urmează să fie introdusă în baza de date. Dacă variabilele globale sunt OFF în php.ini sau metoda de transmitere a formularului este GET, un utilizator rău intenţionat ar putea accesa adresa dvs. şi ar introduce comentariul lui (exemplu "blabla") în baza voastră de date fără să treacă propriuzis prin site. Aşa vă puteţi trezi că nu mai aveţi spaţiu pe server iar în baza de date sunt câteva milioane de comentarii care spun acelaşi lucru "blabla". Verificarea provenienţei cererilor către server este foarte importantă şi în alt caz: formularele de loghin. Cineva care ştie numele de utilizator ar putea încerca să vă găsească parola foarte usor. În acest caz va trebui să puneţi o protecţie suplimentară care să nu permită mai mult de X încercări consecutive eşuate de logare pentru un nume de utilizator. Această problemă se rezolva uşor folosind sesiunile. În momentul când cineva încearcă să trimita numele şi parola din formular putem seta o variabilă de sesiune $_SESSION['login_count'] care să ţină minte numărul de încercări. Când valoarea acesteia trece de 3 (încercări nereuşite) nici măcar nu mai interogaţi baza de date pentru a verifica datele trimise. Variabila de sesiune va rămâne în memorie cât timp browserul este deschis şi sesiunea activă (opţiunea implicită a PHP de menţinere a sesiunilor active este de o oră). Dacă atacatorul aşteaptă o ora sau îşi închide browserul, sesiunea va fi închisă şi va putea de alte X ori să se logheze. De cele mai multe ori acestă măsură de siguranta este suficientă pentru a preveni încercările de aflare a parolelor.
  • 30. 5. Extensii O practică obişnuită este de a acorda extensia .inc fişierelor care conţin biblioteci de funcţii ce urmează a fi incluse şi folosite în cod. PHP nu parsează fişierele cu extensia .inc şi dacă acestea sunt apelate direct ele sunt trimise plain text către browser. Nu puneţi informaţii sensibile (precum nume şi parola) în fişiere cu extensia .inc, .txt, sau .html care pot fi accesate şi văzute. Folosiţi pentru aceste fişiere extensia .php care, dacă sunt accesate direct, vor fi rulate fără să afişeze informaţiile conţinute în ele. 6. Comanda CHMOD - setarea atributelor Comanda CHMOD (abreviere pentru change mode permissions of a file) este folosită pentru a schimba modul de acces (de permitere) a fişierelor şi directoarelor de pe server. Setarea poate afecta modul cum poate fi citit, sau cum se poate executa un fişier pe server. De exemplu, dacă aveţi un fişier .php care trebuie să execute o comandă de scriere pe server într-un fişier .txt trebuie să îi daţi dreptul să poata fi executat iar la fişierul .txt trebuie să îi daţi dreptul de a se putea scrie în el. Aveti 3 tipuri de acces - OWNER - GROUP - WORLD - fiecare cu câte 3 setări - READ - WRITE - EXECUTE - Este bine ca la WORLD să nu daţi decât acces la citire (pentru a putea accesa paginile de pe site) dar nu şi drepturi de scriere sau execuţie (pentru că nu doriţi ca oricine să vă scrie ce vrea în respectivul fişier .txt) În programul TOTAL COMMANDER (pe care eu îl folosesc şi pentru FTP) setarea atributelor pe server se face din meniul FILES - CHANGES ATTRIBUTES. Fiecare program de FTP are în meniul lui setare pentru atributele fişierelor de pe server. 7. Cookies Dacă aveţi o secţiune de administrare pe site, unde accesul este restrictionat doar la membrii de exemplu, este bine ca în toate paginile din această secţiune să încludă o pagină de verificare a accesului. Această pagina va verifica la fiecare accesare dacă utilizatorul este înregistrat şi are acces pe pagina respectivă şi permite rularea paginii doar dacă utilizatorul este înregistrat. Fără această verificare, un utilizator ar putea accesa paginile din secţiunea de administrare fără să treacă prin formularul de înregistrare. După autentificarea propriu-zisă, vom folosi variabile de sesiune pentru a păstra în memorie câteva informaţii despre autentificare, pentru a le verifica mai târziu, atunci când accesăm alte pagini din cadrul secţiunii de administrare. Pornim întâi sesiunea după care trecem la salvarea informaţiilor în ea ca în exemplul de mai jos: session_start(); $_SESSION ['nume_admin'] = $_POST ['nume']; $_SESSION ['parola_encriptata'] = $parolaEncriptata; Pe lângă acestea, pentru o şi mai mare siguranţă, vom salva id-ul sesiunii în altă variabilă. Toate sesiunile au un id unic, un string care seamănă cu rezultatul unei criptări MD5: $_SESSION ['key_admin'] = session_id(); Cu autentificare făcută, spunem scriptului să încarce prima pagină din secţiunea de administrare: header ("location: admin.php"); În continuare pentru a împiedica accesul neautorizat la paginile din această secţiune, scriem un mic script de verificare a datelor sesiunii înainte de a încărca orice pagină din secţiunea de administrare: session_start(); if ($_SESSION ['key_admin'] != session_id ()) { print 'Acces neautorizat!'; exit; } 8. Loguri de acces
  • 31. Pentru o verificare ulterioară a persoanelor care încearcă să intre în paginile restrictionate de pe site, este bine să salvăm în baza de date (sau într-un fişier text) numele, parola criptata, ora, data, semnătura browserului şi ip-ul. Aşa veţi ştii cine a încercat să vă spargă site-ul şi puteţi crea un script care sa verifice de exemplu ip-ul şi dacă corespunde cu unul din cele care sunt blocate să nu aibă acces la nici una din pagini (chiar dacă găseşte userul şi parola corecte) 9. Criptarea parolelor cu MD5 Parolele care sunt salvate în baza de date este recomandat să le ţineţi criptate, astfel dacă cineva încearcă să citeasca parolele le va vedea criptate. INSERT INTO admin VALUES ("administrator", md5("parola")); Criptarea folosind md5 nu este reversibila (şi astfel nici dvs., nici altcineva nu o va putea afla chiar dacă are acces la baza de date). 10. Pagina index.php în subdirectoare Dacă aveţi mai multe directoare şi subdirectoare pe server este recomandat pentru a preveni accesul la datele aflate în aceste directoare să introduceţi în fiecare director o pagină numită index.html sau index.php care să facă redirectarea automat către pagina principală a site-ului. Astfel minimizati riscul să intre cineva şi să vadă tot ce este în aceste subdirectoare. 11. Fişierul .htaccess Pentru a bloca accesul la un anumit director (sau chiar la tot site-ul) puteti crea un fişier numit .htaccess (cu punct înainte) în care să introduceţi ip-ul care doriţi să îl blocaţi (sau care să aibă acces) Order Deny,Allow Allow from all În exemplul de mai sus, toată lumea are acces. Dacă de exemplu ip-ul 192.168.1.1 nu doriţi să aibă acces la acel director scrieţi Deny from 192.168.1.1 Atenţie, să nu vă blocaţi singuri ip-ul la site, că altfel trebuie să luaţi legătura cu administratorul serverului să steargă fişierul ca să puteţi intra din nou pe site, sau sa scrieti prin FTP un nou fişier .htaccess. (la subdirectoare ştergeţi directorul sau salvaţi un alt fişier .htaccess) În cazul în care după de aţi pus fişierul pe server nu îl vedeţi, el este acolo dar serverul seteaza acest nume de fişier ca fişier ascuns. 12. Roboţii de căutare Motoarele de căutare pot indexa tot ce se află la voi pe site. Dacă doriţi ca un fişier sau director să nu fie indexat de către motoarele de căutare, trebuie să creaţi un fişier numit robots.txt care să se afle în directorul principal de pe site (nu în subdirectoare). În el scrieţi următoarele comenzi: # robots.txt for http://www.tutoriale.far-php.ro User-agent: * Disallow: /cache/ Disallow: /admin disallow: /search unde pentru fiecare director sau fişier se specifică locaţia şi numele. Pentru mai multă siguranţă, am găsit pe web un mic script care verifică tipul de browser şi dacă nu este un browser cunoscut nu permite accesul (dacă cineva încearcă să citească paginile cu programe spion sau gen web offline).
  • 32. Cum am specificat şi la începutul acestui articol, cele spuse mai sus nunt doar cateva indicii şi idei pentru a vă putea proteja mai bine paginile. Structuri de control în PHP După cum ştiţi, instrucţiunile PHP sunt separate prin caracterul ';'. Deseori, suntem nevoiţi să grupăm mai multe instrucţiuni pentru a forma un bloc. Astfel, obţinem instrucţiunile compuse care sunt formate din mai multe instrucţiuni simple, separate prin caracterul ';'. În PHP, instrucţiunile compuse au următoarea sintaxa: { instructiune #1 instructiune #2 ... instructiune #n } Instrucţiunile care formează instrucţiunea compusă pot fi de orice tip: orice structură de control, alte instrucţiuni compuse etc. Aşadar un bloc de instructiuni (o instrucţiune compusă), în PHP, este delimitat de acolade. Structura if Una dintre cele mai importante structuri în orice limbaj este cea alternativa. În PHP sintaxa acestei structuri este următoarea: if (conditie) instructiune Folosirea unei astfel de structuri indică faptul că instrucţiunea se va executa dacă şi numai dacă valoarea expresiei conditie (eventual după conversia la tipul boolean) este true. Construcţia if - else În foarte multe cazuri dorim să executăm o altă instrucţiune dacă valoarea expresiei condiţie este false. În PHP putem utiliza o construcţie de tipul if - else în acest scop. Sintaxa este: if (conditie) instructiune #1 else instructiune #2 Construcţia elseif Uneori, suntem nevoiţi să folosim structuri alternative îmbricate în diferite scopuri. Folosind construcţii de tipul if - else vom obţine o secvenţă de tipul: if (conditie #1) instructiune #1 elseif (conditie #2) instructiune #2 else ... elseif (conditie #n) instructiune #n else instructiune #n+1 Limbajul PHP permite folosirea unei prescurtări şi anume construcţia elseif. Practic, aceasta înlocuieste un else urmat de un if. Folosind această structură, codul anterior poate fi scris astfel: if (conditie #1) instructiune #1 elseif (conditie #2) instructiune #2
  • 33. elseif ... elseif (conditie #n) instruciune #n else instructiune #n+1 Sintaxe alternative Dacă dorim să se execute mai multe instrucţiuni când este indeplinită o anumită condiţie, atunci ar trebui să folosim instrucţiunile compuse. De exemplu, pentru o structură if vom scrie: if (conditie): instructiune #1 instructiune #2 ... instructiune #n endif Practic, pentru orice structură de control PHP, putem înlocui acolada deschisa prin caracterul ':' şi acolada închisă printr-un cuvânt cheie opţinut prin adăugarea prefixului end la cuvântul cheie care indică structura de control. Trebuie observat faptul că else şi elseif nu sunt structuri, ele fiind simple construcţii folosite în cadrul structurii if. Din acest motiv, nu vom avea niciodată endelse sau endelseif, ci doar endif-uri. Aşadar, sintaxa alternativă pentru o structură if în care se folosesc construcţii else şi elseif este următoarea: if (conditie #1) grup instructiuni #1 elseif (conditie #2) grup instructiuni #2 elseif ... elseif (conditie #n) grup instructiuni #n else grup instructiuni #n+1 endif; Structura while Majoritatea script-urilor PHP vor conţine cicluri. Pentru a folosi o buclă anterior condiţionată vom utiliza structura while. Sintaxa acestei proceduri este: while (conditie) instructiune Efectul acestei structuri este executarea instrucţiunii atât timp cât valoarea expresiei condiţie (eventual după conversia la tipul boolean) este true. Trebuie observat faptul că este posibil ca instrucţiunea să nu fie executată niciodată. Si pentru această structură avem la dispoziţie o sintaxă alternativă şi anume: while (conditie): grup instructiuni endwhile; Structura do - while Uneori, dorim să folosim bucle posterior condiţionate. În acest scop, în PHP avem la dispoziţie structura do - while a cărei sintaxă este: do instructiune while (conditie);
  • 34. Singura diferenţă faţă de structura while este faptul că valoarea condiţiei este determinată, de fiecare dată, după executarea instrucţiunii. Ca urmare, instrucţiunea va fi executată cel puţin o dată. Nu există o sintaxă alternativă pentru această structură. Structura for O alternativă cu o funcţionalitate mai ridicată pentru utilizarea buclelor este structura repetitivă for. Sintaxa este foarte asemănătoare cu cea din limbajele C/C++ şi Java şi anume: for (expresie #1; expresie #2; expresie #3) instructiune Prima expresie este evaluată o singură dată, înainte de începerea execuţiei ciclului. Instrucţiunea este executată cât timp cea de-a doua expresie are valoarea true. De fiecare dată, după executarea instrucţiunii, este evaluată cea de-a treia expresie. Oricare dintre cele trei expresii poate lipsi; în cazul în care o expresie lipseste, se consideră că ea are valoarea true. Pentru structura for poate fi folosită şi următoarea sintaxă alternativă: for (expresie #1; expresie #2; expresie #3): instructiune endfor; Exemple În continuare aveţi un exemplu care afişează numerele cuprinse între 1 şi 15. Numerele pare vor fi scrise cu roşu, iar cele impare care sunt divizibile cu 3 cu verde, iar celelalte cu albastru. Vom folosi o structură repetitivă pentru a afişa numerele şi o structură alternativă pentru a determina culoarea cu care vor fi afişate. Putem utiliza oricare dintre cele trei structuri repetitive; codul PHP pentru cele trei variante este prezentat mai jos. Cod: <?php // Structuri alternative si repetitive // Bucla for // Exemplu for ($i = 1; $i <= 15; $i++): echo "<b><font size = 3 "; echo "color = "; if ( ! ($i % 2)) echo "red"; elseif ( ! ($i % 3)) echo "green"; else echo "blue"; echo "> $i </font></b>"; endfor; ?> Cod: <?php // Structuri alternative si repetitive