Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Tehnologii Web
programare Web
____ _ _ ____
( _ ( )_( )( _ 
)___/ ) _ ( )___/
(__) (_) (_)(__)
dezvoltarea aplicațiilor Web în PHP
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
„E mediocru ucenicul
care nu-și depășește maestrul.”
Leonardo da Vinci
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Personal Home Page Tools (1995)
Rasmus Lerdorf
PHP 3 (1998)
dezvoltat de Zend – Zeev Suraski & Andi Gutmans
PHP 4 (2000)
suport pentru programare obiectuală
PHP 5 (2004) – varianta cea mai recentă: PHP 5.6 (2014)
noi facilități inspirate de Java
PHP 6 (actualmente abandonat)
phpngPHP 7 (2015)
strong typing, suport pentru Unicode, performanță,…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Server de aplicații Web
oferă un limbaj de programare
de tip script, interpretat
poate fi inclus direct și în cadrul documentelor HTML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Limbajul PHP este procedural, oferind suport și
pentru alte paradigme de programare
(obiectuală și, mai recent, funcțională)
php: caracterizare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Limbajul PHP este procedural, oferind suport și
pentru alte paradigme de programare
(obiectuală și, mai recent, funcțională)
poate fi folosit și ca limbaj de uz general
php: caracterizare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Sintaxă inspirată de C, Perl și Java – case sensitive
uzual, programele PHP au extensia .php
php: caracterizare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Disponibil gratuit – open source – pentru
diverse platforme (Linux, Windows, Mac OS X, UNIX)
și servere Web: Apache, IIS, nginx,…
www.php.net
www.zend.com
php: caracterizare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Maniera de funcționare a procesorului (engine-ului) PHP
Client
Web
cerere HTTP
(GET, POST,...)
răspuns
(reprezentare)
HTML, PNG, SVG,...
procesor
(engine)
Zend
server de
aplicații
PHP
programe
.php

resurse (externe)
Server Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Maniera de funcționare a procesorului (engine-ului) PHP
Client
Web
cerere HTTP
(GET, POST,...)
răspuns
(reprezentare)
HTML, PNG, SVG,...
procesor
(engine)
Zend
server de
aplicații
PHP
programe
.php

