3.1. Introducere in PHP
PHP (oficial 'Personal Home Page: Hypertext Preprocessor') este un limbaj de programare inclus practic in HTML. Initial, PHP era acronimul de la Personal Home Page, dar a fost modificat pentru a se alinia la conversia de numire recursiva GNU (GNU = Gnu`s Not Unix) si acum este acronimul pentru PHP Hypertext Preprocessor.
PHP este un produs Open Source, cu acces la codul sursa. Il puteti folosi, modifica si redistribui, toate acestea in mod gratuit.
Pentru a intelege aceaste afirmatii trebuie urmarit urmatorul exemplu:
<html>
<head>
<title>Exemplu</title>
</head>
<body>
<?php echo 'Salut; sunt un script PHP!'; ?>
</body>
</html>
Ceea ce distinge PHP-ul fata de Javascript este faptul ca, codul este executat pe server. Clientul primeste doar rezultatul executarii scriptului, nepermitand in nici un fel determinarea codului.
Ceea mai mare parte a sintaxei este imprumutata din C, Java si Perl, cu cateva proprietati unice PHP-ului. Scopul acestui limbaj este de a permite programatorilor WEB dezvoltarea rapida si dinamica a programelor.
PHP-ul a fost dezvoltat la sfarsitul anului 1994 de catre Rasmus Lerdorf, si a fost utilizat in scopuri personale. Prima versiune care a fost folosita si de alti programatori a aparut la inceputul anului 1995, fiind cunoscuta ca Personal Home Page Tools. Aceasta versiune permitea intelegerea catorva functii si macro-uri folosite in mod regulat pentru realizarea de guestbook-uri si de contoare. Acesta a fost momentul in care programatorii din toata lumea au inceput sa-si aduca contributia la dezvoltarea limbajului. La sfarsitul anului 1997, PHP/FI era folosit in peste 50.000 de site-uri Web din intreaga lume. In 1997, Zeev Suraski si Andi Gutmans au rescris de la zero serverul de PHP/FI, iar noua versiune lansata pe piata a devenit cunoscuta sub denumirea de PHP3. La mijlocul anului 1999, numarul de servere pe care rula PHP-ul ajunsese la 1.000.000.
Dezvoltat initial pentru sistemul de operare (u)NIX, serverul de PHP a fost portat cu succes si pe servere 9x/NT.
Poate ceea mai puternica si mai importanta componenta a PHP-ului este suportul cu bazele de date. Scrierea unei baze de date pentru Web este extrem de simpla. Bazele de date cu care PHP-ul stie sa lucreze sunt:
Adabas D |
InterBase |
Solid |
dBase |
mSQL |
Sybase |
Empress |
MySQL |
Velocis |
FilePro |
Oracle |
Unix dbm |
Informix |
PostgreSQL |
3.2. Securitatea in PHP
PHP este un puternic limbaj de programare, capabil sa acceseze fisiere, sa execute comenzi, sa deschida conexiuni de retea. Aceste proprietati fac ca tot ce ruleaza pe server sa fie expus la un grad mare de insecuritate.
PHP-ul a fost creat special pentru a fi mai sigur decat CGI-urile scrise in Perl sau C, iar in cazul in care a fost configurat corect asigura combinatia perfecta de libertate si securitate. Din cauza diferitelor moduri de utilizare a PHP-ului, exista multe posibilitati de configurare si control. Marea diversitate de optiuni, garanteaza utilizarea PHP-ului pentru o multime de scopuri, dar permite de asemenea o configurare gresita care poate duce la o instalare cu urmari grave in securitatea server-ului.
3.3. Caracteristici ale limbajului PHP
Principalele caracteristici ale limbajului sunt:
Puterea limbajului - PHP ofera o gama larga de module, permitand utilizarea codului PHP pentru dezvoltarea de aplicatii Windows, ASP si Shockwave Flash; ceea mai puternica caracteristica a programului este insa, numarul mare de baze de date cu care poate lucra si usurinta folosirii acestora;
Viteza de dezvoltare a programelor - in PHP programele se pot scrie folosind orice editor de texte; programul nu necesita sa fie compilat, putand fi incorporat direct in paginile HTML;
Portabilitatea - programele scrise in PHP pot fi executate fara nici o modificare atat in sistemele de operare (u)NIX, cat si in orice versiune de servere 9x/NT;
Pretul - ca majoritatea limbajelor si programelor dezvoltate pentru (u)NIX, si PHP este distribuit gratuit, utilizatorul trebuind sa respecte doar specificatiile GNU.
Exista cateva modalitati pentru a incepe si a termina un program in PHP:
<? echo "prima metoda"; ?>
<? php echo "a doua metoda; pentru documente XML"; ?>
<% echo "a treia metoda; folosind taguri ASP"; %>
PHP-ul permite inserarea de comentarii oriunde in program. Practic modalitatea de introducere a comentariilor este identica cu ceea din C, C++ si shell-ul (u)NIX.
Astfel, exista trei modalitati de introducere a unui comentariu:
// Prima modalitate de introducere a unui comentariu
# A doua modalitate de introducere a unui comentariu
/*A treia modalitate de introducere a unui comentariu */
3.4. Cateva referiri la limbajul PHP
3.4.1. Variabile in PHP
Variabilele in PHP sunt reprezentate de semnul dolar ($) urmat de numele variabilei. Numele variabilelor sunt case-sensitive.
$var = 'Bob';
$Var = 'Joe';
$täyte = 'mansikka'; // valid; 'ä' este caracterul ASCII 228.
PHP-ul pune la dispozitia utilizatorului un numar mare de variabile predefinite. Multe din aceste variabile, din pacate, nu pot fi complet documentate deoarece depind de server-ul pe care ruleaza, versiunea server-ului si modul in care a fost instalat.
Iata cateva variabile predefinite:
SERVER_NAME - contine numele host-ului pe care serverul ruleaza;
SCRIPT_NAME - contine calea scriptului care ruleaza;
SERVER_PROTOCOL - contine numele si revizia protocolului prin care pagina a fost accesata (ex. 'HTTP/1.0');
Un alt tip de variabile importante in PHP, sunt variabilele cu nume variabil. Acestea sunt variabile al caror nume poate fi setat dinamic.
$a = 'hello';
$$a = 'world';
echo '$hello'; // se returneaza world
Variabila $a primeste sirul de caractere "hello", in timp ce a doua instructiune atribuie variabilei $hello sirul de caractere "world".
3.4.2. Tipuri de date
PHP suporta urmatoarele tipuri de date:
intregi - cu o valoare maxima uzuala de 2 milioane (32 biti);
ex: $a = 1234;
flotante - cu o valoare maxima uzuala de 1.8e308 si o precizie de 14 zecimale; ex: $a = 1.2e3;
string - un string este delimitat de semnul ("), si poate sa contina orice caracter din codul ASCII; ex: $a="acesta este un string";
array - poate fi definit atat element cu element, cat si cu ajutorul functiei array( );
ex: //array definit pe elemente
$a[0] = 'abc';
$a[1] = 'def';
$b['foo'] = 13;
//array definit cu ajutorul functiei
$a = array(
'color' => 'red',
'taste' => 'sweet',
'shape' => 'round');
3.4.3. Structuri de control
Constructia if este una dintre cele mai importante componente a oricarui limbaj. Permite executarea conditionata a unui fragment de cod.
if (expr)
cod 1
else
cod 2
Ceea mai simpla expresie repetitiva din PHP este while. Aceasta executa un cod atata timp cat expresia evaluata este adevarata (TRUE).
while (expr):
cod
endwhile;
Expresia for, este ceea mai complexa expresie repetitiva din PHP.
for (expr1; expr2; expr3)
cod
Prima expresie (expr1 - expresie de intrare), este evaluata (executata) neconditionat la inceputul buclei.
La inceputul fiecarei iteratii, (expr2 - expresie conditionala) este evaluata. Daca evaluarea returneaza TRUE, bucla continua iar codul este executat. Daca se returneaza FALSE, executarea buclei se opreste.
La sfarsitul fiecarei executii a buclei, (expr3 - expresie de reinitializare) este evaluata (executata).
3.4.4. Functii
O functie poate fi definita in PHP cu urmatoarea sintaxa:
function foo ($arg_1, $arg_2, , $arg_n)
Informatia este trecuta functiei prin intermediul argumentelor.
3.4.5. Cookies-uri
PHP suporta cookies-urile. Cookies-ul este un mecanism pentru depozitarea datelor in browser. Transmiterea de cookies-uri se poate face cu ajutorul functiei setcookie(). Cookies-urile sunt parte integranta a header-ului HTTP, si deci, setcookie() trebuie apelata inainte de transmiterea altor iesiri catre browser.
Orice cookies trimis catre client, va fi transformat intr-o variabila PHP.
3.4.6. Session-uri
De prima oara cand rulezi PHP pe un sistem de operare, fie ca este Windows sau Unix te gandesti cum ar fi sa faci un login pentru utilizatorii care iti viziteaza site-ul, si cum poti sa faci browser-ul sa-i recunoasca pe acestia. De exemplu daca pe site-ul dumneavoastra se afla o sectiune numita 'members only' si vreti sa validati user-ii care se autentifica. Presupunem ca datele se afla intr-o baza de date de tip MySQL.
Prima oara trebuie sa ne orientam dupa anumite functii pe
care le vom explica mai jos:
- session_start() - aceasta functie este probabil cea mai importanta,
si ea este ceruta pe fiecare pagina a site-ului dumneavoastra (in caz ca nu
schimbati setarile din php.ini, de
ex. session.auto_start 1). Odata pasata browser-ului, acesta va crea un ID de
sesiune unic pentru utilizatorul respectiv. Aceasta functie se foloseste de
obicei in header-ul scriptului:
<? session_start(); ?>
Aceasta da voie unei pagini sa ia toate informatiile sesiunii plus variabilele pasate mai jos de aceasta functie (ex. $_SESSION['variabila'] = ceva).
session_register() - aceasta ne ajuta sa pasam variabilele "imprumutate" de
session_start() si altor scripturi (pagini). Un exemplu definitoriu este acela in care un user se autentifica si se creaza o sesiune care este pasata apoi scriptului din adauga_articol.php(de exemplu), care va retine variabilele memorate de sesiune si va sti ca articolul X a fost introdus de user-ul W. Functia session_register() este nevoie sa fie folosita doar o singura data. Un exemplu in acest caz, presupunem ca avem un formular cu campurile "username" si "parola":
<?session_start();
session_register('username','parola');?>
In cele din urma vom folosi functia session_destroy() pentru a 'distruge' sesiunea si a nu face posibila o eventuala recuperare a ID-ului de catre un hacker. De obicei aceasta functie se foloseste in cadrul butoanelor gen 'log off/out'.
Upload-uri folosind PHP-ul
PHP este capabil sa receptioneze fisiere de la orice browser care respecta standardul RFC-1867. Aceasta da posibilitatea de a upload-a atat fisiere text cat si fisiere binare. PHP permite utilizarea functiilor de autentificare si manipulare a fisierelor, avand astfel un control deplin asupra permisiunilor de upload pe server.
<FORM ENCTYPE='multipart/form-data' ACTION='_URL_' METHOD=POST>
<INPUT TYPE='hidden' name='MAX_FILE_SIZE' value='1000'>
Send this file: <INPUT NAME='userfile' TYPE='file'>
<INPUT TYPE='submit' VALUE='Send File'>
</FORM>
_URL_ trebuie sa fie un fisier PHP. Campul hidden (ascuns) MAX_FILE_SIZE trebuie sa preceada campul de introducere a fisierului ce se doreste a fi transmis, iar valoarea reprezinta marimea maxima acceptata in bytes a fisierului.
3.5. MySQL
MySql este un sistem de gestiune a bazelor de date, foarte rapid si robust.
O baza de date va permite sa stocati, sa cautati, sa sortati si sa va regasiti datele in mod eficient. Serverul MySql controleaza accesul la datele dumneavoastra pentru a garanta ca mai multi utilizatori pot lucra simultan cu acestea. Deci, MySql este un server multi-user (mai multi utilizatori) si multi-thread (mai multe fire de executie). Utilizeaza SQL (Structured Query Language), limbajul standard de interogare a bazelor de date din intreaga lume. MySQL este disponibil in mod public din 1996, dar istoria dezvoltarii sale incepe in 1979. A castigat de mai multe ori Linux Journal Readers` Choice Award (Premiul cititorilor). MySql este disponibil sub o licenta Open Source, dar daca este nevoie sunt disponibile si licente comerciale.
Principalele componente pe care le ofera MySQL-ul sunt:
suport pentru queri-uri multiple si simultane
campuri cu valoare fixa si variabila
driver pentru ODBC (inclusiv sursa)
un sistem de protectie eficient
suport pentru chei unice, chei primare in sintaxa CREATE
un sistem malloc rapid
salvarea datelor in formatul ISO8859_1
posibilitatea de folosire a alias-urilor
capabilitatea de redefinire a tabelelor.
Baza de date MySql ofera un set de instructiuni din specificatia SQL92.
Crearea de noi tabele
CREATE TABLE nume_tabel ( creare_definiti,)
creare_definiti:
nume_coloana type NOT NULL [DEFAULT valoare_default] [PRIMARY KEY]
sau nume_coloana INDEX [nume_cheie]
sau nume_coloana UNIQUE (nume_coloana[lungime], .
REFERENCES nume_tabel
[ ON DELETE (RESTRICT | CASCADE | SET NULL) ]
Aceasta instructiune este specifica SQL-ului si a fost introdusa datorita vitezei mare de executie.
DELETE FROM nume_tabel WHERE definitie_where
Sterge inregistrari dintr-un tabel. Instructiunea returneaza numarul de inregistrari afectate. In cazul in care se foloseste DELETE fara clauza WHERE, tabelul este golit si apoi regenerat.
DROP TABLE nume_tabel [nume_tabel .]
Sterge un tabel.
ATENTIE! Comanda DROP TABLE sterge definitiv tabelul din sistem.
SELECT [DISTINCT | ALL] expresia_select, [FROM tabel [WHERE definitie_where] [GROUP BY coloana, ] [ORDER BY coloana [ASC | DESC, ] ] [INTO OUTFILE 'nume_fisier' ]
Instructiunea SELECT este folosita pentru executarea interogarilor asupra tabelelor. Este inima limbajului SQL.
expresia_select poate sa contina urmatoarele functii/operatori logici:
functii matematice primare |
|
modulo |
|
| & |
functii cu biti |
paranteze |
|
BETWEEN (A,B,C) |
echivalent cu (A >= B AND A <= C) |
BIT_COUNT( ) |
numarul de biti |
IF (A,B) |
daca A nu este NULL returneaza A, altfel B |
OR, AND |
returneaza TRUE(1) sau FALSE(0) |
<> <= < >= > |
returneaza TRUE(1) sau FALSE(0) |
expr LIKE expr |
returneaza TRUE(1) sau FALSE(0) |
Administrarea serverului MySql
Programul care este inima sistemului MySQL se numeste mysqld. Programul mysqld ruleaza ca un daemon in sistem, acceptand conexiunile de la programele client, executand interogari si returnand rezultate. Contine un sistem multi-threading, ceea ce inseamna ca poate accepta si executa mai multe interogari in acelasi timp.
Baza de date MySQL foloseste un sistem special de tabele pentru a asigura accesul privilegiat la baza de date. Fiecare user foloseste o parola criptata.
In momentul in care se cere o conexiune la server, are loc urmatorul dialog intre client si server:
in momentul conexiuni serverul atribuie un numar aleator clientului
clientul calculeaza un nou numar aleator din numarul primit de la server si din parola criptata pe care o primeste de la user; numarul rezultat este trimis catre server
serverul calculeaza un numar din parola salvata in tabel-ul sau si din numarul aleator primit de la client; daca numarul este identic cu numarul clientului, conexiunea este acceptata.
Functiile MySql permit accesul la server-ul MySql din cadrul aplicatiilor PHP. Pentru ca acestea sa fie functionale, PHP-ul trebuie compilat cu suport MySql, folosind optiunea with-mysql.
In continuare vor fi prezentate principalele functii MySQL.
3.5.1. MySQL close
int mysql_close ([int identificator])
mysql_close( ) - inchide legatura cu serverul de MySQL asociata identificatorului. In cazul in care acesta nu este specificat, ultima legatura deschisa va fi inchisa.
3.5.2. MySQL connect
int mysql_connect ([string hostname [:port] [, string username [, string parola]]])
mysql_connect( ) - realizeaza o conexiune cu server-ul MySql. Toate argumentele sunt optionale. Legatura cu serverul va fi inchisa imediat ce executia scriptului a luat sfarsit.
3.5.3. MySQL create db
int mysql_create_db (string nume_tabel [, int identificator])
mysql_create_db( ) - creaza un tabel in baza de date asociat identificator-ului specificat. Exemplu:
<? $link = mysql_connect ('localhost', 'root', 'parola')
or die ('Could not connect');
if (mysql_create_db ('my_db'))
else ?>
3.5.4. MySQL db query
int mysql_db_query (string baza_date, string query [, int identificator ])
mysql_db_query( ) - selecteaza o baza de date si executa o interogare.
3.5.5. MySQL drop db
int mysql_drop_db (string baza_date [, int identificator])
mysql_drop_db( ) - sterge un tabel de pe server, asociat cu indentificator-ul specificat.
3.5.6. MySQL fetch array
array mysql_fetch_array (int rezultat [, int tipul_rezultatului])
mysql_fetch_array( ) - este o extensie a comenzii mysqli_fetch_row( ). Pe langa faptul ca stocheaza datele in campuri numerice asociative, stocheaza datele in indici asociativi, folosind numele campurilor ca si chei. Exemplu:
<? mysql_connect ($host, $user, $password);
$result = mysql_db_query ('database','select * from table');
while ($row = mysql_fetch_array ($result)) ?>
3.5.7. MySQL fetch row
array mysqli_fetch_row (int rezultat)
mysqli_fetch_row( ) - stocheaza un rand de date din rezultat asociat cu identificatorul specificat. Randul este returnat ca un array. Fiecare coloana este stochata in offset-ul array-ului, incepand de la valoarea 0. Apelarea consecutiva a instructiunii mysqli_fetch_row( ) returneaza urmatorul rand, sau FALSE in cazul in care nu mai sunt randuri.
3.5.8. MySQL num row
int mysqli_num_rows (int rezultat)
mysqli_num_rows( ) returneaza numarul de randuri.
3.5.9. MySQL select db
int mysql_select_db (string tabel [, int identificator])
mysql_select_db( ) - seteaza tabelul tabel ca fiind cel activ de pe serverul asociat cu identificator.
3.5.10. MySQL result
int mysql_result (int rezultat, int rind)
mysql_result( ) - returneaza continutul unei celule din rezultat. Aceasta functie este mai lenta in cazul in care rezultatul contine un numar mare de date. In acest caz este recomandata folosirea functiei mysqli_fetch_row ( ).
|