+ All Categories
Home > Documents > PHP -prezentarea limbajului si a facilitatilor

PHP -prezentarea limbajului si a facilitatilor

Date post: 30-Sep-2015
Category:
Upload: alex9216
View: 37 times
Download: 7 times
Share this document with a friend
Description:
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.
217
PHP - Prezentarea limbajului și a facilităților 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?
Transcript
  • PHP - Prezentarea limbajului i a facilitilor

    1.Unelte de baza - ce aveti nevoie pentru un site profesionist.

    2. Despre PHP - ce este i instruciuni pentru nceptori.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 variabile7. Afiarea mesajelor n PHP8. Construiete un site cu php9. Cteva informaii despre documentarea i depanarea unui script.10. Operatori PHP11. Cteva idei utile pentru securitatea paginilor web

    12. Structuri de control n PHP13. Despre funcii n PHP14. Clase i obiecte n PHP15. Crearea imaginilor thumbnails16. Autentificarea n paginile restricionate i cteva informaii despre cookie, uploadulfiierelor i includerea lor n pagini, precum i informaii despre starea conexiunii. 17. Descrierea funciilor care pot fi utilizate la manipularea tablourilor18. Lucrul cu fiiere i directoare19. Descrierea funciilor de prelucrare a fiierelor20. Funcii care faciliteaza lucrul cu directoare21. Valori scalare i tablouri22. Lucrul cu formulare23. Conversia tipurilor de variabile

    24. Scrierea instruciunilor swich, break i default25. Scrierea instruciunilor for26. Scrierea instruciunilor while i do while27. Introducere n Clase PHP28. Sesiuni n PHP29. Crearea i utilizarea funciilor30. Utilizarea fiierelor incluse31. Funcii PHP pentru expresii regulate32. Utilizarea referinelor n PHP33. Lucrul cu funcii list34. Interoperabilitate PHP-Java35. Transmiterea mesajelor prin e-mail folosind PHP i PEAR36. Informaii despre clasele ncrcate37. Prelucrarea dinamic a imaginilor38. Funcii PHP utilizate pentru accesarea i interogarea bazelor de date MySQL39. Utilizarea irurilor40. Manipularea irurilor i scrierea expresiilor regulate41. Utilizarea variabilelor cookie42. Expedierea mesajelor de pot electronic43. Stocarea unor date ierarhice ntr-o baz de date44. PHP 5, Factory45. PHP 5, SQLite n Factory?

  • Unelte de baza - ce aveti nevoie pentru un site profesionist.

    De ce s folosii PHP n loc de HTML sau ASP sau PERL? Pentru c, fa de alte limbaje, PHP este gratuit. S spunem c avei de fcut un site care va conine peste 150 de pagini. Dac ar fi s l facei n HTML, ar dura ceva vreme. Ok. S zicem c site-ul este gata, dar acum vrei s schimbai fontul i culorile textului i ale link-urilor n toate cele 150 de pagini. V apuc durerea de cap doar cnd v gndii ce avei de fcut. n schimb, n PHP, acest lucru i multe altele sunt foarte simple. Dac site-ul respectiv ar fi fost fcut n PHP pe module, tot ce ar fi trebuit s facei este ca n partea care conine informaiile despre text s schimbai informaile despre text i link aa cum dorii i modificarea este aceeai 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 avei instalate i configurate cteva aplicaii de care o sa vorbim n continuare. Nu trebuie s avei cunotine preliminare de baze de date sau programare. Simpla studiere a codului sursa i aplicarea exemplelor v poate lmurii ce poate face php. Deci, dac v credei pregtii cititi n continuare...

    Unelte de baz

    Crearea unor pagini dinamice la un nivel performant, precum i punerea lor n funciune, nu poate fi fcut fr anumite programe. Iat cam de ce avei nevoie:

    Browsere - Pentru testarea paginilor este nevoie de mai multe browsere pentru c nu toate afieaz acelai rezultat i este neprofesional s obligai vizitatorul s foloseasc un anumit browser doar pentru c pagina fcut 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 att pe sisteme de operare Windows ct i pe Mac OS X sau Linux) i Opera (care are suport pentru mai multe sisteme de operare).

    Serverul web pentru teste - Dac lucrai cu PHP-MySQL sub Windows, sigur avei nevoie de triada Apache - PHP - MySQL s fie instalat pe calculatorul local. Pentru aceasta avei dou posibiliti: prima ar fi s descrcai de pe pagina productorului fiecare aplicaie n parte i s o instalai manual, urmnd apoi s facei configurarea serverelor manual (lucru nerecomandatnceptorilor) i a doua variant s descrcai un program care instaleaz toate acestea gata configurate pe calculator, urmnd ca voi doar s v apucai de lucru. Astfel de aplicaii 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 faciliti n plus fa de EasyPHP pe care cu timpul cnd vei nva mai multe despre PHP si MySQL o s le considerai foarte utile (cum ar fi posibilitatea de testare a scripturilor PHP att pentru versiunea 4 ct si 5). Ultima recomandare, att pentru cei care folosesc sistemul de operare Windows ct i Linux, ar fi XAMP care conine toate pachetele necesare instalrii i configurrii unui server de web profesional (inclusiv server de FTP, SSI, DNS i MAIL), dar pe care nu l recomand nceptorilor pentru c mulimea de faciliti oferite v poate ncurca.

    Editoare web - Dup ce ai 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). Putei descrca 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 ocupai i cu design-ul paginilor aceasta aplicaie v este util mpreun cu Adobe Photosop sau Corel Draw) i Flash (dac dorii s facei animaie pentru site). Desigur sunt o mulime de programe care fac aceleai lucruri cu ce v recomand eu, dar dac dorii s lucrai la nivel profesional recomand s lucrai cu unelte de profesioniti.

  • Bineneles c putei scrie cod i n Notepad i desena n Paint dar aplicaiile pe care vi le-am recomandat v uureaz extraordinar de mult munca i v semnaleaz rapid erorile din pagini. Alte editoare pe care vi le recomand s le testai sunt: PSPad (un bun nlocuitor al Notepad-ului, mai ales c este freeware), Zend Studio (destinat profesionitilor). Dup ce ai fcut rost de tot ce v trebuie ca s ncepei treaba, v recomand s citii n continuare celelalte articole, eventual s vizitai i pagina de download, sigur gsii ceva util acolo pentru nceput, apoi pagina de link-uri, unde gsiti resurse gratuite i s discutm pe forum eventualele probleme pe care le ntmpinai.

    Despre PHP - ce este i instruciuni pentru nceptori.

    Despre PHP

    PHP este limbajul ideal pentru construirea de pagini web dinamice. Este usor de nvat, 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 "nscut" n 1994 din nevoia lui Rasmus Lerdorf de a afla cte persoane i viziteaz CV-ul online. El a denumit setul de scripturi create PHP, acronimul pentru Personal Home Page. Pe parcursul urmtorilor trei ani limbajul a evoluat dar adevratul succes a nceput s l cunoasc de cnd 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 combinaie de litere din prenumele creatorilor si: Zeev i Andi. Fiind open-source, PHP beneficiaz de suport activ din partea comunitii online, acesta fiind i motivul creterii explozive a numrului 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. Diferena esenial fa de alte limbaje de scripting (gen JavaScript) este faptul c PHP este un interpretor server-side (operaiile sunt executate de ctre server i nu pe calculatorul utilizatorului). Pentru a putea testa pagini PHP avei nevoie de un server de web (Apache) i de pachetul PHP instalat. PHP permite folosirea unor elemente specifice limbajelor de programare. Ieirea standard a script-ului PHP devine intrarea standard pentru programul de navigare care vizualizeaz pagina. Aadar, la iesirea standard poate fi scris (de exemplu, prin intermediul comenzii echo) orice tip de cod HTML, acesta fiind interpretat de ctre browser. Pe lng manipularea coninutului paginilor de web, PHP poate trimite headere HTTP pentru autentificare, seta cookie-uri sau redireciona utilizatorii. Mai mult, cu ajutorul bibliotecilor externe de funcii poate parsa fisiere XML, crea i manipula imagini, animaii Shokwave Flash, PDF-uri sau se poate conecta la un server de mail, iar acestea sunt doar cteva din funciile pe care le poate ndeplini. Interpretorul PHP parcurge documentul accesat pn n momentul n care ntlnete 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 pn n momentul n care este ntlnit 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 secvene 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 specificaiile XML, atunci singura posibilitate de inserare a codului PHP este folosirea unei secvente de tipul:

  • Cod:

    Cea de-a doua posibilitate este utilizarea marcajului ntr-o maniera asemntoare celei folosite pentru includerea de script-uri JavaScript. Sintaxa este urmatoarea:

    Cod:

    //cod PHP

    Exist alte dou posibiliti, dar acestea sunt folosite rar, n situaii particulare i depinde n mare msur de setrile serverului de web. Este permis "iesirea" i "intrarea" n "modul PHP" de oricte ori este necesar n pagin. Aceasta este util cnd se lucreaz cu texte de mari dimensiuni. Pentru ca instruciunile 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. Apariia 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 sfrit.

    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 instruciunile. Pentru a lucra cu datele trebuie s nelegem ce sunt variabilele i tipurile, iar pentru a lucra cu instruciuni trebuie s aflm ce sunt structurile de control i funciile. O variabil este o zon de memorie cruia i se d un nume pentru a putea fi recunoscut ulterior i pentru a ne putea referi mai trziu 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 distincia 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 liniue 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. ncepnd cu versiunea 4, au fost introduse referinele; astfel, o variabil poate referi o alta, astfel nct modificarea valorii uneia duce la modificarea automat a valorii celeilalte. O referin la o variabil este reprezentat de caracterul '&'. Iat un scurt exemplu:

    Cod:

  • $b = &$a;

    $b = "PHP4 e foarte bun";

    echo $a;

    echo "";

    echo $b;

    ?>

    Dup cum se vede, modificarea valorii variabilei $b a dus automat la modificarea automat a valorii variabilei $a. S disecm codul pentru a nva cteva lucruri: - toate instruciunile PHP se termin cu punct i virgul. Omiterea semnului ";" este cea mai frecvent greeal pe care o fac programatorii nceptori. - codul PHP ncepe ntotdeauna cu "". El poate fi mbricat cu cod HTML dup cum putei vedea n exemplul de mai sus. Putei chiar crea pagini HTML fr pic de cod PHP n ele i s le dai extensia php. Atta vreme ct parser-ul PHP nu "vede" tagurile " ", el va trimite pagina neschimbat ctre server. - putem pune diacritice n cadrul unui string ns pentru ca browserul s le afieze corect va trebui s specificm n setul de caractere folosit, la fel ca ntr-un document HTML. - valoarea unei variabile poate fi schimbat dup necesiti (aa cum am schimbat valoarea lui $a) sau ea va fi schimbat automat n funcie 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 apelnd direct variabila. Exemplu: Cod:

    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 ncepnd cu versiunea 3.0.0 $_SERVER - conine o serie de variabile ale cror valori sunt setate de server-ul web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuie al script-ului curent. A fost introdus ncepnd de la versiunea 4.1.0. n versiunile anterioare se folosea $HTTP_SERVER_VAR .

    Este o variabil care conine informaii cum ar fi headere, locaia scriptului, sau informaii

  • despre vizitator i browser. Este posibil ca n funcie de setrile fiecrui server i browser s nu fie active toate informaiile specificate de aceast variabil. Aceast variabil este de asemenea global, adic se poate folosi oriunde n script, fr apelarea ei ca funcie global (adic nu trebuie s o cerei cu global $_SERVER n funciile dvs.) n schimb $HTTP_SERVER_VARS conine aceleai informaii dar nu este o funcie global (atenie $HTTP_SERVER_VARSi $_SERVER sunt dou variabile diferite, chiar dac aparent fac aceleai lucruri) Dac directiva register_globals este ON atunci aceste variabile vor deveni la rndul lor variabile globale n cadrul scriptului. Elementele acestor variabile sunt cele de mai jos (atenie: n funcie de setrile serverului i browserului unele elemente pot lipsi) ' PHP_SELF ' - conine numele fiierului unde se execut scriptul curent, relativ la rdacin (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__ conine toat calea i numele fiierului curent.

    ' argv ' - Un array al argumentului trimis ctre script. Cnd scriptul ruleaz n linie de comand, va da acces C-style la parametrii liniei de comanda. Cnd este accesat prin metoda GET, acesta va conine un sir de interogare. ' argc ' - Conine un numr al parametrilor liniei de comand trimise ctre 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 conine 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 ncepnd de la versiunea PHP 5.1.0.

    ' QUERY_STRING ' - Sirul de interogare, dac este, de la pagina care a fost accesat. ' DOCUMENT_ROOT ' - Directorul radcin unde este rulat scriptul curent, aa cum este definit n fiierul de configuraie al serverului.

    ' HTTP_ACCEPT ' - Coninutul header-ului acceptat de la cererea curent, dac este unul. ' HTTP_ACCEPT_CHARSET ' - Conine setul de caractere acceptate i care este trimis de header-ul cererii respective, dac exist. Exemplu: ' iso-8859-1,*,utf-8 '.

    ' HTTP_ACCEPT_ENCODING ' - Conine tipul de encodare trimis de cerera curent prin header, dac exist.. Exemplu: ' gzip '.

    ' HTTP_ACCEPT_LANGUAGE ' - Conine limbajul trimis de cererea curent prin header, dac exista. Exemplu: ' en '.

  • ' HTTP_CONNECTION ' - Conine informaii despre conecsiiunea trimis de cererea curent prin header, dac exist. Exemplu: ' Keep-Alive '.

    ' HTTP_HOST ' - Conine informaii 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 ctre browser. Nu toate browserele seteaz aceast valoare, i chiar unele au posibilitatea de a modifica HTTP_REFERER aa cum vor. Pe scurt, nu este de ncredere.

    ' HTTP_USER_AGENT ' - Conine semntura 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, putei utiliza get_browser() pentru a vedea ce capabilitai are browserul folosit de user i astfel s returnai 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. Atenie: Serverul web trebuie configurat pentru a crea aceast variabila. De exemplu n Apache va trebui HostnameLookups On n fiierul de configurare httpd.conf. Pentru alte detalii vedei i funcia gethostbyaddr() .

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

    ' SCRIPT_FILENAME ' - Calea absolut unde se execut scriptul curent. Atenie: Dac scriptul este rulat cu CLI, ca i cale relativ, cum ar fi file.php sau ../file.php , $_SERVER['SCRIPT_FILENAME'] va conine calea relativ specificat de ctre user.

    ' SERVER_ADMIN ' - Valoarea dat de directiva SERVER_ADMIN (pentru Apache) n fiierul de configurare al web serverului. Dac scriptul ruleaz pe un host virtual, acesta va conine valoarea definit pentru acel host virtual.

    ' SERVER_PORT ' - Portul de pe server care este folosit pentru comunicare pe web. Pentru

    setrile standard, acesta este ' 80 '; pentru SSL, de exemplu, se va schimba cu oricare port definit n transmisia securizat HTTP.

    ' SERVER_SIGNATURE ' - Conine un ir care cuprinde versiunea serverului i numele hostului virtual dac este.

    ' PATH_TRANSLATED ' - Calea de baz a sistemul de fiiere (nu rdacina documentului) de la scriptul curent, dup ce serverul a terminat maparea oricror cai ( virtual-to-real mapping) Atenie: ncepnd de la PHP 4.3.2, PATH_TRANSLATED nu mai este setat implicit n Apache 2 SAPI n contrast cu situaia din Apache 1, unde este setat aceeai valoare ca i la SCRIPT_FILENAME. Aceast schimbare a fost fcut pentru a fi compatibil cu specificaiile CGI n care PATH_TRANSLATED trebuie s existe doar dac PATH_INFO este definit. Utilizatorii Apache 2 pot utiliza AcceptPathInfo = On n fiierul de configuraie httpd.conf pentru a defini PATH_INFO .

    ' SCRIPT_NAME ' - Conine calea ctre scriptul curent. Acesta este util pentru pagini care trebuiesc definite ctre ele nsui. Constanta __FILE__ conine calea complet i numele de fiier al scriptului curent.

    ' REQUEST_URI ' - URI care este dat pentru accesarea paginii curente, de exemplu '

    /index.html '.

  • ' PHP_AUTH_DIGEST ' - Cnd rulai sub Apache ca modul, aciunea Digest HTTP, valoarea acestei variabile este setat n 'Authorization' header trimis ctre client (care ar trebui utilizat pentru a face o validare corespunztoare).

    ' PHP_AUTH_USER ' - Cnd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul,

    actiunea HTTP authentication, aceast variabil conine numele userului trimis de ctre user.

    ' PHP_AUTH_PW ' - Cnd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea

    HTTP authentication, aceast variabil conine parola userului trimis de ctre user.

    ' AUTH_TYPE ' - Cnd este rulat sub Apache ca modul aciunea 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 folosete $HTTP_GET_VARS care nu este variabil global. Putei 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 folosete $HTTP_POST_VARS care nu este variabil global. Putei folosi $_POST pentru a trimite variabile cu valori prin intermediul formularelor. $_GETi $_POST conin 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 cmpurilor dintr-un formular care a fost completat i transmis folosind una dintre cele doua metode.

    Variabilele HTTP coockies: $_COOKIE conine valorile variabilelor care conin informaii referitoare la cookie-urile pstrate pe calculatorul utilizatorului care acceseaz pagina web. A fost introdus n versiunea 4.1.0. n versiunile anterioare, utilizai $HTTP_COOKIE_VARS .

    Variabile pentru uploadul fisierelor:

    $_FILES conine variabile primite de script prin intermediul ncrcrilor de fiiere prin metoda post. A fost introdus n versiunea 4.1.0. n versiunile anterioare se folosete $HTTP_POST_FILES care nu este variabil global.

    Variabilele de mediu $_ENV $_ENV conine variabile disponibile prin intermediul mediului n care este executat. A fost introdus n versiunea 4.1.0. n versiunile anterioare, utilizai $HTTP_ENV_VARS .

    Variabilele pentru cereri: $_REQUEST conine variabile disponibile prin intermediul oricrui tip de mecanism cu ajutorul cruia utilizatorul poate introduce date. Este de tip array i conine valorile variabilelor $_GET , $_POST , i $_COOKIE. A fost introdus n versiunea 4.1.0. ncepnd de la versiunea 4.3.0, informaiile din $_FILES au fost de asemenea incluse n $_REQUEST

    Variabile de sesiune: $_SESSION conine 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 folosii $HTTP_SESSION_VARS.

    Variabile de mesaje de eroare:

    $php_errormsg - este o variabil ce conine ultimul mesaj generat de ctre PHP Aceast variabil este folosit n scopul de a vedea ce eroare apare i doar dac opiunile de configurare a erorilor track_errors este pornita (standard este pe OFF)

    Constante predefinite:

    PHP conine un mare numr de constante predefinite pentru fiecare script care ruleaz. Totui,

  • sunt 5 constante "magice" pe care le prezint n continuare: __LINE__ - Conine numrul curent al liniei din fisier. __FILE__ - toat calea i numele fiierului curent. Dac este folosit n interiorul unui fiier inclus, va returna numele fiierului inclus. ncepnd de la versiunea 4.0.2 conine ntotdeauna calea absolut la fiier, pe cnd n versiunile anterioare conine calea relativ, n afar de cteva cazuri.

    __FUNCTION__ - Numele funciei (adugat n versiunea 4.3.0) n PHP 5 aceast constant returneaz numele funciei 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 funcii nu va putea fi accesat dect de instruciunile din interiorul acelei funcii. Mai mult, n mod implicit, o variabil definit n exteriorul unei funcii nu va putea fi accesat n interiorul funciei chiar dac ea nu este redefinit n cadrul funciei. Pentru ca o funcie s aib acces la o variabil definit n afara ei, variabila trebuie redeclarat ca variabil global n interiorul funciei. S considerm urmtorul exemplu:

    Cod:

    Observm c nu se afieaz valoarea 1 deoarece instruciunea 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 instruciunea echo $a va accesa variabila $a definit n afara funciei test():

    Cod:

  • O a doua posibilitate de a accesa o variabil definit n afara funciei este folosirea vectorului $GLOBALS:

    Cod:

    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 semnificaia acestuia este aceeai cu cea a tipului float. Cele dou denumiri coexist doar din motive "istorice". n PHP, de obicei, tipul unei variabile nu este specificat de ctre programator, ci este stabilit n timpul execuiei n funcie 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

    distincie ntre literele mari i literele mici). Exist posibilitatea de a converti o variabil de orice tip la tipul boolean. n momentul efecturii unei conversii, sunt convertite la valoarea FALSE urmtoarele valori: - numrul ntreg 0; - numrul real 0.0; - sirul vid; - sirul "0";

    - un vector fr nici un element; - un obiect fr 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 logrii ntr-o pagin de administrare. Dup ce se fac verificrile, dac utilizatorul este logat ca administrator, funcia noastr va returna o valoare de adevar: TRUE dac este logat, sau FALSE dac nu este, i astfel vom ti dac s i acordm sau nu acces n seciunea de administrare.

    Tipul integer: O variabil de tip integer reprezint o valoare din mulimea numerelor ntregi. Aceste numere pot fi specificate n baza 10, n baza 16 sau n baza 8, conveniile fiind aceleai ca i n limbajele C/C++ sau Java. Modul de reprezentare depinde de platforma utilizat; de obicei se folosete 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 mpriri ntregi. De exemplu, rezultatul operaiei 3/2 nu va fi numrul ntreg 1 (ca n C/C++ sau Java), ci numrul real (float) 1.5 i pentru numerele ntregi exist posibilitatea efecturii de conversii: - valoarea logic TRUE este convertit la valoarea ntreag 1; - valoarea logic FALSE este convertit la valoarea ntreag 0;

  • - un numr 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 lund n considerare doar primele caractere care conin informaii numerice; aadar 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 conin informaii numerice, rezultatul conversiei va fi valoarea 0. Tipul float: O variabil de tip float poate fi specificat folosind fie forma zecimala, fie cea tiinific (cu exponent). La fel ca i n cazul tipului integer, precizia variabilelor de tipul float este dependent de platforma utilizat. De obicei se folosete standardul IEEE 64. Exist posibilitatea de a converti o variabil de orice tip la tipul float. Pentru numerele reale se pot efectua urmtoarele conversii: - un ir de caractere este convertit lund n considerare doar primele caractere care conin informaii numerice; aadar 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 corespunztoare.

    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 ctre interpretor. Literalii de tip ir de caractere pot fi specificai 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 notaie pot fi specificate mai multe caractere speciale, pe lng caracterele de la varianta anterioara, printre care: sfrit de linie ("\r"), rnd nou ("\n"), tab orizontal ("\t"), semnul dolar ("\$"), ghilimelele duble ("\""), secvene de caractere pentru specificarea faptului c o expresie regular este n notaie octal ("\[0-7]{1,3}") i secvenele de caractere pentru specificarea faptului c o expresie regular este n notaie 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". - notaia heredoc. Acest tip de notaie a fost introdus la versiunea 4 a interpretorului PHP. Pentru a specifica un sir de caractere folosind aceast notaie trebuie utilizat 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 urmtoarele conversii: - valoarea logic TRUE va fi convertit la irul "1", iar valoarea logic FALSE va fi convertit la irul vid (""); - un numr ntreg va fi convertit la un ir de caractere care reprezint valoarea numrului n baza 10; - un numr real va fi convertit la un ir de caractere care reprezint notaia tiinific a acestuia;

    - obiectele sunt ntotdeauna convertite la irul "Object"; - variabilele de tipul resource sunt convertite la irul "Resource id #n", unde n reprezint un numr unic ataat resursei respective de ctre interpretorul PHP; - valoarea NULL este convertit la irul vid (""). Tipul array - Vectorii n PHP sunt nite mulimi formate din chei. Fiecarei chei din vector i se ataeaz o valoare. Acest tip de date este optimizat astfel nct s poat fi folosit n locul urmtoarelor structuri de date: liste, tabele de dispersie, dicionare, colecii, stive, cozi i altele. Datorit faptului c o valoare poate fi reprezentat de un alt vector, se pot simula foarte uor arborii n-dimensionali sau tablourile n-dimensionale. Valoarea unei variabile de tip vector se poate specifica folosind construcia array (cheie => valoare, cheie => valoare, ...) De exemplu, urmtoarea nstruciune PHP va construi un vector cu dou elemente, dintre care unul este de tip string, iar cellalt 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 ataat 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 ataata cheii 0. De exemplu, urmtoarele dou instruciuni sunt echivalente: array (5 => 43, 32, 56, "b" => 12); array (5 => 43, 6 => 32, 7 => 56, "b" => 12);

    Dac se folosete valoarea logic TRUE ca i cheie, atunci aceasta va fi convertit la cheia de tip ntreg 1, iar valoarea FALSE va fi convertit la numrul 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 instruciunea $a ["x"] = 42; adaug n vectorul $a valoarea 42 ataat cheii "x". Dac se folosete un vector care nu a fost definit anterior, atunci acesta este creat automat. Aadar printr-o instruciune 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 numrul ntreg 5, iar valoarea sa va fi 42. De asemenea, exist posibilitatea de a crea un element nou fr a-i preciza cheia. Sintaxa are forma $vector [] = valoare; aceast instruciune are ca efect adugarea unui element a crui cheie este un numar ntreg mai mare cu 1 dect cel mai mare numr 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, urmtoarele 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 numrul ntreg 0, iar valoarea este cea a variabilei convertite. Dac se convertete un obiect (variabila de tip object), atunci vectorul rezultat va conine cte un element pentru fiecare variabil membru a obiectului. Cheile elementelor vor fi date de denumirile proprietilor obiectului (variabilele membru ale obiectului), iar valorile elementelor vor fi valorile proprietilor obiectului. Dac realizm o conversie a unei variabile de tip NULL, atunci rezultatul va fi un vector vid (care nu conine nici un element). n continuare sunt prezentate cteva exemple care descriu mai detaliat posibilitile oferite de folosirea vectorilor n PHP. Pentru nceput, prezint un vector al crui elemente reprezint caracteristicile unei portocale:

  • Cod: $a = array ('denumire' => 'portocala', 'familie' => 'citrice', 'culoare' => 'portocaliu', 'forma' => 'rotunda', 'gust' => 'dulce' );

    Putem aduga i alte elemente care s reprezinte diferite alte proprieti. De exemplu, am putea avea nevoie de o valoare suplimentar creia nu dorim s i atribuim nici un nume de identificare (cheie). Pentru ca vectorul s conina 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 numrul ntreg 0 deoarece nu exist nici o alt cheie care este numr ntreg. O alternativ de construire a acestui vector este urmtoarea: Cod: $v['denumire'] = 'portocala'; $v['familie'] = 'citrice'; $v['culoare'] = 'portocaliu'; $v['forma'] = 'rotunda'; $v['gust'] = 'dulce'; $v[] = 4;

    Exemplul urmtor ilustreaz cum putei folosi vectorii la afiarea unei pagini cu text colorat: Cod: $colors = array (`red`,

    `green`,

    `blue`,

    `silver` );

    foreach ($colors as $color)

    {

    echo "";

    echo "Acest text este $color!";

    echo "";

    }

    Tipul object: Pentru a defini un obiect care poate fi folosit pentru afiarea mesajului SALUTARE LUME! se scrie urmtoarea secven:

  • Cod: class salutare

    {

    function Displaysalutare ()

    {

    echo "SALUTARE LUME!";

    }

    }

    Pentru a utiliza o variabil de tip obiect va trebui s realizm o instaniere prin intermediul instruciunii new. Sintaxa este: $a = new salutare; Astfel, variabila $a devine un obiect ale crui metode pot fi utilizate. Pentru afiarea propriu-zis a mesajului va trebui s executm metoda Displaysalutare() printr-o instruciune 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 instane a clasei stdClass. Dac variabila are tipul NULL, atunci noua instan va fi vid. n toate celelalte cazuri instana va conine o variabil membru numit scalar a crei valoare va fi cea a variabilei convertite. Pentru conversii vom folosi instruciuni de tipul $obiect = (object) "SALUTARE LUME!"

    Dup realizarea conversiei vom putea tipri mesajul SALUTARE LUME! folosind instruciunea echo $obiect->scalar;

    Tipul resource: Variabilele de tip resource sunt folosite pentru pstrarea unor referine ctre anumite resurse externe cum ar fi conexiuni la baze de date, fiiere, etc. Resursele sunt create i utilizate de anumite funcii 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 oricrei variabile care nu a fost iniializat. 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 iniializat; - a fost deziniializat (prin intermediul funciei unset() ).

    Afiarea 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 funcie este echo(). Sintaxa corect este:

    Instruciunea de mai sus va afia n browser mesajul introdus ntre ghilimele. Funcia echo, la fel ca i print, nu este chiar o funcie, ci mai degrab un constructor al limbajului i nu este nevoie s folosii parantezele ca pentru o funcie. De fapt, dac dorii s trimitei mai muli parametri ctre echo, nu trebuie s includei aceti parametrii ntre paranteze. Exist chiar i o variant mai scurt a lui echo, dar aceasta funcioneaz doar dac este setat n configuraia php.ini directiva short_open_tag pe ON. Sintaxa pentru varianta scurt este:

  • n cazul de mai sus, imediat dup deschiderea tagului php se va afia valoarea variabilei $foo. Nu recomand aceast abordare, deoarece nu toate serverele au setat n configuraia lor short_open_tag pe ON i nu va funciona. O funcie asemntoare cu echo este print. La fel ca i echo, nici aceasta nu este chiar o funcie ci un constructor al limbajului, i nu trebuie s utilizai parantezele. Textul ce urmeaz a fi afiat trebuie introdus ntre ghilimele simple sau duble, rezultatul fiind uor diferit. Folosind ghilimelele duble, orice variabil din cadrul stringului este parsat. Astfel, dac am avea de exemplu:

    afieaz 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 afia variabilele i dac folosim ghilimelele simple, "rupnd" stringul i intercalndu-l cu variabile, n forma urmatore, folosind operatorul "."(punct) de concaternare a stringurilor (irurilor):

    Pentru a afia caracterele speciale folosite de PHP (ghilimelele simple ', ghilimelele duble ", backslash-ul \, semnul $) trebuie s le precedai cu semnul \, astfel:

  • Alte informaii despre aceste funcii, precum i altele asemntoare cu acestea, de genul printf(), i flush() putei gsi n manualul oficial pe care l putei lua gratuit de pe site-ul oficial al PHP - www.php.net.

    Construiete 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. Putei, pe baza acestui exemplu, s v construii propriul site, n forma preferat de dvs. i adaptnd modelul acesta la necesitaile voastre. n exemplul meu, am preferat s am o singur pagin, anume index.php, n care s includ dinamic coninutul i meniul, n funcie de ce link acceseaz vizitatorul. Putei vedea acest model ntr-un fel modular, fiecare script fiind de fapt un modul care execut anumite operaii 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 acelai principiu se poate adapta ideea la un site care preia datele din baza de date.

    Partea de sus a paginii (head)

    Partea cu meniul orizontal generat dinamic (partea de body)

    meniul lateral

    partea in care se afiseaza continutul paginilor, si alte informatii

    aici se pot pune

    alte informatii generate

    dinamic

    partea de incheiere a paginii (footer)

    Dup cum putei vedea alturat, am desprit fiecare parte a unei pagini n buci, fiecare bucat este colorat diferit pentru o mai bun vizualizare. Putei introduce n fiecare bucat cte un script php care s genereze respectiva bucat dinamic. Astel, n cazul unei modificri, va fi mult mai uor s modificai doar scriptul care se ocupa de o anumit parte a paginii, pe cnd 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 - conine partea dintre tagurile HTML i body.php - conine partea dintre tagurile HTML i coninutul paginii footer.php - conine 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 dorii ca vizitatorii s vada eventualele erori raportate de ctre php, putei stabili nivelul 0).Apoi, se verific dac exist fisierul head.php i body.php i se ncarc sau se oprete cu un mesaj de eroare. head.php - n acest fiier se afiseaz codul html pentru nceputul paginii, i dac exist, se

  • ncarc i fiierele cu cod CSS i JavaScript folosite n pagin. css.php - acest fiier conine codul CSS folosit pentru formatarea i afiarea paginii HTML. js.php - dac se folosete cod JavaScript n pagini, este de preferat s se salveze codul n acest fiier, pentru a putea avea acces rapid la el n cazul n care doriti s facei modificri. body.php - conine codul HTML existent ntre tagurile i Dac exist, se ncarc i fiierele care conin meniul orizontal i/sau vertical, precum i fiierul care afieaz coninutul paginii cerute. Pe lang acestea, dac dorii s bagai alte scripturi n pagini, se include i fisierul module.php meniu_orizontal.php - conine codul HTML pentru meniul orizontal. meniu_vertical.php - conine codul HTML pentru meniul vertical continut.php - afieaz coninutul paginilor, n funcie de linkul cerut. Dac se cer pagini externe, se verific daca acea pagin exist i se ncarc pentru afiare. contact.php - poate fi o pagina extern, cu coninut HTML sau PHP, precum i formulare de contact. module.php - este un fiier care atunci cnd este accesat, verific ce fiiere exist n directorul MODULE i le ncarc pe fiecare. data_ora.php - este un fiier extern, care afieaz cteva informaii despre vizitator. footer.php - este fiierul care afieaz n josul paginii numele curent al paginii

    Acest exemplu l putei descrca de aici i l putei testa i modifica pe serverul dvs.

    Cteva informaii despre documentarea i depanarea unui script.

    n afar de a furniza nume descriptive fiierelor care conin scripturile dvs. PHP, trebuie s includei n fiecare script att comentarii care s permit unui cititor s determine cu uurin utilitatea scriptului, ct i alte informaii referitoare la script. De exemplu, putei include un comentariu care precizeaz numele fiierului care conine scriptul, astfel nct acesta s apar n versiunile tiprite 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 conine comentariul, care poate include orice caractere dorii, inclusiv caractere speciale.

    O modalitate de a crea un comentariu pe mai multe linii este de a ncepe fiecare linie cu ajutorul caracterelor //. Totui, putei crea un comentariu din mai multe linii i n alte moduri, dac preferai. 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 alctuit din mai multe linii, scriei caracterele /*, iar pentru a ncheia comentariul, scriei caracterele */ ntre cele dou perechi de caractere, putei scrie orice text dorii, folosind oricte linii dorii.

    Uneori, n locul datelor de ieire ale scriptului, putei vedea unul din urmtoarele: - Textul scriptului, n loc de datele de ieire ale acestuia - O caset de dialog, prin care suntei ntrebat dac dorii s descrcai fiierul care conine 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 obine accesul la script - Un mesaj n care se spune c scriptul conine o eroare La vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar dac scriptul n sine e corect. Dac vedei textul scriptului sau o caset de dialog prin care suntei ntrebat dac dorii s descrcai fiierul care conine scriptul, este posibil ca extensia fiierului script s fie incorect sau ca serverul PHP s nu funcioneze. Dei fiierele script PHP trebuie s aib, n general, extensia .php, este posibil ca un administrator de sistem s configureze un server PHP astfel nct acesta s impun o alt extensie de fiier. Dac vedeti un mesaj n care se spune c scriptul nu exist, este posibil ca s fi tastat incorect adresa URL. Verificai dac ai tastat corect adresa URL precum i dac ai ataat corect la aceasta numele fiierului care conine scriptul, folosind un slash numai dac adresa URL nu se ncheie cu un atare caracter. Dac vedei un mesaj n care se arat c browserul web nu are permisiunea de a obine accesul la script, poate c este necesar s modificai permisiunile fiierului script (cmod). Dac vedei un mesaj n care se spune c scriptul conine o eroare, verificai dac nu au aprut urmtoarele probleme: - O eroare de tastare, cum ar fi scrierea greit a cuvntului echo - O eroare de punctuaie, cum ar fi paranteze, ghilimele duble sau punct i virgul lips sau inserate greit. - Neincluderea sau includerea eronat a liniilor de delimitare a scriptului, n spe - Un marcaj de comentariu (//) care lipsete sau a fost introdus gresit. irurile i caracterele speciale

    Spre deosebire de numere ntregi i de numere duble, care conin cu precdere cifre, irurile pot conine 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 alctuiesc irul sunt incluse ntre ghilimele duble; de exemplu, irul reprezentnd numele "Albert Einstein". Aa cum am mai spus, un ir poate conine 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 secvene escape care reprezint caractere speciale. Iat secvenele 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! \r\n".

    Reinei c fiecare secven escape ncepe cu un backslash (\). Pentru a include un backslash ntr-un ir, trebuie s folosii secvena escape adecvat, care este alctuit din dou caractere backslash. Pentru a introduce ghilimele duble n cadrul unui ir fr a folosi secventa escape, putei include irul ntre ghilimele simple astfel: 'Pe ea o cheama "Nikita"'

    Aceasta este util cnd dorii s introducei ntr-un ir taguri HTML, astfel:

    $sir = 'Prima pagin';

    Dup cum observai 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 = "Prima pagin"; 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. Acetia opereaz asupra unor expresii (una, doua sau trei) i furnizeaz ca rezultat o alt expresie (rezultatul operaiei corespunztoare). Operatori aritmetici: Toi operatorii aritmetici opereaz asupra a dou expresii (operanzi). Exist cinci astfel de operatori:

    - adunare ('+'); - scdere ('-'); - nmulire ('*'); - mparire ('/'); - rest ('%'). Aceste operaii 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 puin unul dintre operanzi (dup efectuarea eventualelor conversii necesare) este un numr real, atunci rezultatul operaiei va fi tot un numr real, cu excepia operatorului rest; rezultatul operaiei de determinare a restului este ntotdeauna un numr ntreg. Dac ambii operanzi sunt numere ntregi, atunci rezultatul va fi un numr ntreg, cu excepia mpririi al crei rezultat este ntotdeauna un numr real. Dac operatorul rest este aplicat asupra unor numere reale, atunci rezultatul este un numr ntreg. Nu este permis mprirea la valoarea 0. Dac al doilea operand asupra cruia se aplic unul dintre operatorii '/' sau '%' are valoarea 0, va fi semnalat o eroare.

    Operatori de comparare: Interpretorul PHP pune la dispozitie mai muli operatori care pot fi folosii pentru compararea a dou valori. Expresiile n care apar astfel de operatori au ca rezultat valori logice (true sau false).

    Cel mai des ntlnit 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 folosete cel mai des n propoziii condiionale, pentru a testa egalitatea. Opusul su, !=, este operatorul de inegalitate i se folosete n acelai scop. Operatorul de egalitate se folosete pentru a compara egalitatea a dou valori. Pentru a v lmuri cum st treaba cu egalitatea i atribuirea, testai urmtorul cod:

    Cod:

  • if ($x != $y)

    {

    print "$x este diferit de $y";

    }

    ?>

    Ali operatori folosii pentru compararea valorilor variabilelor sunt: '>' mai mare '>=' mai mare sau egal '

  • // 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 bii i operatori logici: Interpretorul PHP pune la dispoziie ase operatori care opereaz asupra biilor unui numr ntreg sau ai unui ir de caractere. Acetia sunt: - conjuncie ('&') - SI (AND); - disjuncie ('|') - SAU (OR); - disjuncie exclusiv ('^') - SAU exclusiv (XOR); - negaie ('~') - NU (NOT); - deplasare la stnga ('>'). Operatorii logici v vor veni la ndemn n execuia scriptului atunci cnd avei nevoie s lucrai cu valori de adevr. S presupunem c la intrarea n seciunea de administrare avem un formular care cere numele i parola de acces n seciune. 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 informaii pentru a autoriza accesul n seciune 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 iniial de adevr e FALSE i FALSE dac valoarea iniial 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 adevr 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 amndou sunt FALSE.

    - operatorul '&&' (AND) if (numele_este_valid && parola_este_buna) ... dac att numele ct i parola sunt valide putem acorda utilizatorului acces n seciunea de administrare. Operatorul '&&' returneaz TRUE doar dac ambele valori verificate sunt TRUE. El returneaz FALSE dac oricare dintre ele este FALSE (sau dac amndou sunt FALSE).

    Operatori de atribuire:

  • Primul operand asupra cruia este aplicat un astfel de operator de atribuire trebuie s fie o variabil, iar al doilea poate fi o expresie.

    Operaia Varianta scurt Varianta standard

    adunare ('+=') $a += 2 $a = $a + 2

    scdere ('-=') $a -= 2 $a = $a - 2

    nmulire ('*=') $a *= 2 $a = $a * 2

    mprire ('/=') $a /= 2 $a = $a / 2

    rest ('%=') $a %= 2 $a = $a % 2

    conjuncie ('&=') $a &= 2 $a = $a & 2

    disjuncie ('|=') $a |= 2 $a = $a | 2

    disjuncie exclusiv ('^=') $a ^= 2 $a = $a ^ 2

    deplasare la stnga ('>=') $a >>= 2 $a = $a >> 2

    concaternare ('.=') $a .= "2" $a = $a . "2"

    Exemplu:

    Cod:

  • $b = 2;

    $a = 1;

    echo "$a ^= $b = ";

    echo $a ^= $b;

    $b = 2;

    $a = 1;

    echo "$a >= $b = ";

    echo $a >>= $b;

    $b = 2;

    $a = 1;

    echo "$a .= $b = ";

    echo $a .= $b;

    echo "";

    ?>

    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 = 0

    1 .= 2 = 12

    Operatori de incrementare i decrementare: Operatorul de incrementare (++) are ca efect creterea cu 1 a valorii unei variabile, iar cel de decrementare (--) are ca efect scderea cu 1 a valorii variabilei. Tipul variabilei poate fi ntreg sau real. Dac operatorul precede variabila, atunci rezultatul expresiei este valoarea obinut dup incrementare sau decrementare. Dac variabila precede operatorul, atunci rezultatul expresiei este valoarea variabilei naintea incrementrii sau decrementrii. Cu alte cuvinte, dac operatorul precede variabila, atunci valoarea variabilei este mai nti modificat i apoi utilizat, iar dac variabila precede operatorul, atunci valoarea ei este mai nti utilizat i apoi modificat. Aceti operatori pot fi utilizai i pentru variabile care conin iruri de caractere. Operatorul de incrementare duce la creterea 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 acelai procedeu i se trece la antepenultimul caracter. Procedeul continu pn 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 rmnnd

  • nemodificate. Exist o singur excepie i anume irurile care reprezint numere ntregi sau reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice.

    Exemplu:

    Cod:

  • echo ". Noua valoare a variabilei a este $a.";

    $a = "PHP";

    echo "a = $a";

    echo ": Rezultatul operatiei a++ este "

    ;

    echo $a++;

    echo ". Noua valoare a variabilei a este $a.";

    echo "a = $a";

    echo ": Rezultatul operatiei ++a este "

    ;

    echo ++$a;

    echo ". Noua valoare a variabilei a este $a.";

    echo "a = $a";

    echo ": Rezultatul operatiei a--

    este ";

    echo $a--;

    echo ". Noua valoare a variabilei a este $a.";

    echo "a = $a";

    echo ": Rezultatul operatiei --

    a este ";

    echo --$a;

    echo ". Noua valoare a variabilei a este $a.";

    echo "";

    ?>

    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.

    Aceti operatori sunt utili de exemplu pentru monitorizarea unui download, dac dorii s tii de cte ori a fost descrcat un fiier dintr-o anumit pagin. La fiecare accesare a fiierului, scriptul incrementeaz cu 1 i afieaz valoarea. (scriptul l gndii voi, doar nu vrei 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 afiarea unui mesaj de eroare, atunci mesajul respectiv nu va fi afiat. Operatori de execuie:

  • Interpretorul PHP permite executarea unor comenzi sistem prin intermediul operatorului (` `) . Comanda respectiv este cuprins ntre apostroafele inverse (tasta de lng 1 deasupra tastei tab), iar rezultatul acestei comenzi este un ir de caractere care reprezint i rezultatul expresiei. Urmatorul script PHP determin execuia pe server a comenzii help /? i afiarea rezultatului n fereastra programului de navigare.

    Cod:

    Atenie! Pe unele configuraii de server nu se permite executarea de comenzi prin intermediul PHP (ca msur 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 concaternrii a doi vectori este un vector care conine elementele din cei doi vectori. Dac cei doi vectori conin elemente cu aceeai cheie, atunci este pstrat doar elementul din vectorul care reprezint primul operand. Exemplu:

    Cod:

    Rezultatul codului de mai sus este:

    100 2 300 4 5 7 Ordinea operaiilor: Evident, o expresie poate conine mai muli operatori, din categorii diferite. Pentru a indica ordinea n care trebuie efectuate calculele, trebuie stabilit o ordine a operaiilor. Pentru aceasta a fost definit precedenta i asociativitatea operaiilor. Valoarea expresiilor corespunztoare 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 nti nmulirea 2 * 3, datorit faptului c operatorul '*' are precedenta mai mare dect cea a operatorului '+'.

    Dac o expresie sau o subexpresie conine numai operatori cu aceeai precedent, atunci

  • operaiile se vor efectua n ordinea determinat de asociativitatea acestor operatori care poate fi de la dreapta la stnga sau de la stnga la dreapta. Toi operatorii cu aceeai precedent au aceeai tip de asociativitate. Evident, pentru a modifica ordinea implicit de efectuare a operaiilor pot fi folosite paranteze pentru a indica faptul c o anumit operaie trebuie efectuat naintea altora, chiar dac acestea din urm au o precedent mai mare. Trebuie observat faptul c, datorit asociativitii de la dreapta spre stnga a operatorilor de atribuire, expresiile de tipul $a = $b = 1 sunt valide. Mai nti se va efectua atribuirea $b = 1; variabila $b va primi valoarea 1 i, datorit faptului c rezultatul unei operaii 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 conine o list cu majoritatea operatorilor din PHP. Liniile tabelului indic precedenta, n sensul c un operator are aceeai precedent cu operatorii de pe linie n care apare i o precedent mai mare dect oricare operator aflat pe o linie anterioar. n acest tabel se observ faptul c, dei operatorii '&&' i 'and', respectiv '||' i 'or' realizeaz aceeai operaie, ei au precedente diferite, deci nu sunt echivaleni din toate punctele de vedere.

    Tip asociativitate Tip Operanzi

    de la stnga la dreapta unar . (selectare)

    de la stnga la dreapta binar or

    de la stnga la dreapta binar xor

    de la stnga la dreapta binar and

    de la stnga la dreapta binar print

    de la stnga la dreapta binar

    = += -= *=

    /= .=

    %=

    &= |= ^=

    ~= =

    de la stnga la dreapta ternar ? :

    de la stnga la dreapta binar ||

    de la stnga la dreapta binar &&

    de la stnga la dreapta binar |

    de la stnga la dreapta binar ^

    de la stnga la dreapta binar &

    fr asociativitate binar

    == !=

    === !==

    fr asociativitate binar

    <

    >=

    de la stnga la dreapta binar >

    de la stnga la dreapta binar

    +

    -

    . (concaternare)

  • de la stnga la dreapta binar

    *

    / %

    de la stnga la dreapta unar

    ! ~

    ++

    -- (int)

    (float)

    (string) (array) (object)

    @

    de la stnga la dreapta unar [

    fr asociativitate unar new

    n tabel este prezentat i numrul expresiilor asupra crora acioneaz un operand. Operatorii unari acioneaz asupra unei singure expresii, cei binari asupra a dou expresii i singurul operator ternar asupra a trei expresii.

    n continuare sunt civa operatori care execut operaii 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 numrul x, ridicat la puterea specificat n; - strftime(f) - returneaz data curent, formatat conform coninutului parametrului f; - sqrt(x) - returneaz rdcina ptrat a lui x Mai jos sunt cateva exemple:

    $lungime = sqrt($arie);

    Acest exemplu calculeaz lungimea laturilor unui ptrat, dac este cunoscut aria ptratului. n continuare este prezentat modul de utilizare al funciei max, care preia mai multe argumente:

    $punctaj_castigator = max($punctaj1, $punctaj2, $punctaj3); Un alt exemplu calculeaz aria unui cerc de raz dat:

    Cod:

  • Cteva idei utile pentru securitatea paginilor web

    Regula numrul unu a securitii online este: nu v ncredei niciodat n utilizator. ntotdeauna verificai datele trimise ctre server i "curai-le" nainte de a le utiliza. Pentru aceasta trebuie s luai n considerare cteva posibile "guri" de securitate. Menionez c cele scrise aici sunt doar noiuni generale, pentru o securitate ridicat ar trebui sa avei noiuni specializate de baze de date i de administrare a serverelor web.

    1. Variabilele globale Avnd variabilele globale din php.ini setate pe ON putei 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 gndit, 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 folosii funcia 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 cnd v ateptai ca baza de date s returneze un singur rnd, verificai 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 verificai nainte de a renuna la addslashes. 3. Includere ncercai s evitai includerea "vizibil" a fiierelor n forma http://site.ro/fisier.php?file=cutare.html pentru a include fiiere n cadrul unei pagini. Cu puin neatenie din partea voastr atacatorul ar putea accesa astfel de informaii sensibile din cadrul sistemului. Nu includei fiiere strine. PHP poate "include" fiiere aflate pe alte servere dect 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 obine acces ctre toate resursele sistemului la care are acces PHP, putnd rula comenzi de sistem, afia informaii confideniale sau sterge baza de date. Nu permitei includerea fiierelor din alt parte dect de pe serverul vostru. Setai allow_url_fopen=OFF n php.ini. 4. Formulare

    Folosii metoda POST n formulare atunci cnd informaia 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 ru intenionat ar putea accesa adresa dvs. i ar introduce comentariul lui (exemplu "blabla") n baza voastr de date fr s treac propriuzis prin site. Aa v putei trezi c nu mai avei spaiu pe server iar n baza de date sunt cteva milioane de comentarii care spun acelai lucru "blabla".

  • Verificarea provenienei cererilor ctre server este foarte important i n alt caz: formularele de loghin. Cineva care tie numele de utilizator ar putea ncerca s v gseasc parola foarte usor. n acest caz va trebui s punei o protecie suplimentar care s nu permit mai mult de X ncercri consecutive euate de logare pentru un nume de utilizator. Aceast problem se rezolva uor folosind sesiunile. n momentul cnd cineva ncearc s trimita numele i parola din formular putem seta o variabil de sesiune $_SESSION['login_count'] care s in minte numrul de ncercri. Cnd valoarea acesteia trece de 3 (ncercri nereuite) nici mcar nu mai interogai baza de date pentru a verifica datele trimise. Variabila de sesiune va rmne n memorie ct timp browserul este deschis i sesiunea activ (opiunea implicit a PHP de meninere a sesiunilor active este de o or). Dac atacatorul ateapt 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 msur de siguranta este suficient pentru a preveni ncercrile de aflare a parolelor. 5. Extensii O practic obinuit este de a acorda extensia .inc fiierelor care conin biblioteci de funcii ce urmeaz a fi incluse i folosite n cod. PHP nu parseaz fiierele cu extensia .inc i dac acestea sunt apelate direct ele sunt trimise plain text ctre browser. Nu punei informaii sensibile (precum nume i parola) n fiiere cu extensia .inc, .txt, sau .html care pot fi accesate i vzute. Folosii pentru aceste fiiere extensia .php care, dac sunt accesate direct, vor fi rulate fr s afieze informaiile coninute 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 fiierelor i directoarelor de pe server. Setarea poate afecta modul cum poate fi citit, sau cum se poate executa un fiier pe server. De exemplu, dac avei un fiier .php care trebuie s execute o comand de scriere pe server ntr-un fiier .txt trebuie s i dai dreptul s poata fi executat iar la fiierul .txt trebuie s i dai dreptul de a se putea scrie n el. Aveti 3 tipuri de acces - OWNER - GROUP - WORLD - fiecare cu cte 3 setri - READ - WRITE - EXECUTE - Este bine ca la WORLD s nu dai dect acces la citire (pentru a putea accesa paginile de pe site) dar nu i drepturi de scriere sau execuie (pentru c nu dorii ca oricine s v scrie ce vrea n respectivul fiier .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 fiierelor de pe server.

    7. Cookies Dac avei o seciune de administrare pe site, unde accesul este restrictionat doar la membrii de exemplu, este bine ca n toate paginile din aceast seciune 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. Fr aceast verificare, un utilizator ar putea accesa paginile din seciunea de administrare fr s treac prin formularul de nregistrare. Dup autentificarea propriu-zis, vom folosi variabile de sesiune pentru a pstra n memorie cteva informaii despre autentificare, pentru a le verifica mai trziu, atunci cnd accesm alte pagini din cadrul seciunii de administrare. Pornim nti sesiunea dup care trecem la salvarea informaiilor n ea ca n exemplul de mai jos: session_start();

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

    Pe lng acestea, pentru o i mai mare siguran, vom salva id-ul sesiunii n alt variabil. Toate sesiunile au un id unic, un string care seamn cu rezultatul unei criptri MD5: $_SESSION ['key_admin'] = session_id(); Cu autentificare fcut, spunem scriptului s ncarce prima pagin din seciunea de administrare:

    header ("location: admin.php");

  • n continuare pentru a mpiedica accesul neautorizat la paginile din aceast seciune, scriem un mic script de verificare a datelor sesiunii nainte de a ncrca orice pagin din seciunea 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 salvm n baza de date (sau ntr-un fiier text) numele, parola criptata, ora, data, semntura browserului i ip-ul. Aa vei tii cine a ncercat s v sparg site-ul i putei 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 gsete userul i parola corecte)

    9. Criptarea parolelor cu MD5 Parolele care sunt salvate n baza de date este recomandat s le inei 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 avei mai multe directoare i subdirectoare pe server este recomandat pentru a preveni accesul la datele aflate n aceste directoare s introducei n fiecare director o pagin numit index.html sau index.php care s fac redirectarea automat ctre pagina principal a site-ului. Astfel minimizati riscul s intre cineva i s vad tot ce este n aceste subdirectoare. 11. Fiierul .htaccess Pentru a bloca accesul la un anumit director (sau chiar la tot site-ul) puteti crea un fiier numit .htaccess (cu punct nainte) n care s introducei ip-ul care dorii s l blocai (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 dorii s aib acces la acel director scriei Deny from 192.168.1.1

    Atenie, s nu v blocai singuri ip-ul la site, c altfel trebuie s luai legtura cu administratorul serverului s stearg fiierul ca s putei intra din nou pe site, sau sa scrieti prin FTP un nou fiier .htaccess. (la subdirectoare tergei directorul sau salvai un alt fiier .htaccess) n cazul n care dup de ai pus fiierul pe server nu l vedei, el este acolo dar serverul seteaza acest nume de fiier ca fiier ascuns. 12. Roboii de cutare Motoarele de cutare pot indexa tot ce se afl la voi pe site. Dac dorii ca un fiier sau director s nu fie indexat de ctre motoarele de cutare, trebuie s creai un fiier numit robots.txt care s se afle n directorul principal de pe site (nu n subdirectoare). n el scriei urmtoarele comenzi:

  • # robots.txt for http://www.tutoriale.far-php.ro User-agent: *

    Disallow: /cache/ Disallow: /admin disallow: /search

    unde pentru fiecare director sau fiier se specific locaia i numele. Pentru mai mult siguran, am gsit 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 tii, instruciunile PHP sunt separate prin caracterul ';'. Deseori, suntem nevoii s grupm mai multe instruciuni pentru a forma un bloc. Astfel, obinem instruciunile compuse care sunt formate din mai multe instruciuni simple, separate prin caracterul ';'. n PHP, instruciunile compuse au urmtoarea sintaxa:

    { instructiune #1 instructiune #2 ... instructiune #n } Instruciunile care formeaz instruciunea compus pot fi de orice tip: orice structur de control, alte instruciuni compuse etc. Aadar un bloc de instructiuni (o instruciune 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 urmtoarea: if (conditie) instructiune

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

    Construcia if - else

    n foarte multe cazuri dorim s executm o alt instruciune dac valoarea expresiei condiie este false. n PHP putem utiliza o construcie de tipul if - else n acest scop. Sintaxa este: if (conditie) instructiune #1

    else instructiune #2

    Construcia elseif Uneori, suntem nevoii s folosim structuri alternative mbricate n diferite scopuri. Folosind construcii de tipul if - else vom obine 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 prescurtri i anume construcia 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 instruciuni cnd este indeplinit o anumit condiie, atunci ar trebui s folosim instruciunile 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 cuvnt cheie opinut prin adugarea prefixului end la cuvntul cheie care indic structura de control. Trebuie observat faptul c else i elseif nu sunt structuri, ele fiind simple construcii folosite n cadrul structurii if. Din acest motiv, nu vom avea niciodat endelse sau endelseif, ci doar endif-uri. Aadar, sintaxa alternativ pentru o structur if n care se folosesc construcii else i elseif este urmtoarea: 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 conine cicluri. Pentru a folosi o bucl anterior condiionat vom utiliza structura while. Sintaxa acestei proceduri este: while (conditie) instructiune

    Efectul acestei structuri este executarea instruciunii att timp ct valoarea expresiei condiie (eventual dup conversia la tipul boolean) este true. Trebuie observat faptul c este posibil ca instruciunea s nu fie executat niciodat. Si pentru aceast structur avem la dispoziie o sintax alternativ i anume: while (conditie):

  • grup instructiuni endwhile;

    Structura do - while

    Uneori, dorim s folosim bucle posterior condiionate. n acest scop, n PHP avem la dispoziie structura do - while a crei sintax este:

    do instructiune while (conditie); Singura diferen fa de structura while este faptul c valoarea condiiei este determinat, de fiecare dat, dup executarea instruciunii. Ca urmare, instruciunea va fi executat cel puin o dat. Nu exist o sintax alternativ pentru aceast structur.

    Structura for O alternativ cu o funcionalitate mai ridicat pentru utilizarea buclelor este structura repetitiv for. Sintaxa este foarte asemntoare 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 execuiei ciclului. Instruciunea este executat ct timp cea de-a doua expresie are valoarea true. De fiecare dat, dup executarea instruciunii, 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 urmtoarea sintax alternativ: for (expresie #1; expresie #2; expresie #3):

    instructiune

    endfor; Exemple

    n continuare avei un exemplu care afieaz numerele cuprinse ntre 1 i 15. Numerele pare vor fi scrise cu rou, iar cele impare care sunt divizibile cu 3 cu verde, iar celelalte cu albastru. Vom folosi o structur repetitiv pentru a afia numerele i o structur alternativ pentru a determina culoarea cu care vor fi afiate. Putem utiliza oricare dintre cele trei structuri repetitive; codul PHP pentru cele trei variante este prezentat mai jos.

    Cod:

  • echo "blue";

    echo "> $i ";

    endfor;

    ?>

    Cod:

    Cod:

    Rezultat:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

  • Structura foreach

    Aceast structur poate fi folosit pentru a realiza o iteraie printre toate elementele unui vector. Aadar, ea nu poate fi folosit dect mpreun cu vectorii; utilizarea sa asupra unei variabile de alt tip duce la apariia de erori. Exist dou sintaxe acceptate pentru aceast structur i anume: foreach (expresie_vectoriala as $valoare) instructiune

    sau

    foreach (expresie_vectoriala as $cheie => $valoare) instructiune Dac se utilizeaz prima variant, atunci la fiecare iteraie valoarea elementului curent este atribuit variabilei $valoare i apoi se trece la elementul urmtor (a crui valoare va fi atribuit variabilei la urmtoarea iteraie). Execuia ciclului se ncheie n momentul n care nu mai exist alte elemente n vector. Singura diferena care apare n cazul utilizrii celei de-a doua variante este faptul c la fiecare iteraie valoarea cheii elementului curent este atribuit variabilei $cheie. n continuare este un exemplu de folosire a celor doua sintaxe ale structurii foreach.

    Cod:

  • }

    // o matrice

    $b[0][0] = "a";

    $b[0][1] = "b";

    $b[1][0] = "c";

    $b[1][1] = "d";

    echo "Parcurgerea unei matrice:";

    foreach ($b as $v1)

    {

    echo "";

    foreach ($v1 as $v2)

    echo "$v2\n";

    echo "";

    }

    echo "Parcurgerea unui vector generat dinamic:

    ";

    // un vector generat dinamic

    foreach (array (1, 2, 3, 4, 5) as $v)

    echo "$v\n";

    echo "";

    ?>

    Rezultatul codului de mai sus este:

    Parcurgerea unui vector:

    1. Valoarea curenta este :1

    2. Valoarea curenta este :2

    3. Valoarea curenta este :3

    4. Valoarea curenta este :10

    O alta parcurgere:

    $a[0] => 1

    $a[1] => 2

    $a[2] => 3

    $a[3] => 10

    Parcurgere cu afisarea cheilor:

    $a[unu] => 1

    $a[doi] => 2

    $a[trei] => 3

    $a[zece] => 10

    Parcurgerea unei matrice: a b

    c d

    Parcurgerea unui vector generat dinamic: 1 2 3 4 5

    Structura switch n anumite cazuri trebuie s efectum anumite operaii n funcie de anumite valori ale unei expresii. O soluie ar fi folosirea unor structuri if mbricate sau a uneia singure n care apar mai multe construcii elseif. S presupunem c o anumit variabil poate avea cinci valori distincte i pentru fiecare valoare trebuie executat o anumit instruciune. Dac folosim structura if, secvena de cod va fi urmtoarea: if ($variabila == valoare #1)

    instructiune #1 elseif ($variabila == valoare #2)

  • instructiune #2 elseif ($variabila == valoare #3)

    instructiune #3 elseif ($variabila == valoare #4) instructiune #4 else

    instructiune #5 Folosind structura switch, secvena echivalent este: swich ($variabila) { case valoare #1: instructiune #1

    break; case valoare #2: instructiune #2 break; case valoare #3: instructiune #3

    break; case valoare #4: instructiune #4 break;

    case valoare #5: instructiune #5 break; }

    Prezentm n continuare sintaxa general a structurii switch: switch (expresie) {

    case valoare #1: grup instructiuni #1 case valoare #2: grup instructiuni #2 ...

    case valoare #n: grup instructiuni #n [default: grup instructiuni #n + 1]

    }

    Pentru nceput se determin valoarea expresiei i apoi se verific dac aceasta apare ca valoare pentru una dintre construciile case. n caz afirmativ, toate instruciunile ncepnd cu cea corespunztoare valorii respective (pn la sfritul blocului swich) vor fi executate. Execuia acestor instruciuni poate fi ntrerupt dac este folosit instruciunea break, care va fi prezentat mai jos. Dac valoarea expresiei nu corespunde nici uneia dintre valorile corespunztoare construciilor case, se execut instruciunile corespunztoare construciei default. Dac aceasta lipseste, atunci nu se execut nici o instruciune. Trebuie precizat faptul c valorile corespunztoare construciilor case pot fi numere ntregi, numere reale sau iruri de caractere; nu pot fi utilizate obiecte sau vectori.

    Instruciunea break

    Aceast instruciune poate fi folosit pentru a ntrerupe forat execuia unui ciclu sau a secvenei de instruciuni corespunztoare unei structuri switch. Instruciunea poate fi urmat de un argument care indic numrul de structuri mbricate a cror execuie se ncheie. Valoarea implicit este 1, deci se ntrerupe execuia unei singure structuri. Urmtoarea secven de cod PHP realizeaz parcurgerea elementelor unui vector de numere ntregi pn n momentul n care se ntlnete un numr negativ.

    Cod:

  • break;

    ?>

    Mai departe avei cazul n care este ntrerupt execuia mai multor cicluri; vom considera c parcurgem elementele unei matrice ptratice cu n elemente i n coloane pn n momentul n care ntlnim o valoare nul.

    Cod:

    Instruciunea break poate fi utilizat pentru ntreruperea execuiei secvenelor de instruciuni corespunztoare structurilor for, foreach, while, do - while i switch.

    Instruciunea continue Aceast instruciune este folosit pentru a ntrerupe execuia secvenei de instruciuni din interiorul unui ciclu i trecerea la urmtoarea iteraie. n cazul instruciunii for, nainte de urmtoarea iteraie se evalueaz (execut) expresia de incrementare (expresia #3 din sintaxa general). La fel ca i n cazul instruciunii break, poate aprea un argument care indic numrul structurilor mbricate asupra crora are efect. Exemplul urmtor realizeaz afiarea elementelor unui ir de numere ntregi care sunt mai mari dect 1000.

    Cod:

    Urmtorul exemplu ilustreaz efectul folosirii argumentelor pentru instruciunea continue.

    Cod:

  • echo "??Ciclul #2 \n";

    while (1)

    {

    echo "??Ciclul #3\n";

    continue 3;

    }

    echo "Acest mesaj nu va fi afisat niciodata.\n";

    }

    echo "Nici acest mesaj nu va fi afisat niciodata.\n";

    }

    ?>

    Rezultatul codului de mai sus este:

    Ciclul #1

    Ciclul #2 Ciclul #3 Ciclul #1

    Ciclul #2 Ciclul #3 Ciclul #1

    Ciclul #2 Ciclul #3 Ciclul #1 Ciclul #2

    Ciclul #3 Ciclul #1 Ciclul #2

    Ciclul #3

    Alte structuri PHP

    Exist mai multe alte structuri PHP care pot fi utilizate n anumite scopuri. Vom aminti acum cteva dintre ele: Structurile include, require, include_once i require_once pot fi utilizate pentru a "insera" anumite instruciuni care sunt pstrate ntr-un alt fiier (document). Interpretorul PHP consider c secvena din fiierul inserat se afl n fiierul din care s-a "comandat" inserarea n poziia n care apare structura de inserare. O alt structur este declare care permite crearea unor directive n execuie. Funciile PHP trebuie s utilizeze instruciunea return pentru a furniza un rezultat.

    Despre funcii n PHP

    n PHP funciile pot fi definite de ctre utilizator folosind urmtoarea sintax: function numef ($param1, $param2, ..., $paramN) { // instructiuni

    } n PHP o funcie poate fi definit oriunde n cadrul script-ului i n interiorul unei funcii poate s apar orice secven valid de cod care include definirea de alte funcii i definiii de clase. Argumentele unei funcii trebuie separate prin virgul, i, implicit, acestea sunt transmise prin valoare. Pentru ca funcia s returneze un rezultat se folosete construcia return care

  • primete ca parametru o expresie care reprezint valoarea


Recommended