resurse (externe)
Server Web
eventual, pot fi integrate
diverse extensii (module)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Programul PHP e interpretat de Zend Engine 2
generând instrucțiuni (opcodes) interne
http://www.php.net/manual/en/internals2.opcodes.php
http://www.phpinternalsbook.com/
php: caracterizare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
diverse comportamente ale platformei PHP,
inclusiv încărcarea extensiilor (biblioteci partajate .so/.dll),
se pot configura via fișierul php.ini
precision = 14 ; controlul preciziei valorilor float – detalii la http://php.net/precision
safe_mode = Off ; controlul procesării – http://php.net/safe-mode
max_execution_time = 30 ; număr maxim de secunde privind execuția unui program
memory_limit = 128M ; dimensiunea maximă a memoriei alocate unui script
post_max_size = 8M ; dimensiunea maximă a datelor transmise prin metoda POST
default_mimetype = "text/html" ; tipul MIME implicit transmis de un script PHP
file_uploads = On ; sunt permise upload-uri de fișiere
upload_max_filesize = 32M ; dimensiunea maximă a unui fișier preluat de la client
allow_url_fopen = On ; se permite deschiderea de fișiere specificate printr-un URL
session.use_cookies = 1 ; sesiunile Web vor recurge la cookie-uri
session.name = PHPSESSID ; numele cookie-ului referitor la sesiunea Web
…
; precizarea extensiilor încărcate la inițializarea serverului de aplicații
extension=php_pdo_sqlite.dll
extension=php_mysqli.dll
extension=php_soap.dll
…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Maniera de rulare a programelor PHP
– eventual, la nivel de bloc de cod –
poate fi ajustată via directiva declare
// setul de caractere folosit pentru generarea conținutului
declare (encoding='ISO-8859-1');
// verificare strictă a tipurilor de date la PHP 7
declare (strict_types=1);
php: caracterizare
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Pentru creșterea performanței,
se poate adopta compilarea just-in-time
HHVM – HipHop Virtual Machine (Facebook)
utilizată de Baidu, Box, Etsy, Facebook, Wikipedia,…
www.hhvm.com
php: caracterizare
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Interacțiunea cu utilizatorul:
preluarea valorilor câmpurilor formularelor Web
cookie-uri
sesiuni
autentificarea utilizatorului
acces la variabile globale create „din zbor”
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Facilități pentru tehnologiile Web:
prelucrare de URL-uri
suport pentru HTTP – inclusiv cURL
caching via memcached
dezvoltare de servicii Web prin SOAP și REST
…și altele
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Suport pentru acces la baze de date:
la nivel abstract
DBAL (DataBase Abstraction layer)
iODBC (Independent Open DataBase Connectivity)
PDO (PHP Data Objects)
www.phptherightway.com/#databases_abstraction_layers
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Suport pentru acces la baze de date:
specific unui server de baze de date
relațional: DB2, MySQL, Oracle, PostgreSQL, SQLite,…
bazat pe NoSQL – e.g., MongoDB
a se parcurge http://www.phptherightway.com/#databases
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Prelucrarea conținutului resurselor:
fișiere audio – via biblioteci: ktaglib, oggvorbis etc.
arhive de tip bzip2, LZF, RAR, ZIP, ZLIB
documente PDF
imagini – cu biblioteci: Cairo, GD, EXIF, ImageMagick
fișiere în format JSON
documente XML – creare, procesare, validare etc.
cărți de credit
...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: caracterizare
Suport pentru resurse de sistem + Internet:
sisteme de fișiere, inclusiv FTP
procese – cu libevent, pthreads, Gearman,...
răspuns la evenimente – via Event
socket-uri
poștă electronică – e.g., IMAP, POP3
...și multe altele
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
PHP ca limbaj de programare procedurală
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
boolean
TRUE sau FALSE
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
integer
valori întregi specificate
în baza 10 sau 16 (hexa), 8 (octal), 2 (binar)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
float
numere reale
reprezentate uzual conform IEEE 754 (dublă precizie)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
float
numere reale
reprezentate uzual conform IEEE 754 (dublă precizie)
valoare specială – constanta NAN (not a number)
funcții predefinite utile: is_nan(), is_finite(), is_infinite()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
string
șiruri de caractere ASCII
(nu există suport nativ pentru Unicode)
ca la C, pot fi folosite caractere escape precum
n r t e  $ "
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – scalare
string
delimitatori uzuali:
" sau '
un șir nu poate avea mai mult de 2 GB
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – compuse
array
asociere între valori (de orice tip)
și chei (de tip integer sau string)
nu există o distincție clară
între tablouri indexate și cele asociative
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – compuse
array
// un tablou indexat (vector de valori)
$cadouri = array ("trotineta", "laptop", "minge", "topor");
// un tablou asociativ – perechi (cheie, valoare)
array ( "nume" => "Tux", "dimensiune" => 17, "oferta" => TRUE );
// sintaxa simplificată (pentru PHP 5.4+)
[ "nume" => "Tux", "dimensiune" => 17, "oferta" => TRUE ];
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – compuse
object
instanță a unei clase
creat cu operatorul new
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – speciale
resource
semnifică o referință la o resursă externă
o resursă e creată de funcții specifice
e.g., resursa de tip stream inițiată de funcția fopen()
și folosită de funcțiile fread(), feof(), fgets() etc.
funcții predefinite: is_resource(), get_resource_type()
detalii la http://www.php.net/manual/en/resource.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: tipuri de date – speciale
null
specifică valoarea NULL
reprezentând o variabilă care nu are valoare
funcții utile: is_null() și unset()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile
Variabile create „din zbor”
tipul e determinat pe baza contextului
convertirea automată a tipului (type casting)
e similară celei de la limbajul C
$ani = 21; /* o variabilă obișnuită */
$conectat = TRUE; # una de tip Boolean
$prefer["culoare"] = "gri"; // un tablou asociativ
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile
Variabile create „din zbor”
tipul e determinat pe baza contextului
funcții predefinite utile:
var_dump(), settype(),
is_bool(), is_int(), is_float(), is_array(), is_string(),
is_scalar(), is_numeric() etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile
Vizibilitatea variabilelor (scope)
pentru a putea fi folosite în întreg programul,
variabilele trebuie declarate ca fiind globale
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
$scor = 33;
function oferaScor () {
echo "Scor curent: " . $scor;
}
oferaScor();
Undefined variable:
scor in prog.php on line 4
$scor = 33;
function oferaScor () {
global $scor;
echo "Scor curent: " . $scor;
// similar cu $GLOBALS["scor"]
}
oferaScor();
Scor curent: 33
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile
Vizibilitatea variabilelor (scope)
o variabilă poate fi declarată ca fiind statică
există doar în domeniul de vizibilitate local
(e.g., în cadrul unei funcții), dar nu-și pierde valoarea
atunci când execuția programului părăsește
acel domeniu de vizibilitate
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile predefinite
Variabile disponibile în întreg programul
(superglobals)
$GLOBALS [ ]
tablou asociativ ce conține referințe
la toate variabilele definite global
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: variabile predefinite
Variabile disponibile în întreg programul
(superglobals)
$_SERVER [ ]
$_GET [ ] $_POST [ ] $_FILES [ ] $_REQUEST [ ]
$_SESSION [ ]
$php_errormsg
$argc $argv
...
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: constante
Specificate cu define ( )
sunt disponibile la nivel global în program
define ("DIMENS_MIN", "15");
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: constante predefinite
Exemplificări:
PHP_VERSION
PHP_OS
PHP_EOL
PHP_INT_MAX
PHP_INT_SIZE
TRUE
FALSE
NULL
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: constante predefinite
Controlul manierei de raportare a erorilor:
E_ERROR erori fatale (execuția script-ului e oprită)
E_WARNING avertismente
E_PARSE erori de procesare a codului (parsing)
E_NOTICE notificări în timpul rulării
E_STRICT sugestii privind îmbunătățirea codului
E_DEPRECATED notificări despre aspecte demodate
www.php.net/manual/en/errorfunc.constants.php
www.phptherightway.com/#errors_and_exceptions
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: constante predefinite
Mediul de execuție oferă acces la constante „magice”
ale căror valori pot fi folosite în cadrul programului
__LINE__
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__TRAIT__
__METHOD__
__NAMESPACE__
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: operatori
Majoritatea, similari celor din limbajul C
aritmetici: + - * / % ++ --
asignare a valorii: = și => (pentru tablouri)
asignare prin referință: =&
pe biți: & | ^ << >>
comparații: == === != <> !== < > <= >= ?: ?? <=>
control al raportării erorilor: @
logici: and or xor ! && ||
șiruri de caractere (concatenare) – ca la Perl: . .=
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: operatori
În PHP 7, se pot folosi și noii operatori:
<=> (spaceship)
compararea a două expresii (de tip scalar),
întorcând -1, 0 sau 1
echo 15.5 <=> 15.5; // 0 (egalitate)
echo 15.5 <=> 16.5; // -1 (mai mic)
echo 17.5 <=> 15.5; // 1 (mai mare)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: operatori
În PHP 7, se pot folosi și noii operatori:
?? (null coalescing)
oferă valoarea primului operand dacă există și nu e NULL,
altfel întoarce valoarea celui de-al doilea operand
// folosim ca nume de utilizator valoarea furnizată în formular
// (preluată prin GET sau POST); dacă nu există, va fi 'tux'
$username = $_GET['user'] ?? $_POST['user'] ?? 'tux';
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: structuri de control
if, switch, while, do, for, break, continue
asemănătoare celor din C
if (!$nume) {
echo ("Nu este precizat corect numele…");
} else {
echo ("Bine ai venit, " . $nume . "!n");
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: exemplu
<?php
// umplem un tablou cu valori de la 1 la 10
for ($contor = 1; $contor <= 10; $contor++) {
$valori[$contor] = $contor;
}
// realizăm suma valorilor
$suma = 0;
foreach ($valori as $element)
$suma += $element;
/* afișăm suma obținută la ieșirea standard
pentru a fi trimisă clientului Web */
echo ("<p>Suma de la 1 la 10 este <strong>" . $suma . "</strong>.</p>");
?>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Invocarea (rularea) programului PHP direct
din linia de comandă:
salvăm codul într-un fișier text – valori.php
apelăm interpretorul PHP din linia de comandă
php valori.php
<p>Suma de la 1 la 10 este <strong>55</strong>.</p>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Invocarea (rularea) programului PHP
la nivelul serverului Web:
plasăm fișierul sursă – cu drepturi de citire și execuție
în navigator, indicăm URL-ul către program
pentru a-l invoca via metoda GET a protocolului HTTP
rezultatul generat
de script
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
recurgerea la un mediu
de execuție online
http://ideone.com/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: structuri de control
Includerea de cod-sursă din alte fișiere
(suport pentru modularizare)
include
caută fișierul sursă în directoarele predefinite specificate
via include_path și-l evaluează
dacă fișierul nu există, se generează un avertisment
include_once – pentru a-l include o singură dată
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: structuri de control
Includerea de cod-sursă din alte fișiere
(suport pentru modularizare)
require
caută fișierul sursă în directoarele predefinite specificate
via include_path și-l evaluează
dacă fișierul nu există, se emite o eroare fatală
require_once – pentru a-l include o singură dată
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Funcții definite de utilizator:
function trimiteMesaj ($exped="", $dest="", $subiect="Web") {
// corp…
}
php: funcții
parametri cu
valori implicite
http://php.net/manual/en/language.functions.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
define ('MAX', 10); // numărul maxim de valori
function patrat ($numar) { // funcția de ridicare la pătrat
return $numar * $numar;
}
$numar = 0;
while ($numar < MAX) {
$numar++; // incrementăm numărul
if ($numar % 2) // e număr impar...
continue; // continuăm cu următoarea iterație
// e număr par, deci afișăm pătratul lui
echo "$numar la pătrat este " . patrat ($numar) . "n";
} // final de while
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Funcții definite de utilizator:
php: funcții
numele funcțiilor sunt considerate case-insensitive
parametrii pot fi dați prin referință – prefixați de &
la PHP 5.6+, numărul variabil de parametri e indicat de …
http://php.net/manual/en/functions.arguments.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții
<?php
declare (strict_types=1);
// argumentele trebuie să fie întregi, valoarea oferită trebuie să fie de tip int
function aduna (int ...$numere): int {
$suma = 0;
foreach ($numere as $numar) {
$suma += $numar;
}
return $suma;
}
echo aduna (7, 3, 74, 1);
echo aduna (pi (), '?');
?>
în PHP 7, se poate preciza și tipul de date
pentru fiecare argument + valoarea întoarsă de funcție
(scalar type declarations)
85
Fatal error: Uncaught TypeError:
Argument 1 passed to aduna() must
be of the type integer, float given
Next TypeError: Argument 2 passed
to aduna() must be of the type
integer, string given
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Începând cu PHP 5.3,
pot fi specificate și funcții anonime
programare funcțională (e.g., closures)
$saluta = function ($nume) { // variabilă de tip funcție
printf ("Salut %s...n", $nume);
};
$saluta ('lumea');
$saluta ('Tuxy');
php: funcții
vezi www.phptherightway.com/pages/Functional-Programming.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
matematice & de conversie
de manipulare a șirurilor de caractere
de prelucrare a tablourilor
de acces la resurse și de lucru cu fișiere
de manipulare a bazelor de date
privitoare la conexiunile de rețea
pentru accesarea resurselor XML, PDF, JPEG,...
specifice sistemului de operare
generale
detalii la http://php.net/manual/en/funcref.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Matematice:
abs(), mod(), fmod()
ceil(), floor(), round(), max(), min()
exp(), log10(), log()
pow(), sqrt()
sin(), cos(), tan(), asin(), …, sinh(), …, pi()
rand(), srand()
bindec(), octdec(), dechex(),…, base_convert()
is_finite(), is_infinite(), is_nan()
vezi și http://php.net/manual/en/refs.math.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Șiruri de caractere:
echo(), print(), printf(), sprintf() etc.
strlen(), chr(), ord(), substr(), strstr(), strpos(),…
strcmp(), strcasecmp(), strnatcmp() etc.
strcat(), str_replace(), str_ireplace(), strrev() etc.
trim(), ltrim(), rtrim()
explode(), implode(), split(), join(), strtok()
detalii vizând procesarea textelor:
http://php.net/manual/en/refs.basic.text.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Expresii regulate:
conform standardului POSIX
ereg(), ereg_replace(), split() etc.
compatibile cu cele din Perl – PCRE: http://www.pcre.org/
preg_filter(), preg_grep(), preg_match(), preg_split(),…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
testarea și depanarea expresiilor regulate direct pe Web la
http://regex101.com/#PCRE
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Tablouri:
array_count_values(), array_search(), array_filter(),
array_slice(), array_chunk()
array_fill(), array_combine(), array_shift(),
array_reverse(), array_multisort(), array_sum(),…
array_merge(), array_intersect(), array_diff()
array_keys(), array_key_exists()
array_push(), array_pop()
array_map(), array_reduce()
http://php.net/manual/en/book.array.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
/* filtrarea unor valori dintr-un tablou
pe baza unei funcții specificate de programator */
function valoare_mai_mica_decat ($numar) {
// întoarce o expresie de tip funcție
return function ($element) use ($numar) { // abordare funcțională
return $element < $numar;
};
}
$punctaje = array (7, 8, 9, 10, 5, 3, 10, 6, 4);
// folosim funcția predefinită array_filter() asupra tabloului cu punctaje
// pentru a obține valorile mai mici decât o valoare dată (aici: 7)
$valori = array_filter ($punctaje, valoare_mai_mica_decat (7));
print_r ($valori); // obținem: Array ( [4] => 5 [5] => 3 [7] => 6 [8] => 4 )
a se studia și https://wiki.php.net/rfc/closures
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Manipulare a caracterelor:
ctype_digit(), ctype_xdigit(), ctype_print(),
ctype_punct(), ctype_space(),…
ctype_alpha(), ctype_alnum(), ctype_lower(),
ctype_upper()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Dată & timp:
getdate(), localtime(), gettimeofday(), time() etc.
date(), idate(), gmdate(),…
checkdate()
strftime(), strtotime()
vezi și extensiile Calendar, DateTime, HRTime
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Variabile PHP:
empty(), isset(), unset()
strval(), print_r(), var_dump()
serialize(), unserialize()
a se consulta și http://php.net/manual/en/book.var.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Fișiere și directoare:
folosind tipul de date FILE – ca la limbajul C:
fopen(), fread(), fscanf(), fgets(), fwrite(), fprintf(),
fseek(), ftell(), feof(), fclose(), ftruncate(), fstat(),...
file(), copy(), rename(), delete(),
move_uploaded_file(), tmpfile()
file_exists(), filesize(), filetype(), fileperms(),…, stat()
is_dir(), is_file(), is_readable(), is_writeable(),…
chdir(), mkdir(), rmdir()
disk_free_space(), disk_total_space()
de studiat și http://php.net/manual/en/refs.fileprocess.file.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
URL-uri:
urldecode(), urlencode(), parse_url()
base64_decode(), base64_encode()
http_build_query()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Prelucrarea resurselor Web (HTML, JSON):
nl2br(), htmlentities(), htmlspecialchars(), strip_tags()
get_browser(), show_source(), highlight_string(),...
json_encode(), json_decode(), json_last_error()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: funcții predefinite
Alte funcții utile:
die(), eval(), exit(), sleep(), usleep(), time_sleep_until()
uniqid(), sys_getloadavg()
php_info(), php_check_syntax()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: alte facilități
SPL (Standard PHP Library)
acces la maniere standard de prelucrare a datelor
structuri de date definite:
SplStack, SplQueue, SplHeap, SplPriorityQueue,...
iteratori:
ArrayIterator, FilesystemIterator, RegexIterator etc.
www.php.net/spl
www.phptherightway.com/#standard_php_library
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: alte facilități
Rularea din linie de comandă – PHP CLI
sau ca modul Apache
FPM (FastCGI Process Manager)
soluție vizând performanța
de asemenea, PHP 5.4+ oferă un server Web incorporat
invocat prin php –S localhost:8000 –t phpwebapp/
http://php.net/features.commandline.webserver
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: alte facilități
Inter-conectivitatea cu alte tehnologii/platforme
exemple: Java, JavaScript, Lua, .NET
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
(în loc de) pauză
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Care-i suportul oferit de PHP
pentru programarea obiectuală?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Suport pentru definirea claselor via class
și de instanțiere prin operatorul new
obiectele sunt tratate similar referințelor
(o variabilă de tip obiect conține o referință la un obiect
și nu o copie a lui)
http://php.net/manual/en/oop5.intro.php
detalii la http://php.net/language.oop5
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
programare obiectuală – încapsularea
class Student { // specificarea unei clase
// proprietăți (date-membre)
private $an;
private $email;
public $nume;
// metode publice
public function seteazaAn ($unAn) {
$this->an = $unAn;
}
public function furnizeazaAn () {
return $this->an;
}
}
$this este o pseudo-variabilă
specificând o referință la obiectul curent
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
programare obiectuală – încapsularea
class Student { // specificarea unei clase
// proprietăți (date-membre)
private $an;
private $email;
public $nume;
// metode publice
public function seteazaAn ($unAn) {
$this->an = $unAn;
}
public function furnizeazaAn () {
return $this->an;
}
}
// instanțierea unui obiect
$stud = new Student ();
$stud->seteazaAn (2);
$stud->nume = 'Tux';
print_r ($stud);
Student Object
(
[an:Student:private] => 2
[nume] => Tux
[email:Student:private] =>
)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Ca la C++, membrii – proprietăți sau metode –
pot fi declarați ca fiind
publici (public)
privați (private)
protejați (protected)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
programare obiectuală – moștenirea
class StudentDestept extends Student {
private $note; // notele obținute (proprietate)
public function seteazaNote ($n) {
$this->note = (array) $n;
}
public function furnizeazaNote () {
return (array) $this->note;
}
}
$altStud = new StudentDestept ();
// apel de metodă din clasa de bază
$altStud->seteazaAn (2);
// apel de metodă din clasa derivată
$altStud->seteazaNote (
['TW' => 10, 'IP' => 9]
);
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
programare obiectuală – moștenirea
class StudentDestept extends Student {
private $note; // notele obținute (proprietate)
public function seteazaNote ($n) {
$this->note = (array) $n;
}
public function furnizeazaNote () {
return (array) $this->note;
}
}
$altStud = new StudentDestept ();
// apel de metodă din clasa de bază
$altStud->seteazaAn (2);
// apel de metodă din clasa derivată
$altStud->seteazaNote (
['TW' => 10, 'IP' => 9]
);
print_r ($altStud);
StudentDestept Object
(
[note:StudentDestept:private]
=> Array
(
[TW] => 10
[IP] => 9
)
[an:Student:private] => 2
[nume] =>
[email:Student:private] =>
)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Metode speciale:
constructorii sunt numiți __construct()
destructorii sunt denumiți __destruct()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Accesarea proprietăților/metodelor
statice, constante sau suprascrise
::
scope resolution operator (Paamayim Nekudotayim)
www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Accesarea proprietăților/metodelor
statice, constante sau suprascrise
::
self – clasa curentă
parent – clasa părinte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Proprietățile sau metodele declarate cu static
pot fi accesate fără a fi nevoie de instanțierea clasei
pentru exemple, a se vizita
www.php.net/manual/en/language.oop5.static.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: clase
Se permit clase/metode abstracte declarate cu abstract
clasele abstracte nu pot fi instanțiate
orice clasă având măcar o metodă abstractă
este considerată abstractă
metodele abstracte trebuie implementate
în clasa copil (specificată cu extends) a clasei abstracte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interfețe
Specificarea metodelor ce vor fi ulterior implementate
de o clasă (ca la Java)
// interfața privind o machetă de vizualizare (template)
interface iMacheta {
// setează o variabilă ce va fi substituită
// cu valoarea ei în cadrul machetei
public function setVar ($nume, $var);
// furnizează reprezentarea machetei
public function oferaReprez ($macheta);
}
amănunte la http://php.net/manual/en/language.oop5.interfaces.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// clasa implementând interfața
class Macheta implements iMacheta {
// tablou asociativ cu variabilele ce trebuie înlocuite cu valorile lor
private $variabile = array ();
public function setVar ($nume, $var) {
$this->variabile[$nume] = $var;
}
public function oferaReprez ($macheta) {
foreach ($this->variabile as $nume => $val) {
// substituim în machetă numele variabilelor cu valorile lor
$macheta = str_replace ('{' . $nume . '}', $val, $macheta);
}
return $macheta;
}
}
aspecte mai avansate: www.phptherightway.com/#templating
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interfețe & clase predefinite
Traversable
Iterator
IteratorAggregate
Throwable
ArrayAccess
Serializable
Closure
Generator
http://www.php.net/manual/en/reserved.interfaces.php
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interfețe & clase predefinite
// interfața Iterator
Iterator extends Traversable {
// metode ce trebuie scrise de programator
// în clasa ce implementează interfața
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: trăsături de clasă (traits)
Trait
concept preluat de la limbajul Self, oferit de PHP 5.4+
colecție de metode ce pot fi refolosite în cadrul altor clase
www.php.net/manual/en/language.oop5.traits.php
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: trăsături de clasă (traits)
Trait
considerat ca șablon (template C++) al unei clase
față de interfețe, oferă implementări ale metodelor,
nu doar signaturile lor
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// trăsături (comportamente) ce vor fi asociate unor figuri geometrice 2D
trait Rotire {
public function roteste ($unghi) { // implementează rotirea
}
}
trait Mutare {
public function mutaLa ($x, $y) { // mută la alte coordonate
}
}
trait Colorare {
public function coloreaza ($culoare) { // realizează colorarea
}
}
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
abstract class Figura { // clasa figurilor geometrice
public function deseneaza() {
echo ('Am desenat ' . get_class());
}
}
class Dreptunghi extends Figura { // folosește trăsăturile dorite
use Colorare, Mutare, Rotire; // poate fi colorat, mutat, rotit
public function transforma () { // în plus, o transformare specifică
}
}
final class Cerc extends Figura { // clasa Cerc nu mai poate fi extinsă
use Mutare, Colorare; // un cerc poate fi mutat și colorat
const PI = 3.1415265;
public function calculeazaArie () {
}
}
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// instanțiem 2 figuri: un cerc și un dreptunghi
$unCerc = new Cerc ();
$unDreptunghi = new Dreptunghi ();
$unCerc->deseneaza ();
$unCerc->roteste (); // va cauza emiterea unei erori
$unDreptunghi->deseneaza ();
Am desenat Cerc
PHP Fatal error: Call to undefined method Cerc::roteste()
in /home/dMdWgn/prog.php on line 47
php: trăsături de clasă (traits)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: proprietăți speciale
O clasă are asociate proprietăți speciale („magice”)
ce pot fi suprascrise
__construct ()
__destruct ()
__toString ()
__get ()
__set ()
altele la www.php.net/manual/en/language.oop5.magic.php
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: obiecte
Obiectele pot fi „clonate” via clone
Obiectele se pot compara folosind operatorul ===
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: obiecte
Funcții de manipulare a claselor și obiectelor
get_class() va returna numele unui obiect,
instanță a unei clase
get_parent_class() furnizează clasa părinte
din care provine un anumit obiect
method_exists() testează dacă există o metodă
pentru un anumit obiect specificat
class_exists() testează existența unei clase
is_subclass_of() determină dacă există o relație
de moștenire dintre două clase
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: excepții
Similare celor din Java
try, catch, throw
clasa Exception
detalii la www.php.net/manual/en/language.exceptions.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: spații de nume
Folosite pentru evitarea coliziunilor de nume și
pentru efectuarea de alias-uri
declarare cu namespace (prima linie de program)
exemplu: namespace Facebook; // Facebook SDK for PHP
de studiat și www.phptherightway.com/#namespaces
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: spații de nume
Folosite pentru evitarea coliziunilor de nume și
pentru efectuarea de alias-uri
același spațiu de nume poate fi definit în fișiere multiple
pot exista ierarhii de (sub-)spații de nume
namespace ProiectModulSubmodul;
class GenSVG { ... };
referire cu
ProiectModulSubmodulGenSVG
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: spații de nume
Folosite pentru evitarea coliziunilor de nume și
pentru efectuarea de alias-uri
utilizare prin use (eventual specificând un alias)
use ProiectModulSubmodul;
exemple concrete:
use FacebookAuthenticationAccessToken;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: spații de nume
Folosite pentru evitarea coliziunilor de nume și
pentru efectuarea de alias-uri
construcțiile care nu aparțin niciunui spațiu de nume
definit sunt considerate ale spațiului de nume global
namespace ProiectWeb;
function fopen () { // specificarea unei funcții proprii
...
$fisier = fopen (...); // apel de funcție predefinită (din spațiul global)
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Care sunt facilitățile
vizând interacțiunea Web?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interacțiune web
Datele transmite de client (browser) se regăsesc
în tablouri asociative predefinite (și globale):
$_GET[ ] – datele transmise prin GET
$_POST[ ] – datele transmise prin POST
$_COOKIE[ ] – cookie-urile receptate
$_REQUEST[ ] – datele primite de la client
(conținutul lui $_GET, $_POST și $_COOKIE)
$_SESSION[ ] – datele de tip sesiune
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interacțiune web
Alte variabile globale utile:
$_SERVER[ ]
oferă informații privind serverul Web
$_SERVER['PHP_SELF'] indică numele script-ului PHP
$_SERVER['REQUEST_METHOD']
$_SERVER['HTTP_REFERER']
$_SERVER['HTTP_USER_AGENT']
http://www.php.net/manual/en/reserved.variables.server.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: interacțiune web
Alte variabile globale utile:
$_ENV[ ] – datele oferite de mediu (environment)
$_FILES[ ] – datele despre fișierele primite prin upload
http://www.php.net/manual/en/features.file-upload.php
vezi exemplul din arhiva
aferentă prelegerii
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
<!-- un formular Web modelat în HTML -->
<form action="afiseaza.php" method="post">
<input type="text" name="nume" />
<input type="text" name="varsta" />
<input type="submit" value="Trimite" />
</form>
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
<!-- un formular Web modelat în HTML -->
<form action="afiseaza.php" method="post">
<input type="text" name="nume" />
<input type="text" name="varsta" />
<input type="submit" value="Trimite" />
</form>
<?php
// programul afiseaza.php invocat prin POST
if (!$_REQUEST["nume"])
afiseaza ("Nu ați specificat numele!", "eroare");
else
afiseaza ("Numele este" . $_REQUEST["nume"]);
?>
fiecare nume de câmp din formular reprezintă
o cheie a tabloului asociativ $_REQUEST [ ]
(în funcție de metoda HTTP, poate fi regăsit în $_GET sau $_POST)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: sesiuni web
Managementul sesiunilor se poate realiza via
funcțiile session_*() sau recurgând la clasa SessionHandler
SessionHandler implements SessionHandlerInterface {
public bool open ( string $save_path , string $session_name )
public string create_sid ( void )
public string read ( string $session_id )
public bool write ( string $session_id , string $session_data )
public bool gc ( int $maxlifetime )
public bool destroy ( string $session_id )
public bool close ( void )
} http://php.net/manual/en/book.session.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Cum pot fi accesate bazele de date din PHP?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd
Suport nativ pentru o multitudine
de servere/tehnologii de baze de date:
MongoDB – clasele MongoDB MongoClient MongoCursor
MySQL / MariaDB – clasa mysqli
PostgreSQL – funcțiile pg_*()
SQLite – clasa SQLite3
etc.
conexiunile pot fi persistente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – mysql
Funcții/metode pentru acces la MySQL/MariaDB
conectare la server: mysql_connect (), mysql_pconnect ()
selectare (utilizare) bază de date: mysql_select_db ()
execuția unei interogări: mysql_query ()
raportare de erori: mysql_errno (), mysql_error ()
preluarea rezultatelor într-un tablou: mysql_fetch_array ()
multe altele…
actualmente, abordare depreciată – eliminată în PHP 7
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – extensia mysqli
Scop: acces usor și flexibil la MySQL/MariaDB
din programele PHP5+
facilitează mentenabilitatea codului
compatibilitate cu API-ul MySQL
alternativă la funcțiile mysql_*()
documentații disponibile la www.php.net/mysqli
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – extensia mysqli
Abordare procedurală sau orientată-obiect
Viteză mai mare de procesare + securitate
Metode importante:
inițierea unei conexiuni cu serverul MySQL – mysqli ( )
interogări SQL – query ( ), prepare ( ), execute ( )
procesarea răspunsului – fetch ( ), fetch_assoc ( )
închiderea conexiunii – close ( )
etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – exemplu
Pentru început, vom crea un cont MySQL care
să asigure acces autentificat din programele PHP
asupra bazei de date students:
(infoiasi)$ mysql –u root mysql
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE,
DROP ON students.* TO 'tux'@'localhost' IDENTIFIED BY
'p@rola' WITH GRANT OPTION;
Query OK, 0 rows affected (0.11 sec)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – exemplu
Folosind clientul mysql în linia de comandă sau
PHPMyAdmin, creăm tabela students cu structura:
CREATE TABLE IF NOT EXISTS `students` (
`name` varchar(50) NOT NULL default '',
`year` enum('1','2','3') NOT NULL default '1',
`id` int(11) NOT NULL auto_increment,
`age` smallint(2) unsigned zerofill NOT NULL default '00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
AUTO_INCREMENT=1;
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
creăm tabela
pentru administrare facilă, recurgem la instrumentul Web
phpMyAdmin – https://www.phpmyadmin.net/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
generăm
structura
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
confirmarea
creării
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
eventual, inserăm
o înregistrare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – extensia mysqli
// instanțiem obiectul mysqli
$mysql = new mysqli ('localhost', 'tux', 'p@rola', 'students');
if (mysqli_connect_errno ()) {
die ('Conexiunea a eșuat...');
}
// formulăm o interogare și o executăm
if (!($rez = $mysql->query ('select name, year from students'))) {
die ('A survenit o eroare la interogare');
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd – extensia mysqli
// generăm o listă numerotată cu datele despre studenți
// (cod HTML în stil spaghetti – practică nerecomandată)
echo ('<ol>');
while ($inreg = $rez->fetch_assoc ()) {
echo ('<li>Studentul ' . $inreg['name'] .
' este în anul ' . $inreg['year'] . '</li>');
}
echo ('</ol>');
// închidem conexiunea cu serverul MySQL
$mysql->close ();
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
php: bd
În practică, se recurge la un strat de abstractizare
a accesului la sistemul de stocare:
DBAL – DataBase Abstraction Layer
uzual, peste DBAL se va folosi o soluție (i.e. componentă,
bibliotecă,…) de tip ORM – Object-Relational Mapping
exemple de instrumente PHP:
Doctrine – http://www.doctrine-project.org/
Propel – http://propelorm.org/
RedBeanPHP – http://redbeanphp.com/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Instrumente utile pentru dezvoltatorii Web?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
PEAR (PHP Extension and Application Repository)
module ce extind funcționalitățile PHP: http://pear.php.net/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
PECL (PHP Extension Community Library)
extensii oferite de terți: http://pecl.php.net/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente: framework-uri
Facilități:
MV*, șabloane de proiectare,
acces la baze de date (ORM, DAO, ActiveRecord,…),
validare și filtrare a datelor de intrare, autentificare,
controlul accesului, management de sesiuni, caching,
transfer asincron de date (Ajax, WebSocket), templating,
suport pentru servicii Web și API-uri REST, module etc.
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente: framework-uri
CakePHP – http://cakephp.org/
CodeIgniter – http://www.codeigniter.com/
Laravel – http://laravel.com/
Symfony – http://symfony.com/
Yii – http://www.yiiframework.com/
Zend Framework – http://framework.zend.com/
altele enumerate la www.phpwact.org/php/mvc_frameworks
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente: framework-uri
├───application
│ ├───cache
│ ├───config
│ ├───controllers
│ ├───core
│ ├───helpers
│ ├───language
│ ├───libraries
│ ├───logs
│ ├───models
│ └───views
│ └───errors
│ ├───cli
│ └───html
├───system
│ ├───core
│ ├───database
│ │ └───drivers
│ │ ├───mysqli
│ │ ├───pdo
│ │ ├───...
│ └───libraries
│ ├───Cache
│ ├───Javascript
│ └───Session
└───user_guide
avansat
structura de directoare a unei
aplicații Web dezvoltate cu
un framework PHP axat pe MVC
CodeIgniter – codeigniter.com/docs Laravel – laravel.com/docs/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
Managementul dependențelor
dintre biblioteci și pachete
Composer
https://getcomposer.org/
detalii la www.phptherightway.com/#dependency_management
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
avansat
Packagist
depozit de pachete (repository)
gestionate prin Composer
https://packagist.org/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
Medii pre-configurate pentru dezvoltare Web
server Web + PHP + server(e) de baze de date + utilitare
Apache + PHP + MySQL/MongoDB + Perl/Python + ...
AMPPS – http://www.ampps.com/
XAMPP – http://www.apachefriends.org/
Nginx + PHP + MariaDB + Redis + unelte de administrare
WTServer – http://wtserver.wtriple.com/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
medii de dezvoltare (și pentru) PHP „în nori”
Cloud9, Codenvy, Koding, Nitrous,…
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
instrumente
Editarea și execuția online a programelor PHP
Ideone – http://ideone.com/
PhpFiddle – http://phpfiddle.org/
a se experimenta și SQL Fiddle – http://sqlfiddle.com/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
extensii
Hack (Facebook, din 2014)
limbaj de programare pentru HHVM, extinzând PHP
scop: creșterea productivității dezvoltatorului Web
facilități: tipuri de date explicite (type annotations),
generics, expresii λ, colecții (Vector, Map, Set, Pair),
tuple, programare asincronă (async) și altele
http://hacklang.org/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: Wikipedia
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: wikipedia
Scop: oferirea de conținut deschis
via o suită de aplicații Web colaborative – wiki-uri
Wikipedia Foundation
menține și Wiktionary, Wikinews, Wikibooks, Wikiquote,
Wikisource, Wikiversity, Wikispecies,
Wikimedia Commons, Wikidata, Wikivoyage
http://en.wikipedia.org/wiki/Wikimedia_Foundation
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: wikipedia
MediaWiki (sistemul wiki utilizat pentru toate serviciile)
PHP (platforma pe care rulează MediaWiki via HHVM)
MySQL / MariaDB (soluția principală de stocare)
ImageMagick, DjVu, TeX, rsvg, ploticus etc.
(pentru procesare de conținuturi grafice în MediaWiki)
nginx (server Web)
Linux Ubuntu (platforma de exploatare)
se oferă inclusiv un API destinat dezvoltatorilor Web:
www.mediawiki.org/wiki/API:Main_page
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: wikipedia
asigurarea performanței:
Squid și Varnish (proxy & caching pentru conținut HTML)
Memcached (caching interogări asupra bazelor de date)
Apache Lucene (indexare textuală, facilitând căutarea)
Ceph și Swift (soluții de stocare redundantă distribuită)
Linux Virtual Server – LVS (load balancing)
PowerDNS (soluție C++ pentru DNS)
http://meta.wikimedia.org/wiki/Wikimedia_servers
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
studiu de caz: wikipedia
avansat
pentru detalii, a se consulta
www.mediawiki.org/wiki/Presentations
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rezumat
privire generală asupra PHP
____ _ _ ____
( _ ( )_( )( _ 
)___/ ) _ ( )___/
(__) (_) (_)(__)
caracterizare, facilități, instrumente
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
episodul viitor:
dezvoltarea de aplicații Web cu Node.js

More Related Content

PDF
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
PDF
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
PPT
Programare Web - PHP (o prezentare generala)
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
PDF
Web 2020 09/12: Servicii Web. Paradigma REST
PDF
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
PPT
Programare Web - Arhitectura WWW
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Programare Web - PHP (o prezentare generala)
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Programare Web - Arhitectura WWW

What's hot (20)

PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PPT
Programare Web - De la CGI la servere de aplicatii
PDF
Căutarea resurselor Web
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Node.js: aspecte esențiale
PDF
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
PDF
HTML5 în XXX de minute
PPT
Programare Web - Accesul la baze de date prin PHP
PDF
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
PDF
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
PDF
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
PDF
Limbajul JavaScript: o prezentare generală
PDF
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
PPT
Programare Web - Cookie-uri si sesiuni
PDF
O lectie de anatomie Web. Disectia unui document HTML
PDF
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
PDF
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Programare Web - De la CGI la servere de aplicatii
Căutarea resurselor Web
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Node.js: aspecte esențiale
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
HTML5 în XXX de minute
Programare Web - Accesul la baze de date prin PHP
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
Limbajul JavaScript: o prezentare generală
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
Programare Web - Cookie-uri si sesiuni
O lectie de anatomie Web. Disectia unui document HTML
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
Web 2020 01/12: World Wide Web – aspecte arhitecturale
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
Ad

Similar to Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP (20)

PDF
48892700 invatam-php
PDF
Limbajul PHP_Ghid_Eugeniu Gârlă2024g.pdf
PDF
PPTX
Prezentare
PPTX
Prezentare1
PPTX
Pptpw
PPT
Irina Cureraru
PPTX
Pptpw
PPTX
06 php instalation_ro
PPTX
Proiect Programare WEB
PPTX
Proiect Programare WEB
PDF
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
PPT
Lucrul cu fisiere php
PPT
Proiect Programare Web
PPTX
Analiza si evolutia vulnerabilitatilor web
PPT
Prezentare USO - Web Application Integration
PPT
Proiect programare web
PPT
Felicitari personalizate
PDF
Cum instaleziapachesimysql peraspberrypi
DOC
Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHP
48892700 invatam-php
Limbajul PHP_Ghid_Eugeniu Gârlă2024g.pdf
Prezentare
Prezentare1
Pptpw
Irina Cureraru
Pptpw
06 php instalation_ro
Proiect Programare WEB
Proiect Programare WEB
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
Lucrul cu fisiere php
Proiect Programare Web
Analiza si evolutia vulnerabilitatilor web
Prezentare USO - Web Application Integration
Proiect programare web
Felicitari personalizate
Cum instaleziapachesimysql peraspberrypi
Studiu Comparativ Privind API-urile de Procesare RDF Inplementate in PHP
Ad

More from Sabin Buraga (20)

PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
PDF
STAW 04/12: Programare Web: Node.js
PDF
STAW 05/12: Arhitectura navigatorului Web
PDF
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
PDF
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
PDF
STAW 08/12: Programare Web. Suita de tehnologii HTML5
PDF
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
PDF
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
PDF
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
PDF
Sabin Buraga: Dezvoltator Web?! (2019)
PDF
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
PDF
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
PDF
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
PDF
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 04/12: Programare Web: Node.js
STAW 05/12: Arhitectura navigatorului Web
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
Sabin Buraga: Dezvoltator Web?! (2019)
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow

Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP