You are on page 1of 100

Llenguatges de guions de

servidor
Eduard Garca Sacristn, Eduard Latorre Jarque, Montserrat
Madridejos Mora, Ral Velaz Mayo
Adaptaci de continguts: Eduard Garca Sacristn

Llenguatges de guions de servidor

Llenguatges de guions de servidor

Llenguatges de guions de servidor

ndex

Introducci

Resultats daprenentatge

Installaci de servidors daplicacions web


1.1 Anlisi de requeriments . . . . . . . . . . . . . . .
1.1.1 LURL. Accs a recursos . . . . . . . . . .
1.1.2 HTTP: comunicaci entre servidor i client
1.1.3 Contenidors web . . . . . . . . . . . . . .
1.2 Servidors web . . . . . . . . . . . . . . . . . . . .
1.2.1 Servidor web Apache . . . . . . . . . . . .
1.2.2 Installaci dApache . . . . . . . . . . . .
1.2.3 Configuraci bsica dApache . . . . . . .
1.2.4 Configuraci de directoris personals . . . .
1.2.5 Configuraci de mduls . . . . . . . . . .
1.2.6 Control daccessos . . . . . . . . . . . . .
1.3 Llenguatges script . . . . . . . . . . . . . . . . . .
1.3.1 Llenguatges script de client . . . . . . . .
1.3.2 Llenguatges script de servidor . . . . . . .
1.3.3 Installaci de PHP5 . . . . . . . . . . . .
1.4 MySQL . . . . . . . . . . . . . . . . . . . . . . .
1.4.1 Installaci de MySQL a Debian . . . . . .
1.5 phpMyAdmin . . . . . . . . . . . . . . . . . . . .
1.5.1 Installaci del phpMyAdmin . . . . . . .
1.6 Utilitats de prova i installaci integrada . . . . . .
1.6.1 Utilitats de prova . . . . . . . . . . . . . .
1.7 Documentaci . . . . . . . . . . . . . . . . . . . .
1.7.1 Eines dajuda a la creaci . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

9
9
9
10
11
12
13
14
14
15
16
17
18
18
19
20
20
21
21
22
23
24
26
26

Programaci web de servidor


2.1 El llenguatge PHP . . . . . . . . . . . . . .
2.1.1 Funcionament del llenguatge PHP .
2.1.2 Configuraci del llenguatge PHP . .
2.1.3 Eines de programaci per a PHP . .
2.1.4 Sintaxi del llenguatge PHP . . . . .
2.1.5 Tipus de dades del llenguatge PHP .
2.1.6 Operadors . . . . . . . . . . . . . .
2.1.7 Cadenes i matrius en PHP . . . . .
2.1.8 Variables . . . . . . . . . . . . . .
2.1.9 Estructures de control i sentncies .
2.1.10 Funcions . . . . . . . . . . . . . .
2.1.11 Classes i objectes . . . . . . . . . .
2.2 Integraci PHP amb HTML . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

29
29
29
30
31
31
32
33
36
39
40
48
49
50

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

Llenguatges de guions de servidor

2.3

2.2.1 Ls del PHP en formularis . . . .


2.2.2 Tipus de dades en PHP . . . . . .
2.2.3 Variables . . . . . . . . . . . . .
2.2.4 Excepcions en PHP . . . . . . . .
2.2.5 Galetes (cookies) . . . . . . . . .
2.2.6 Encriptaci de dades amb el PHP
Programaci orientada a objectes en PHP
2.3.1 Les classes en PHP . . . . . . . .
2.3.2 Objectes en PHP . . . . . . . . .
2.3.3 Herncia en PHP . . . . . . . . .

Llenguatges de guions de servidor

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

Accs a bases de dades des de PHP


3.1 Gestors de bases de dades ms usats . . . . .
3.2 Gesti de bases de dades amb PHPMyAdmin
3.3 Connexi amb el servidor MySQL . . . . . .
3.4 Tancar la connexi a la base de dades . . . .
3.5 Selecci de la base de dades . . . . . . . . .
3.6 Treball amb la base de dades . . . . . . . . .
3.6.1 Inserci dinformaci . . . . . . . . .
3.6.2 Consulta dinformaci . . . . . . . .
3.6.3 Modificaci dinformaci . . . . . .
3.6.4 Esborrar registres . . . . . . . . . . .
3.6.5 Gesti derrors . . . . . . . . . . . .
3.7 Creaci duna base de dades . . . . . . . . .
3.7.1 Creaci de taules . . . . . . . . . . .
3.8 Mecanismes de seguretat . . . . . . . . . . .
3.8.1 Codificaci de la informaci . . . . .
3.8.2 Accs restringit a pgines . . . . . .
3.8.3 Seguretat a la base de dades . . . . .
3.9 Verificaci i proves . . . . . . . . . . . . . .
3.9.1 Nagios . . . . . . . . . . . . . . . .
3.9.2 Pandora FMS . . . . . . . . . . . . .
3.9.3 Proves de rendiment . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

51
54
57
63
64
65
69
70
72
74

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

79
79
80
82
83
84
84
85
86
88
89
90
90
91
93
93
95
95
97
98
98
99

Llenguatges de guions de servidor

Introducci

Actualment s difcil trobar pgines web que estiguin creades estticament. Els
llenguatges de guions de servidors permeten crear webs duna forma rpida i
flexible, permetent la interacci amb lusuari i utilitzant dades provinents de bases
de dades. PHP s probablemente el llenguatge de guions de servidors ms popular
actualment i, juntament amb la base de dades MySQL i el servidor web Apache,
fan un equip molt potent amb el qual treballar continguts web.
En lapartat Installaci de servidors web veureu el funcionament bsic dun
servidor web i tot el procs des que es fa la petici web fins que els resultats es
mostren per pantalla. Aprendereu a installar un servidor web, un servidor de bases
de dades i el llenguatge de guions de servidor.
En lapartat Programaci web de servidor aprendereu a programar en PHP i la
seva integraci dins del llenguatge de marques HTML. Dins de PHP hi ha una gran
varietat de funcions que fareu servir per realitzar els vostres webs. Per ltim veureu
com fer servir el paradigma dorientaci dobjectes dins dels vostres programes.
En lapartat Accs a bases de dades des de PHP veureu les funcions i mecanismes bsics per treballar amb dades que es troben a una base de dades dins de
programes escrits en PHP. Tamb veureu els diferents mecanismes de seguretat
que podeu aplicar als webs dinmics i com fer verificaci i proves del web.
Per seguir els continguts daquest mdul, s convenient anar fent les activitats i els
exercicis dautoavaluaci i llegir els annexos que sindiquin. Tot i que les unitats
formatives tenen un contingut important des del punt de vista conceptual, sempre
sha procurat donar-los un enfocament prctic en les activitats proposades.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

Resultats daprenentatge

En finalitzar aquesta unitat, lalumne/a:


1. Prepara lentorn de desenvolupament i els servidors daplicacions web installant i integrant les funcionalitats necessries.
Identifica el programari necessari per al seu funcionament.
Identifica les diferents tecnologies emprades.
Installa i configura servidors web i de bases de dades.
Reconeix les possibilitats de processament en els entorns client i servidor.
Afegeix i configura els components i mduls necessaris per al processament
de codi al servidor.
Installa i configura laccs a bases de dades.
Estableix i verifica la seguretat en els accessos al servidor.
Utilitza plataformes integrades orientades a la prova i desenvolupament
daplicacions web.
Documenta els procediments realitzats.
2. Genera documents web utilitzant llenguatges de guions de servidor.
Identifica els llenguatges de guions de servidor ms rellevants.
Reconeix la relaci entre els llenguatges de guions de servidor i els llenguatges de marques utilitzats en els clients.
Reconeix la sintaxi bsica dun llenguatge de guions concret.
Utilitza estructures de control del llenguatge.
Defineix i utilitza funcions.
Utilitza formularis per introduir informaci.
Estableix i utilitza mecanismes per assegurar la persistncia de la informaci
entre diferents documents web relacionats.
Identifica i assegura els usuaris que accedeixen al document web.
Verifica lallament de lentorn especfic de cada usuari.
3. Genera documents web amb accs a bases de dades utilitzant llenguatges de
guions de servidor.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

Llenguatges de guions de servidor

Identifica els sistemes gestors de bases de dades ms utilitzats en entorns


web.
Verifica la integraci dels sistemes gestors de bases de dades amb el
llenguatge de guions de servidor.
Configura en el llenguatge de guions la connexi per a laccs al sistema
gestor de base de dades.
Crea bases de dades i taules en el gestor utilitzant el llenguatge de guions.
Obt i actualitza la informaci emmagatzemada en bases de dades.
Aplica criteris de seguretat en laccs dels usuaris.
Comprova el funcionament i el rendiment del sistema.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

1. Installaci de servidors daplicacions web

Internet sha convertit en la principal eina dintercanvi dinformaci a la societat


actual. La connexi dels ordinadors a les xarxes locals i aquestes xarxes a daltres
de grans dimensions ha possibilitat la comunicaci global dinformaci entre els
ordinadors arreu del mn. Per poder oferir serveis web, els servidors han de tenir
installats una srie de serveis. El servidor web permet lenviament de continguts a
altres ordinadors a travs de la xarxa. Els preprocessadors dhipertext (com PHP)
permeten crear continguts web de forma dinmica. Els servidors de bases de dades
permeten emmagatzemar informaci de forma estructurada que es pot fer servir
per generar contingut web. Aquests serveis han de ser installats i configurats
correctament abans de comenar a crear el contingut web dinmic del nostre web.

1.1 Anlisi de requeriments


Un servidor web s una pea de programari que respon a les peticions dels
navegadors i lliura la pgina per al navegador a travs dInternet. Quan es crida a
una pgina web per ladrea lURL (uniform resource locator), per exemple,
www.ioc.org/index.html, la comunicaci entre el navegador i el servidor s
possible grcies a tres protocols:
TCP(Transmission Control Protocol, protocol de control de transmissi):
s el responsable de fer que el missatge arribi a la destinaci sense errors.
IP(Internet Protocol): s el responsable de fer que el missatge trobi el cam
fins al servidor.
HTTP(Hypertext Transfer Protocol, protocol de transferncia dhipertext):
s el protocol que ha indicat lusuari a lhora de demanar el recurs al
servidor. La primera part dun recurs URL correspon al protocol que
utilitzaran client i servidor per intercanviar dades.
Protocols
El navegador utilitza el protocol
HTTP sobre TCP/IP per
demanar recursos (URL) als
servidors web.

1.1.1 LURL. Accs a recursos


Una adrea URL t la finalitat daccedir a un recurs en un servidor.
Totes les adreces URL tenen diferents parts; agafem com a exemple
http://ioc.xtec.cat:80/educacio/fp-cicles-formatius/cfgs/index.html:
Protocol: sindica abans de :// i en aquest cas s HTTP. Hi ha altres
protocols, com ara FTP o HTTPS.

Llenguatges de guions de servidor

10

Llenguatges de guions de servidor

Adrea del servidor: el lloc don es vol obtenir el recurs (ioc.xtec.cat).


Port: el port del servidor destinat a laplicaci encarregada de gestionar les
peticions HTTP (port del servidor web). En cas de que no estigui especificat
es fa servir el port estndard per HTTP (el port 80).
Ruta fins al recurs: correspon a la ruta a la carpeta dins del servidor web
on es troba el recurs (educacio/fp-cicles-formatius/cfgs/).
Recurs: s el recurs o fitxer que demanem al servidor (index.html).
El que primer fa el navegador s comunicar-se amb un servidor de noms per obtenir
ladrea IP que correspon al nom de la mquina ioc.xtec.cat. Amb aquesta IP es
connecta a la mquina servidor. A continuaci, el navegador crea una connexi
amb ladrea IP del servidor al port 80, que s el port utilitzat per defecte en els
servidors web. Una vegada el client i el servidor estan connectats, parlen fent
servir el protocol HTTP per tal que el client indiqui quins recursos vol del servidor.
El servidor enviar aquests recursos al client a travs de la connexi establerta.

1.1.2 HTTP: comunicaci entre servidor i client


Un cop establerta la connexi entra en joc el protocol HTTP: el navegador envia
una petici al servidor en qu sollicita el recurs index.html (figura 1.1). El
servidor processa aquesta petici i retorna la pgina sollicitada al navegador, que
interpreta les etiquetes HTML i la presenta a lusuari.
Sollicitud client
El client envia, utilitzant el
protocol HTTP, una capalera
amb informaci sobre el recurs
que vol, el mtode que sha
dutilitzar. Desprs de la
capalera, senvia, si nhi ha, la
informaci dusuari.

Figura 1.1. Petici del client dun recurs del servidor

La informaci que el client envia al servidor en la petici s la segent:


El mtode HTTP: lacci que sha de fer.
El recurs a qu sha daccedir (una part de lURL).
La informaci que lusuari envia al servidor.
La informaci que el servidor envia en la resposta t dues parts ben diferenciades:
la capalera i el contingut.

Llenguatges de guions de servidor

11

La capalera cont el codi que indica si la petici sha complert. Tamb


cont el tipus de contingut que enviar al client.
El contingut (text, codi HTML, imatges, etc.) del recurs demanat.
Mtodes GET i POST

La primera part duna petici HTTP s el tipus de mtode, que serveix per
indicar-li el tipus de petici que sha fet. Els mtodes poden ser HEAD, TRACE,
DELETE, OPTIONS , CONNECT, GET i POST. Aquests dos ltims sn els que realment
utilitzareu.
Tant amb GET com amb POST es pot enviar informaci del client al servidor, per
hi ha algunes diferncies.
La informaci enviada amb el mtode GET senvia desprs de ladrea URL, per
exemple: ioc.xtec.cat/index.php?opc=edu&lang=cat. La informaci dusuari sn
les dades que hi ha a partir del smbol ?. Aquest fet implica que la quantitat de
dades que es poden enviar amb GET estigui limitada. A ms a ms, la informaci
que senviat daquesta manera s pblica ja que apareix a la prpia URL, que s
fcilment accessible. Per tant no es pot fer servir per enviar dades privades, com
una clau daccs, per exemple.
Amb el mtode POST, en canvi, la informaci senvia com a part del contingut i
no s visible per a lusuari.

1.1.3 Contenidors web


El problema dels primers servidors web s que solament entregaven recursos
esttics. Rebien una petici, miraven si el recurs estava disponible i lenviaven.
Lavantatge de les pgines web dinmiques s que el contingut es genera dinmicament i, per tant, no existeix esttica i prviament, al servidor.
Els servidors web tan sols saben enviar pgines esttiques. Perqu un servidor web
pugui treballar amb contingut dinmic s necessari installar una altra aplicaci
que ajudi el servidor web a servir contingut dinmic als clients (com sobserva
a la figura 1.2). Les aplicacions encarregades de fer aquesta tasca sanomenen
contenidors web i sn les que permeten treballar amb PHP, Java, ASP, C, Python,
etc. El seu funcionament s transparent pel client.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

12

Llenguatges de guions de servidor

Figura 1.2. Funcionament dun servidor web i dun contenidor

Servidors i contenidors
Els servidors noms saben
processar continguts esttics; per
ser capaos de treballar amb
continguts dinmics, com una
base de dades, necessiten lajuda
de programes externs: els
contenidors.

En la figura 1.2 podeu observar el funcionament dun servidor web juntament


amb el contenidor. Quan el servidor troba un recurs que no s esttic, traspassa
la petici al contenidor web. Aquest contenidor processa la petici, genera
dinmicament una resposta en forma de contingut web i la passa al servidor.
Finalment el servidor envia el contingut al client.

1.2 Servidors web


Els servidors web poden estar implementats dins del kernel del sistema operatiu
o dins de lespai de memria dusuari (com qualsevol altra aplicaci del sistema).
Els servidors web dins del kernel, com ara lIIS de Windows, generalment
sexecuten ms rpid ja que sn part integrant del sistema i poden fer servir tots
els recursos de maquinari directament quan els necessiten (com ara la memria
sense paginar o la memria cau).

Llenguatges de guions de servidor

13

Llenguatges de guions de servidor

Els servidors web que sexecuten en mode dusuari han de demanar al sistema
quan tenen necessitats de memria o recursos de CPU. Aquestes peticions tarden
en realitzar-se i no sempre poden ser satisfetes, ja que el sistema reserva els
recursos pel seu s i lha de repartir entre tota la resta daplicacions en execuci.
Com es pot veure en la figura 1.3 i la taula 1.1, tot i que avui en dia hi ha molts
servidors web diferents, Apache s el servidor web ms popular a Internet amb
un 65% de quota de mercat. La resta del mercat est repartit entre els servidor
daltres companyies, els ms populars dels quals sn IIS de Microsoft i nginx.
Figura 1.3. Servidors web ms populars a Juliol de 2012

Font: http://news.netcraft.com

Taula 1.1. Servidors web ms utilitzats per les pgines web ms visitades dInternet a Juliol de 2012
Desenvolupador Juny 2012

Percentatge

Juliol 2012

Percentatge

Canvi

Apache

448.452.703

64,33%

409.185.675

61,45%

-2.89

Microsoft

95.891.537

13,76%

97.385.377

14,62%

0,87

nginx

72.881.755

10,46%

73.833.173

11.09%

0,63

Google

22.464.345

3,22%

22.931.169

3.44%

0,22

Font: http://news.netcraft.com

1.2.1 Servidor web Apache


El servidor HTTP Apache s un servidor web de codi obert per a plataformes
Unix (BSD, GNU/Linux, etc.), Windows, Macintosh i altres sistemes operatius
que implementa el protocol HTTP i que utilitza el concepte de lloc virtual.

Llenguatges de guions de servidor

14

Llenguatges de guions de servidor

LApache va comenar com una srie de mduls desenvolupats per a un servidor


web en el qual treballaven al Centre Nacional de Supercomputaci dAplicacions
dels Estats Units (NCSA). Un cop va acabar aquest projecte, programadors de
tot el mn van trobar que hi havia la necessitat de tenir un repositori central en
qu es pogus mantenir el codi i els mduls que shavien desenvolupat per poder
continuar treballant en el desenvolupament del servidor. Aix va sorgir la Fundaci
de Programari Apache (Apache Software Foundation).
LApache va ser dissenyat des del principi de forma modular, de manera que el
programari podia ser ampliat per altres desenvolupadors que escrivien petites
parts del codi duna manera fcil. La clau daquest xit s la creaci duna
API (interfcie de programaci daplicacions) modular i una srie de fases ben
definides que travessa cada petici que arriba al servidor. Aquestes fases van des
de la inicialitzaci del servidor (lApache quan llegeix els fitxers de configuraci),
fins a la traducci duna adrea URL en un nom de fitxer de lordinador.

1.2.2 Installaci dApache


La forma general dinstallar paquets als sistemes basats en Debian s:
1

Per installar paquets en


distribucions basades en
Debian GNU/Linux, shan
dexecutar amb drets de
root o amb un usuari
pertanyent al grup sudo.

# sudo aptget install {nom_del_paquet}

Per installar el servidor web heu dinstallar el paquet apache2. Per defecte
el servidor fa servir el directori /var/www per contenir les pgines que servir.
Una vegada installat podeu comprovar el seu funcionament modificant el fitxer
/var/www/index.html i comprovant que es mostra correctament si obriu des del
navegador web ladrea http://localhost tal com es pot veure a la figura 1.4.
Figura 1.4. Comprovaci del funcionament del servidor Apache

1.2.3 Configuraci bsica dApache


Es pot controlar larrencada i aturada del servidor Apache 2 amb un script que es
troba dins de la carpeta /etc/init.d. La sintaxi daquest script s la segent:

Llenguatges de guions de servidor

15

/etc/init.d/apache2 ordre

en el qual ordre pot ser alguna de les segents opcions:


start: per iniciar el servidor
stop: per aturar el servidor
restart: per reiniciar el servidor. Atura i engega el servidor.
Recordeu que heu de treballar amb permisos de superusuari per modificar lexecuci del servidor, aix que feu servir sudo o treballeu com a usuari root. Podeu
comprovar com el servidor satura i engega entrant a la pgina de localhost.
Un cop finalitzada la installaci dApache 2.0, ja en podem treure algunes
conclusions. En primer lloc, podem afirmar que utilitza un disseny modular
(basat en mduls) que sutilitza en moltes de les funcions bsiques del servidor
web. Daltra banda, tal com mostra el procs dinstallaci, sha installat per
defecte el paquet apache2-mpm-worker. Aquest paquet proporciona una versi
molt ms gil i rpida del servidor. De fet, els mduls de multiprocessament
(MPM, multi-processing modules) sn els responsables de connectar amb els
ports de xarxa de la mquina, acceptar les peticions i gestionar les respostes
corresponents. En el cas dels servidors web, el port de funcionament estndard
s el 80. Val a dir que dins del procs dinstallaci per defecte del servidor web
Apache tamb hi ha la installaci del mdul de directori dusuari (userdir), ja que
cada usuari disposar dun espai en el seu espai de disc (home) per crear i desar
les seves pgines web. Amb tot, si b hi ha un ampli ventall de paquets que shan
dinstallar amb Apache per augmentar-ne leficincia, cal no deixar de banda la
descrrega de la documentaci del programari, ja que esdevindr de gran utilitat
per a ladministrador. El paquet a installar s concretament: apache2-doc.
Considerant que, en el cas que haguem installat la documentaci, haurem de
tornar a arrencar el servidor web, tamb podem accedir a la documentaci
mitjanant la pgina principal predefinida en el servidor web Apache. Per tant,
des de qualsevol navegador web ens podrem documentar sobre el funcionament del
servidor web escrivint en la barra de navegaci http://localhost/manual/.

1.2.4 Configuraci de directoris personals


A partir dara, qualsevol fitxer que posem a /var/www sha de visualitzar quan
escrivim en el navegador http://IP/nom_del_fitxer, en qu IP s la IP de la
mquina en la qual hi ha el servidor web installat.
Podeu activar el directori personal dels usuaris de la segent manera:
1. Creeu una carpeta dins del directori personal de lusuari anomenada public_html. Ho heu de fer amb el vostre usuari, no feu servir lusuari root o
sudo.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

16

Llenguatges de guions de servidor

2. Creeu dins de la carpeta /mods-enable dApache uns enllaos simblics cap


als mduls que voleu fer servir, tal com es pot veure a la figura 1.5.
3. Reinicieu el servidor.
En aquest moments el servidor us donar el missatge que podeu veure a la figura
6 quan linicieu. Aix s perqu el servidor no t un nom de domini totalment
qualificat. s normal fins que no ho configureu.
Figura 1.5. Activaci dels directoris dels usuaris

A partir daquest moment lusuari pot ficar el contingut web personal dins de la
carpeta public_html que ha creat al seu directori personal. Aquesta ser accessible
a travs de ladrea http://localhost/nom_usuari. Per defecte mostrar el
fitxer index.html o un llistat dels fitxers del directori si no troba aquest fitxer.

1.2.5 Configuraci de mduls


Apache s un servidor modular. Aix vol dir que en el cos del servidor est
incls nicament les funcionalitats ms bsiques. Les funcionalitats extres estan
disponibles mitjanant els mduls que es poden carregar a lApache. Si el servidor
est compilat per fer servir els mduls dinmicament, aquest es poden afegir en
qualsevol moment. Si no s aix, Apache sha de recompilar per afegir o treure
els mduls. Podeu installar mduls dApache amb lordre apt-get. Per exemple,
per installar el mdul per autentificaci MySQL podeu fer servir la segent ordre:
1

sudo aptget install libapache2modauthmysql

Una vegada installat, el mdul estar disponible a /etc/apache2/mods-available.


Els mduls que sestan fent servir estan a /etc/apache2/mods-enabled.
Per activar un mdul podeu fer un enlla simblic al mdul de mods-available.
1

sudo ln s /etc/apache2/modsavailabe/auth_mysql.load /etc/apache2/modsenabled


/auth_mysql.load

o podeu fer servir lordre:


1

sudo a2enmod auth_mysql

Per desactivar el mdul podeu fer servir:


1

sudo a2dismod auth_mysql

Llenguatges de guions de servidor

17

Llenguatges de guions de servidor

Podeu mirar els mduls que est fent servir Apache mirant directament el contingut del directori de mduls actius (/etc/apache2/mods-enabled) o amb lordre:
1

sudo apache2ctl M | sort

1.2.6 Control daccessos


Per autenticar als usuaris a Apache es pot fer de dues maneres Bsica i Digest. A la
Bsica lusuari introdueix en el navegador web el seu nom dusuari i contrasenya
i senvien al servidor sense xifrar, tamb s la ms senzilla de configurar. A la
Digest lusuari i contrasenya i senvien al servidor xifrats.
Aquests mtodes controlen laccs als recursos, per no xifren la comunicaci
client-servidor un cop sha validat laccs.
Autenticaci bsica

El mdul dApache
mod_auth_basic.

que

controla

aquest

mtode

dautenticaci

Est suportat per tots els navegadors web.


Lusuari i la contrasenya no van xifrades del navegador web al servidor.
Per cada directori que es vulgui protegir a larxiu /etc/apache2/sitesavailable/default, o en el fitxer relatiu al host virtual corresponent, caldr afegir
un bloc <Directory> ...</ Directory>:
1
2
3
4
5
6

<Directory "/var/www/privat">
AuthType Basic
AuthName "Directori privat"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require validuser
</ Directory>

En el qual:
AuthName: indica el nom del domini dautenticaci i s text que se li
presentar a lusuari en el moment dautenticar-se.
AuthType: indica el mtode dautenticaci a usar.
AuthUserFile: indica la ruta a larxiu de text que contindr els noms
dusuari i contrasenyes usades en lautenticaci HTTP bsica.
Require: indica restriccions sobre els usuaris que tenen accs als recursos
especificats. Pot ser valid-user que identifica qualsevol usuari incls a
larxiu de contrasenyes .htpasswd o user <llista dusuaris> que especifica
la llista dusuaris de .htpasswd que poden accedir.

Llenguatges de guions de servidor

18

Llenguatges de guions de servidor

1.3 Llenguatges script


Un llenguatge dscript (guions) s un llenguatge de programaci basat en guions
que sn seguits lnia per lnia per un processador.
Un script s un conjunt dinstruccions que afecten a la pgina web, si aquestes
instruccions afecten al navegador es troben al costat del client i si afecten al
servidor es troben a lordinador servidor. Si penseu en pgines web que heu visitat
recentment que canvien cada vegada que les visiteu o fins i tot que poden canviar
mentre les esteu visitant s possible que utilitzin algun script.
Per exemple, quan busqueu una paraula al buscador Google, aquest utilitza scripts
per suggerir paraules relacionades, per posar anuncis i per trobar el que esteu
buscant. Quan compreu a una botiga virtual, aquesta utilitza scripts per mostrar
els productes i per guardar el vostre carro de compra.
A continuaci veureu les caracterstiques principals dels dos tipus de llenguatges
de guions.

1.3.1 Llenguatges script de client


Els llenguatges script de client sexecuten al sistema en el qual es troba el
navegador web (Firefox, Chrome, Opera, Safari, etc.) de lusuari i poden formar
part del codi HTML del document o trobar-se en arxius adjunts. Els llenguatges
script de client donen interactivitat a les pgines HTML, el codi s lleuger i
al arribar al navegador s interpretat (s a dir, els scripts sexecuten sense una
compilaci preliminar) pel navegador.
El procs dun navegador al sistema del client s:
1. Lusuari demana una pgina web a un servidor des del seu navegador.
2. El servidor cerca la plana i, si la troba, la retorna al navegador de lusuari.
3. El navegador mostra la pgina i al mateix temps executa els scripts de client
per crear la sortida HTML.
Els llenguatges dscript de client modifiquen la pgina web un cop arriben al
navegador. Lavantatge principal dels scripts de client s que al no executar-se
al servidor no consumeixen CPU del servidor ni ample de banda. Sutilitzen per a
tasques que estalvien feina al servidor, com ara validar els camps dun formulari,
o per millorar laparena i la interacci amb lusuari.
El llenguatge de referncia per programar codi en el cant del client s JavaScript.
No es necessita cap llicncia per utilitzar-lo. Al executar-se a la mquina del client
si aquesta s lenta els scripts es poden executar lentament, o fins i tot no sarribaran

Llenguatges de guions de servidor

19

Llenguatges de guions de servidor

a executar si el navegador no entn el llenguatge dscript. A les preferncies dels


navegadors moderns es pot activar o desactivar lexecuci de Javascript. Com que
el codi s a lordinador del client lusuari el pot veure per copiar-lo o manipular-lo.
Amb la tecnologia AJAX i el Javascript, la millora de funcionalitat de les pgines
web al navegador fa que sassemblin cada cop ms a aplicacions normals de
lordinador.

1.3.2 Llenguatges script de servidor


Les aplicacions web desenvolupades amb llenguatges script de servidor sexecuten
en el servidor web i per tant lusuari no t accs al codi font del servidor. El
servidor cont aquests scripts que sn interpretats cada vegada que es rep una
petici duna pgina web. El procs s el segent:
1. Lusuari a travs del seu navegador demana una pgina al servidor.
2. Lscript de servidor s interpretat muntant el contingut a retornar (la pgina
web).
3. Quan lscript acaba, el contingut muntat es retorna al client.
A lesquema de la figura 1.6 sillustra una mquina client que envia una petici de
pgina web a un servidor que executa un script de servidor que requereix consultar
una base de dades. Com a resposta, el client rep una pgina web HMTL.
Figura 1.6. Funcionament dels llenguatges script de servidor

Entre les caracterstiques ms significatives dels llenguatges script de servidor es


troben les de permetre als usuaris tenir comptes individuals i la de comunicar-se
amb bases de dades (MySQL, PostgreSQL, SQL Server, Oracle, etc). Permeten

AJAX
Sn les sigles dAsynchronous
Javascript And Xml, (JavaScript
asncron i XML), un conjunt de
tecnologies que permeten
actualitzar parts duna pgina
web sense haver de tornar-la a
carregar sencera.

Llenguatges de guions de servidor

20

Llenguatges de guions de servidor

un nivell de personalitzaci, privacitat i recuperaci dinformaci molt important.


Les pgines web de comer electrnic i les pgines web socials fan un s intensiu
dels scripts de servidor.
Com a exemples dels principals llenguatges script de servidor tenim el PHP
(pgines amb extensi php) i lASP/ASP.net (pgines amb extensi asp/aspx).
Altres llenguatges sn Perl (pgines amb extensi pl), Java Server Pages (pgines
amb extensi jsp), ColdFusion (pgines amb extensi cfm) i Python (pgines amb
extensi py).

1.3.3 Installaci de PHP5


Hi ha una srie de paquets necessaris per treballar amb PHP i Apache. Els podeu
installar amb apt-get (php5, php5-common, libapache2-mod-php5 php5-cli).
Una vegada installats heu de reiniciar el servidor Apache perqu els canvis siguin
efectius.
De manera opcional podeu installar del PHP5 els paquets referenciats aqu per
donar suport a diferents utilitats. Si sols necessiteu una installaci bsica del
PHP, no fa falta installar els paquets segents, encara que sn recomanables.
php5-gd: biblioteca per a ls dimatges.
libphp-adodb: biblioteca adodb per a PHP.
Smarty: sistema Templates PHP.
php-pear: biblioteques Pear per a PHP.
php5-json: suport per a objectes JSON.
php5-xsl: suport per a XSLT.
php5-odbc: per a connexions odbc.

1.4 MySQL
El MySQL s un sistema de gesti de base de dades relacional. Es calcula que
t ms de 6 milions dinstallacions. El programa sexecuta com un servidor
multiusuari i proporciona accs a una srie de bases de dades.
El projecte de codi font est disponible en els termes de la llicncia pblica general
GNU, tot i que el MySQL s propietat duna empresa amb nim de lucre, que
tamb el patrocina. El MySQL era propietat de la companyia sueca MySQL AB,
una empresa que Sun Microsystems va comprar el 2008. Labril de 2009, Oracle

Llenguatges de guions de servidor

21

Llenguatges de guions de servidor

va comprar Sun i indirectament MySQL AB, un dels principals competidors en


alguns dels seus productes.
El MySQL s utilitzat per una gran quantitat de projectes que requereixen una
base de dades amb funcions completes, sistema de gesti, administraci i s usat,
entre daltres, per WordPress, phpBB, Google i Facebook.
Moltes vegades es fa referncia a la combinaci de Linux, el servidor web Apache,
el contenidor web de PHP i MySQL amb lacrnim LAMP.

1.4.1 Installaci de MySQL a Debian


La forma ms senzilla dinstallar MySQL a Debian s mitjanant apt-get. Heu
dinstallar els paquets mysql-client i mysql-server. Us demanar quina voleu que
sigui la contrasenya de root de MySQL. MySQL t els seus propis usuaris, que
sn independents dels usuaris del sistema Linux. Per tant s important canviar la
contrasenya de root i apuntar-la.
Si ms endavant voleu tornar a canviar la contrasenya ho podeu fer amb lordre:
1

$ sudo mysqladmin u root h localhost password clau

Podeu canviar localhost pel nom de la mquina. Un cop fet aix, ja podeu entrar
al servidor MySQL amb lordre:
1

$ mysql u root p

Per aturar o engegar el servidor de MySQL teniu lscript que el controla a


/etc/init.d/mysql que accepta les tpiques opcions (start, stop, restart).
Assegureu-vos que teniu installat el paquet php5-mysql ja que el necessitareu per
treballar amb MySQL i PHP. Ho podeu comprovar amb lordre:
1

$ dpkg s php5mysql

1.5 phpMyAdmin
El phpMyAdmin s un programa de distribuci lliure en PHP, creat per una
comunitat sense nim de lucre. s una eina molt completa que permet accedir
a totes les funcions tpiques de la base de dades MySQL per mitj duna interfcie
web molt intutiva, tal com es pot veure a la figura 1.7.

Anoteu la contrasenya de
root en un lloc segur, ja que
la necessitareu ms
endavant.

Llenguatges de guions de servidor

22

Llenguatges de guions de servidor

Figura 1.7. Pantalla principal de laplicaci phpMyAdmin

Laplicaci tan sols s un conjunt darxius escrits en PHP que es copien en un


directori del servidor web, de manera que, quan saccedeix a aquests arxius,
trobem una eina que ens permet crear taules, inserir dades a les taules existents,
navegar pels registres de les taules, editar i esborrar, esborrar taules, etc. Fins i tot
executar sentncies SQL i fer una cpia de seguretat de la base de dades.

1.5.1 Installaci del phpMyAdmin


La pgina dinici del projecte s www.phpmyadmin.net. Des daqu podeu baixar
els fitxers de la darrera versi de laplicaci, que desprs heu de collocar en el
nostre servidor web.
Per a distribucions GNU/Linux basades en Debian, tamb es pot fer la installaci
directament des del repositori:
1

$ sudo aptget install phpmyadmin

Durant la installaci us far una srie de preguntes:


Pel que fa al servidor web que far servir heu de contestar: apache2.
Quan us pregunta si voleu configurar la base de dades phpMyAdmin amb
dbconfig-common, heu de contestar que s.
Quan us pregunta la contrasenya de root de MySQL (perqu phpMyAdmin
vol crear les seves taules a la base de dades MySQL)
Us demanar la clau daccs a la base de dades MySQL de lusuari que sha
creat pel phpMyAdmin. Podeu escriure una clau vosaltres o, si la deixeu en
blanc, crear una clau aleatria.

Llenguatges de guions de servidor

23

Abans de poder accedir al panell de control de phpMyAdmin sha de modificar la


configuraci dApache.
Trobeu on s el fitxer apache.conf. Generalment lhaureu de tenir a /etc/phpmyadmin/apache.conf
En qualsevol cas el podeu trobar amb les ordres:
1
2

$ updatedb
$ locate apache.conf

Editeu la configuraci dApache i incloeu-hi el fitxer apache.conf de phpMyAdmin. Per aix obriu (amb drets de root) el fitxer /etc/apache2/apache2.conf i afegiu
al final del fitxer la segent lnia:
1

Include /etc/phpmyadmin/apache.conf

Ara ja podeu reinicar el servidor Apache i anar a ladrea


http://localhost/phpmyadmin per veure si funciona. Haureu de trobar una
pantalla com la que es pot veure a la figura 1.8.
Figura 1.8. Pantalla dinici de phpMyAdmin

1.6 Utilitats de prova i installaci integrada


La installaci i posterior configuraci dun servidor web Apache, dun servidor
de bases de dades MySQL i del llenguatge de programaci PHP s una tasca complexa que noms poden emprendre usuaris amb bons coneixements informtics.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

24

Llenguatges de guions de servidor

Els anomenats paquets LAMP, WAMP o MAMP simplifiquen la tasca dinstallar


i configurar automticament Apache, PHP i MySQL en Linux, Windows o Mac
OS.

La primera lletra fa
referncia al sistema
operatiu: LAMP (Linux),
WAMP (Windows), o MAMP
(Mac OS).

Aquests paquets proporcionen:


Servidor Web Apache
Base de dades MySQL
Llenguatge de programaci PHP
Accessos per larrencada i la parada dels serveis
Facilitats per a la configuraci dels serveis
El paquet XAMPP s un paquet de programari lliure que t versions per Linux,
Windows, Solaris i Mac OS X, a ms doferir els serveis bsics dun paquet
integrat (s a dir, Servidor web Apache + Servidor de bases de dades MySQL
+ Llenguatge PHP). Aix doncs, ofereix:
ProFTPD com a servidor darxius per FTP
Llenguatge Perl
Servidor de dades SQLite
SSL per pgines segures HTTPS (OpenSSL)
Estadstiques daccs (Webalizer)
Podeu
trobar
la
darrera
www.apachefriends.org/en/xampp.html

versi

de

XAMPP

1.6.1 Utilitats de prova


Per comprovar si funciona la installaci dApache2 i PHP:
Creeu un document a larrel en /var/www, anomenat info.php i empleneu-lo amb
la informaci segent:
1

<?php phpinfo ();?>

A continuaci, deseu larxiu.


Proveu el servidor amb el navegador i la direcci del tipus segent:
1

http://localhost/info.php

Llenguatges de guions de servidor

25

Si tot ha anat b, us mostrar una pantalla amb informaci del PHP (veure figura
1.9):
Figura 1.9. Informaci de configuraci de PHP

Per comprovar, un cop acabada la installaci de MySQL, que podeu accedir a


lentorn, entrareu com a usuari root i executareu lordre show Databases. Veureu
les dues bases de dades que installa MySQL i executareu quit per sortir de
lentorn.
A un terminal escriureu la comanda segent:
1
2
3
4
5

elatorre@debian:~$ mysql h localhost u root p


Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 5.1.493 (Debian)

6
7
8
9

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

10
11

Type help; or \h for help. Type \c to clear the current input statement.

12
13
14
15
16
17
18
19
20
21

mysql> show databases;


++
| Database |
++
| information_schema |
| mysql |
++
2 rows in set (0.00 sec)
mysql> quit;

Llenguatges de guions de servidor

Llenguatges de guions de servidor

26

22
23

Llenguatges de guions de servidor

Bye
elatorre@debian:~$

1.7 Documentaci
Durant el procs dinstallaci i configuraci dun servidor daplicacions web,
cal prendre nota de tots els passos que shan seguit, primer en el moment de la
installaci i desprs en el moment de la configuraci, de manera que tingueu una
referncia completa de tot el que heu fet. Conixer els detalls de per qu sha posat
un valor a una variable o a un fitxer de configuraci pot ser molt til en el futur, ja
que s probable que passat un temps us noblideu.
Crear la documentaci s una part important del procs i pot ser molt til quan
apareixen dificultats, incidncies o en manteniments, i es volen saber rpidament
els valors dels parmetres configurats sense haver danar a mirar directament els
arxius de configuraci al servidor.

La documentaci tamb s importat per a la transmissi de coneixement.


Podeu passar la documentaci a altres persones que poden aprendre com
est muntat el servidor sense haver dexplicar res per la vostra part.
Quan es vol replicar en una altra mquina la installaci i configuraci dun
servidor web, la documentaci s una gran ajuda per saber com sha fet i com
est muntat el servidor que ja est en funcionament.
Una bona manera de comenar a fer la documentaci s consultar lndex que heu
seguit per fer la installaci de laplicaci. Es poden analitzar els punts de lndex
que shan anat fent durant el procs dinstallaci, fer-ne un resum i documentar
especialment les parts en les quals es difereix de la guia que sha fet servir per fer
la installaci.

1.7.1 Eines dajuda a la creaci


Una eina til que podeu fer servir per crear la documentaci s un wiki.
Un wiki (del hawai wikiwiki, que vol dir rpid) s un lloc web collaboratiu
que pot ser editat des del navegador pels usuaris. Els usuaris dun wiki poden,
daquesta manera, crear, modificar, enllaar i esborrar el contingut duna pgina
web, de forma interactiva, fcil i rpida. Un dels wikis ms coneguts s la
Viquipdia (Wikipedia) (veure figura 1.10).

Llenguatges de guions de servidor

27

Figura 1.10. Pgina web de la Viquipdia

Els projectes wiki tenen normalment historials amb totes les modificacions que
shan fet dels seus continguts. Daquesta manera sen poden veure totes les
versions i recuperar la informaci eliminada o desfer les edicions incorrectes, ja
que els canvis sapliquen normalment a linstant, sense que cap mena dusuari de
confiana o administrador els hagi revisat i confirmat abans.
Fins ara, laplicaci dels sistemes wiki deuen la seva fama sobretot a la creaci
denciclopdies collectives com la Viquipdia. Per les caracterstiques dels
wikis els converteixen en una eina efectiva per a lescriptura collaborativa, i cada
vegada sn ms usades en empreses com a webs i intranets econmiques i eficaces
per a la gesti del coneixement.
Hi ha molts programaris de wiki diferents (podeu consultar lenlla
http://en.wikipedia.org/wiki/Comparison_of_wiki_software), i que fins i tot
podeu installar al mateix servidor web. Entre els ms recomanables trobem els
programaris DokuWiki i MediaWiki, que fan servir una sintaxi molt similar.
El DokuWiki (veure logo figura 1.11) est llicenciat sota GPL 2 i escrit en el
llenguatge de programaci PHP. Funciona amb arxius de text pla i per tant no
necessita cap base de dades.
Figura 1.11. Logo DokuWiki

Llenguatges de guions de servidor

Llenguatges de guions de servidor

28

Llenguatges de guions de servidor

El MediaWiki (veure logo figura 1.12) s el programari de wiki amb el qual sha
fet la Viquipdia, est llicenciat sota llicncia GPL, est escrit en el llenguatge de
programaci PHP i utilitza MySQL com a gestor de base de dades.
Figura 1.12. Logo MediaWiki

Llenguatges de guions de servidor

29

Llenguatges de guions de servidor

2. Programaci web de servidor

La programaci web del servidor es pot realitzar fent servir diferents eines i
tecnologies. PHP s un dels llenguatges ms populars de programaci web
del servidor, generalment integrat dins de codi web codificat en HTML. En les
darreres versions de PHP es pot fer servir el paradigma dorientaci a objectes.

2.1 El llenguatge PHP


El PHP s un llenguatge de programaci obert que sintegra directament en
pgines HTML. El seu s ha esdevingut gaireb imprescindible en les pgines
que han dutilitzar bases de dades o formularis.
Rasmus Lerdorf s el creador del llenguatge PHP. El 1995 presenta la primera
edici daquest llenguatge amb el nom de Personal Home Page tools amb llicncia
pblica GNU. Per crear el PHP, Rasmus utilitza el codi de programaci C.

Segons els motors


principals de cerca a
Internet, el PHP s el sis
llenguatge ms popular,
desprs del C, Java,
Objective C, C++ i C#.

Tot i que el PHP s un llenguatge ideat i creat per explotar tots els avantatges
dInternet, la seva fisonomia permet fer altres tasques potser no relacionades
directament amb la xarxa de xarxes. Es podria afirmar que el PHP permet al
programador fer tot tipus de programes sense dependre daltres llenguatges.

Per utilitzar el PHP cal disposar dun navegador web, un servidor web
que suporti el PHP i installar un motor PHP a la mquina en qu es
desenvolupar el codi.
El PHP s compatible amb tots els navegadors web actuals (Firefox, Chrome,
Safari, Internet Explorer i daltres). Generalment, tots els provedors de serveis
web suporten el PHP, per cal assegurar-sen llegint les caracterstiques del
producte contractat.

2.1.1 Funcionament del llenguatge PHP


HTML

El codi PHP que escriviu, lhaureu dincrustar dins de codi HTML, concretament
dins les etiquetes <body> del document. Mitjanant unes marques lHTML no
interpretar el codi PHP, el qual, i mitjanant les mateixes marques, sexecutar
en el servidor.

Hypertext markup language. s


el llenguatge de marques que
ms es fa servir per construir
pgines web. Lextensi dels
arxius HTML pot ser .htm o
.html.

Llenguatges de guions de servidor

30

Llenguatges de guions de servidor

El codi segent s un exemple que mostra on es pot collocar el codi PHP dins del
codi HTML:

1
2
3
4
5
6
7
8
9
10

<html>
<head>
<title>Exemple amb PHP</title>
</head>
<body>
<?php
//Aqu s on incloureu el vostre codi en PHP
?>
</body>
</html>

El codi PHP sexecuta en un servidor i mostra el resultat en un client. Visualitzareu


els resultats amb un navegador web. En la figura 2.1 podeu veure el funcionament
del llenguatge PHP i com interactuen el servidor i la mquina dusuari.
Figura 2.1. Funcionament del llenguatge PHP

2.1.2 Configuraci del llenguatge PHP


Quan arrenca el PHP es fa la lectura del fitxer php.ini. Aquest fitxer cont la
configuraci del PHP i es crea durant la installaci del PHP. s possible que
necessiteu fer canvis en el fitxer de configuraci, preneu la precauci de fer-ne
una cpia de seguretat abans de fer aquestes modificacions.
Una inspecci visual del fitxer php.ini us servir per comprendren el funcionament. Depenent del valor de les variables que cont aquest fitxer, el comportament
del PHP variar en la vostra mquina. Podeu comprovar que cada variable que
forma part del fitxer est mpliament comentada, amb comentaris que es marquen
amb un punt i coma.

Llenguatges de guions de servidor

31

Llenguatges de guions de servidor

2.1.3 Eines de programaci per a PHP


El programador de codi PHP haur de fer un exercici previ per escollir lentorn
de programaci que li sigui ms cmode. A causa del bon acolliment daquest
llenguatge de programaci sn molts els programes de desenvolupament de codi
que han anat sorgint en els ltims anys.
Com a desenvolupadors haureu de crear lambient de treball ms adequat si voleu
crear i produir codi de la millor manera possible. Escollir correctament lentorn
de desenvolupament integrat us ser de gran ajuda.
Per decidir leina de treball adequada haureu de tenir en compte diversos factors,
com ara la facilitat ds, la capacitat dintegraci, la possibilitat de treballar alhora
amb altres llenguatges, el suport de leina, el desenvolupament del programari de
leina, la possibilitat real de fer servir utilitats com repositoris i, sobretot, que
vosaltres us trobeu cmodes treballant amb aquest entorn.

Logo de NetBeans

Repositori
Espai en qu semmagatzema informaci duna manera centralitzada. Normalment,
relacionem repositoris amb control de versions, el qual crea un registre dels canvis
efectuats en fitxers, permet recuperar versions antigues i possibilita laccs a les ltimes
modificacions. La importncia de ls de repositoris i control de versions augmenta a
mesura que el projecte de programaci es fa ms complex.

Abans de decidir quin entorn de programaci fareu servir proveu-ne uns quants.
Els programes que ms es fan servir sn el Komodo IDE, NetBeans, Eclipse,
Adobe Dreamweaver o Aptana.

Qu s un IDE?
Un entorn de desenvolupament
integrat (Integrated Development
Environment) s un programa
que aglutina un conjunt deines
de gran utilitat per al
programador.

2.1.4 Sintaxi del llenguatge PHP


Si voleu que sinterpreti el vostre codi s imprescindible que encabiu el codi escrit
en PHP entre dos delimitadors. Aquestes marques sn <?php, que la fareu servir
per indicar linici de codi en llenguatge PHP, i ?>, que utilitzareu per marcar el
final del vostre codi PHP.
Aquestes marques sn les ms genriques i les ms recomanades, per no les
niques que es poden emprar. Aix, per marcar els blocs de codi PHP, tamb
podreu fer servir <? per indicar linici del codi, i ?> per marcar el final; ara b,
per poder fer servir aquestes marques, tingueu en compte que probablement hgiu
de modificar la configuraci del PHP mitjanant el fitxer php.ini.
Els documents XHTML i XML necessiten la forma <?php ?> per interpretar la
codificaci PHP. Gran part de les pgines web dissenyades avui dia fan servir
aquests formats; per tant, si voleu que el vostre codi PHP sinterpreti correctament,
feu servir aquestes marques.

LXHTML i lXML
aconsegueixen nivells alts
de compatibilitat entre
diferents sistemes duna
manera molt senzilla i
segura.

Llenguatges de guions de servidor

32

Llenguatges de guions de servidor

Instruccions

En PHP indicareu el final duna instrucci amb punt i coma. Cada vegada que es
detecti un punt i coma sinterpretar el codi inserit fins a aquell punt.

Podeu fer servir cometes


dobles o simples per indicar
la sentncia, ms endavant
veureu les conseqncies
que sen deriven.

El codi segent s un exemple dinstrucci. Lordre echo mostrar en el vostre


navegador el text escrit entre cometes dobles.
1
2
3

<?php
echo "Aqu teniu una instrucci.";
?>

Les seqncies de control de codi PHP sn les niques que no finalitzen amb punt
i coma.
A continuaci, teniu la manera ms correcta descriure dues instruccions. En
aquest cas apareix <br>. Aquesta s una etiqueta bsica de lHTML que provoca
un salt de lnia.
1
2
3
4

<?php
echo "Aqu teniu una instrucci.";
echo "<br>i aqu una altra instrucci.";
?>

Comentaris

Amb lobjectiu de crear un codi ms entenedor utilitzareu comentaris.


comentaris en PHP els podreu incloure mitjanant:

Els

Dues barres (//) o un coixinet (#) si voleu comentar una lnia


Una barra i un asterisc (/*) per indicar linici de comentari, i un asterisc
i una barra per indicar el final de comentari si voleu comentar ms duna
lnia(/*).
1
2
3
4
5
6
7

No poseu comentaris
aniuats, us causaran
problemes.

<?php
//Si voleu comentar una lnia ho podeu fer daquesta manera...
#...o b daquesta altra.
/* Per si necessiteu comentar
ms lnies aquesta s la millor
manera de ferho! */
?>

s recomanable incloure comentaris en el vostre codi. s important per ajudarvos en la comprensi del codi i tamb per recordar els motius del disseny del codi,
per tamb s important per fer-lo ms entenedor a la resta de programadors.

2.1.5 Tipus de dades del llenguatge PHP


El PHP s un llenguatge de programaci que no obliga a declarar prviament el
nom de les variables que sutilitzaran ni el seu tipus (s diu que s un llenguatge

Llenguatges de guions de servidor

33

Llenguatges de guions de servidor

sense tipus o no tipat). Ara b, tot i que existeixen els tipus de dades en PHP
aquests no es comproven. Una variable pot emmagatzemar dades del tipus enter,
decimal, lgic, cadenes de text, colleccions o objectes. Aix si emmagatzemeu a
una variable una cadena de text i ms endavant li assigneu una variable entera, no
donar error.
Quan treballeu amb objectes aneu amb compte, ja que les diferents versions del
PHP no es comporten igual amb aquest tipus de dades.

2.1.6 Operadors
Els operadors us permetran fer accions dins el codi. Podreu canviar i assignar
valors, canviar ladrea del codi, condicionar lexecuci de blocs de codi i, en
definitiva, dotar de la complexitat necessria els vostres programes per aconseguir
un objectiu.
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els
quals sactua.
1. Loperador unari opera sobre un valor i el que pot fer en aquest valor s
negar-lo, incrementar-lo o decrementar-lo, entre altres coses.
2. Loperador binari opera sobre dos valors i permet sumar-los, restar-los o
comparar-los.
3. Loperador ternari permet escollir entre dues expressions en funci duna
altra.
Teniu en compte la precedncia dels operadors.
En la taula 2.1 apareixen els operadors aritmtics de qu disposeu. Teniu en
compte que la divisi retornar un valor en coma flotant si el resultat de la divisi
no s exacte.
Taula 2.1. Operadors aritmtics
Operador

Nom

Acci

Tipus doperador

-$valor

Negaci

Oposat de $valor

Operadors daritmtica

$valor + $valorB

Addici

Suma de $valor i
$valorB

Operadors daritmtica

$valor - $valorB

Subtracci

Diferncia entre $valor i


$valorB

Operadors daritmtica

$valor * $valorB

Multiplicaci

Producte de $valor i
$valorB

Operadors daritmtica

$valor / $ valorB

Divisi

Quocient de $valor i
$valorB

Operadors daritmtica

$valor % $valorB

Mdul

Resta de $valor dividit


per $valorB

Operadors daritmtica

Programaci orientada a
objectes i PHP
Des de la versi 5 de PHP, aquest
es pot fer servir com llenguatge
orientat a objectes, tot i que el
programador no est obligat a fer
servir aquesta metodologia de
programaci.

Llenguatges de guions de servidor

34

Llenguatges de guions de servidor

En la taula 2.2 es presenten els operadors dassignaci. Loperador bsic dassignaci s ligual. Amb loperador igual la variable de lesquerra rep el valor de
lexpressi de la dreta.
Taula 2.2. Operadors dassignaci
Operador

Nom

Acci

Tipus doperador

$valor = $valorB

Assignaci

Assignar el contingut de
$valorB a $valor

Operadors dassignaci

$valor += $valorB

Assignaci

Sumar el contingut de
$valorB i $valor i
emmagatzemar-lo a
$valor

Operadors dassignaci

$valor.= text

Assignaci

Concatenar la cadena
de la dreta a la de
lesquerra

Operadors dassignaci

Per activar o desactivar bits individuals dun enter fareu servir els operadors de
bit. En la taula 2.3 es mostren els operadors de bit de qu disposeu.
Taula 2.3. Operadors de bit
Operador

Nom

Acci

Tipus doperador

$valor & $valorB

Els bits que sn actius


tant en $valor com en
$valorB sn activats.

Operadors de bit

$valor | $valorB

Els bits que sn actius


en $valor o en $valorB
sn activats.

Operadors de bit

$valor $valorB

XOR

Els bits que sn actius


en $valor o $valorB,
per no en tots dos, sn
activats.

Operadors de bit

$valor

No

Es canvia lestat dels


bits.

Operadors de bit

$valor <<$valorB

Desplaament a
lesquerra

Desplaa els bits de


$valor, $valorB
posicions a lesquerra.

Operadors de bit

$valor >>$valorB

Desplaament a la dreta

Desplaa els bits de


$valor, $valorB
posicions a la dreta.

Operadors de bit

Per comparar valors el llenguatge PHP disposa doperadors de comparaci. En


la taula 2.4 teniu els casos possibles que podeu utilitzar.
Taula 2.4. Operadors de comparaci
Operador

Nom

Acci

Tipus doperador

$valor == $valorB

Igual

TRUE si $valor s igual


a $valorB.

Operadors de
comparaci

$ valor === $ valorB

Idntic

TRUE si $valor s igual


a $valorB i sn del
mateix tipus.

Operadors de
comparaci

$ valor!= $ valorB

Diferent

TRUE si $valor no s
igual a $valorB.

Operadors de
comparaci

$ valor <> $ valorB

Diferent

TRUE si $valor no s
igual a $valorB.

Operadors de
comparaci

Llenguatges de guions de servidor

35

Llenguatges de guions de servidor

Taula 2.4 (continuaci)


Operador

Nom

Acci

Tipus doperador

$ valor!== $ valorB

No idntic

TRUE si $valor no s
igual a $valorB o no sn
del mateix tipus.

Operadors de
comparaci

$ valor < $ valorB

Ms petit que

TRUE si $ valor s ms
petit que $ valorB.

Operadors de
comparaci

$ valor > $ valorB

Ms gran que

TRUE si $ valor s ms
gran que $ valorB.

Operadors de
comparaci

$ valor <= $ valorB

Ms petit o igual que

TRUE si $ valor s ms
petit o igual que $
valorB.

Operadors de
comparaci

$ valor >= $ valorB

Ms gran o igual que

TRUE si $ valor s ms
gran o igual que $
valorB.

Operadors de
comparaci

En la taula 2.5 teniu els operadors dincrement i decrement, operadors que


resulten de gran utilitat i simplifiquen fora el codi.
Taula 2.5. Operadors dincrement/decrement
Operador

Nom

Acci

Tipus doperador

++$valor

Preincrement

Incrementa $valor una


unitat, i desprs retorna
$valor.

Operadors
dincrement/decrement

$valor ++

Postincrement

Retorna $valor i
incrementa $valor una
unitat.

Operadors
dincrement/decrement

$valor

Predecrement

Decrementa $valor una


unitat i retorna $valor.

Operadors
dincrement/decrement

$valor

Postdecrement

Retorna $valor i
decrementa $valor una
unitat.

Operadors
dincrement/decrement

El PHP us proporciona operadors de lgica. En la taula 2.6 teniu les possibilitats


de qu disposeu. Els operadors I i O estan repetits perqu poden operar amb
precedncies diferents.
Taula 2.6. Operadors de lgica
Operador

Nom

Acci

Tipus doperador

$valor and $valorB

TRUE si $valor i $valorB


sn TRUE.

Operadors de lgica

$valor or $valorB

TRUE si $valor o
$valorB sn TRUE.

Operadors de lgica

$valor xor $valorB

XOR

TRUE si $valor o
$valorB sn TRUE, per
no tots dos alhora.

Operadors de lgica

! $valor

No

Inverteix el contingut de
$valor

Operadors de lgica

$valor && $valorB

TRUE si $valor i $valorB


sn TRUE.

Operadors de lgica

$valor || $valorB

TRUE si $valor o
$valorB sn TRUE.

Operadors de lgica

Llenguatges de guions de servidor

36

Llenguatges de guions de servidor

Les matrius poden rebre lacci doperadors especials. En la taula 2.7 teniu els
operadors de matrius que podeu utilitzar.
Taula 2.7. Operadors de matrius
Operador

Nom

Acci

Tipus doperador

$ valor + $ valorB

Uni

Uni de $ valor i $
valorB.

Operadors de matrius

$ valor == $ valorB

Igualtat

TRUE si $valor i $valorB


tenen les mateixes
parelles clau/valor.

Operadors de matrius

$ valor === $ valorB

Identitat

TRUE si $valor i $valorB


tenen les mateixes
parelles clau/valor en el
mateix ordre i dels
mateixos tipus.

Operadors de matrius

$ valor!= $ valorB

No-identitat

TRUE si $valor no s
igual a $valorB.

Operadors de matrius

$ valor <> $ valorB

No-identitat

TRUE si $valor no s
igual a $valorB.

Operadors de matrius

$ valor!== $ valorB

No-identitat

TRUE si $valor no s
idntic a $valorB.

Operadors de matrius

2.1.7 Cadenes i matrius en PHP


Una cadena de text s una successi de carcters. El tipus al qual pertanyen les
cadenes s lstring, el qual no t inicialment suport per a Unicode, problema que
se solucionar amb funcions predefinides del mateix llenguatge.
En PHP les cadenes tenen una longitud mxima marcada per la memria de la
mquina en qu sexecuti el codi. Podreu especificar les vostres cadenes de quatre
maneres diferents:

Podeu anar provant els


diferents codis dels
materials simplement
afegint el codi dins dun
fitxer amb extensi .php que
estigui dins de la carpeta
del servidor web i obrir-lo
des dun navegador.

1. Amb cometes simples. Es considera que aquesta s la manera ms senzilla


dindicar una cadena, per haureu de tenir en compte que no sinterpretaran les
variables i les seqncies de sortida. Aix, en lexemple segent, no es mostrar
el valor de la variable $nom ni tampoc es far el salt de lnia amb \n. Fixeu-vos,
per, que s que sinterpreta el salt de lnia marcat amb letiqueta dHTML <br>.
1
2
3
4
5
6

Cometes dobles
Vigileu amb les cometes dobles
ja que, de vegades, quan copiem
el codi i lenganxem a leditor es
copia un carcter de cometes
diferent. Per exemple, si copieu
un codi des del Microsoft Office,
tindreu un carcter de cometes
diferent que no ser interpretat
pel PHP.

<?php
$nom=Abeeku;
echo Hola, company!<br>
Em dic $nom.\n
Qu et sembla aquest crdit?;
?>

2. Amb cometes dobles. Fent servir cometes dobles per marcar cadenes podreu
mostrar el valor de les variables. El text incls entre cometes sinterpretar amb
lHTML, per tant, seran les etiquetes dHTML les que es podran interpretar.
Escrivim un text que contingui una variable i una seqncia descapament en
lexemple segent. Comprovareu que es mostrar el contingut de la variable.

Llenguatges de guions de servidor

1
2
3
4
5
6

37

<?php
$nom=Abeeku;
echo "Hola, company!<br>
Em dic $nom.\n
Qu et sembla aquest crdit?";
?>

3. Utilitzant sintaxi heredoc. Quan necessiteu escriure un text molt llarg s


recomanable que feu servir aquesta forma. Utilitzant aquesta sintaxi millorareu la
velocitat del codi i facilitareu la lectura. En lexemple segent podeu veure com
sutilitza la sintaxi heredoc. La marca que es fa servir per identificar el text s <<<
seguida del nom que hi vulguem donar, en aquest cas FRASE, i a continuaci
la cadena. Per indicar la finalitzaci dintroducci de text fareu servir el nom
identificatiu que heu posat abans seguit de punt i coma (;). Heu de tenir en compte
que el nom que doneu al bloc de text no es pot trobar dins el mateix text i sempre
ha destar escrit al comenament de la lnia.
1
2
3

<?php
$nom=Abeeku;
$Familia=Informtica;

4
5
6
7
8
9
10

echo <<<FRASE
Hola!<br>
Em dic $nom.
Estudio $Familia.
FRASE;
?>

4. Utilitzant sintaxi nowdoc. A partir de la versi 5.3.0 del PHP sinclou el


suport per a nowdoc, per tant, no el feu servir si teniu una versi anterior. Aquesta
sintaxi resulta molt til quan heu de plasmar un bloc llarg de text que no necessita
ser processat. s un mtode de treball amb cadenes molt rpid i gil. Per fer
servir sintaxi nowdoc heu dencabir el text entre dues marques especials. La
marca dinici s <<< seguida immediatament del nom que voleu posar escrit
entre cometes simples. Per tancar el bloc de codi heu de tornar a escriure el nom
identificatiu, per ara sense les cometes simples seguit de punt i coma (;). El nom
que utilitzeu per marcar el bloc de text no ha daparixer en el mateix text. En
lexemple segent, el valor de les variables no apareixeria en el navegador.
1
2
3

<?php
$nom=Abeeku;
$Familia=Informtica;

4
5
6
7
8
9
10

echo <<<FRASE
Hola!<br>
Em dic $nom.
Estudio $Familia.
FRASE;
?>

Matrius

Les matrius resulten molt tils en lmbit de treball del llenguatge PHP. De fet, en
tots els llenguatges de programaci les matrius sn una pea fonamental, sense la
qual seria molt difcil resoldre determinades situacions.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

38

Una matriu s una collecci de valors.


bidimensionals i multidimensionals.

Llenguatges de guions de servidor

Poden ser unidimensionals,

Vectors o matrius
Tot i que es parli de manera genrica de matrius cal aclarir que les matrius sn
realment arrays bidimensionals. Els arrays unidimensionals sn els vectors i els arrays
multidimensionals sn arrays de ms de dues dimensions. Durant el desenvolupament de
la matria es treballar generalment amb arrays duna dimensi.

Per accedir als valors que els arrays contenen cal utilitzar el delimitador [ ]. En
lexemple segent es mostra com es crea un vector:
1
2
3

$credit[4]="Fonaments de Programaci";
$credit[5]="Implantaci dAplicacions Web";
$credit[10]="Sntesi";

En aquest sentit PHP s un llenguatge ms flexible i menys estricte i estructurat,


que daltres com ara C o Java. No cal que definiu larray prviament. Heu creat
un vector, per tant, duna dimensi que cont alguns dels noms de crdits del cicle
que esteu estudiant. Tot i que no sha utilitzat, el vector comena en la posici 0.
Per poder-vos moure utilitzareu un subndex indicat entre [ ].
Larray pot crixer dinmicament, per exemple, si voleu adherir el crdit 7 noms
cal que feu:
1

$credit[7]="Relacions en lmbit de Treball";

Si no utilitzeu un subndex per treballar amb el vector, aquest el generar


automticament. En lexemple segent es crea un vector que contindr els dies
de la setmana i els traur per pantalla:
1
2
3
4
5
6
7
8

<?php
$dies[]="Dilluns";
$dies[]="Dimarts";
$dies[]="Dimecres";
$dies[]="Dijous";
$dies[]="Divendres";
$dies[]="Dissabte";
$dies[]="Diumenge";

9
10

Count s una funci que


retorna la longitud del
vector.

11
12
13
14

for($i=0 ; $i<count($dies) ; $i++)


{
echo $dies[$i];
echo "<br>";
}

15
16

?>

Matrius associatives

Les matrius associatives permeten al programador una flexibilitat i velocitat en


la generaci de codi molt importants. En PHP les matrius associatives shan
convertit en una eina potent de la qual sempre es depn.

Llenguatges de guions de servidor

39

Llenguatges de guions de servidor

Una matriu associativa s una matriu que permet accedir als valors que
emmagatzema mitjanant un subndex de tipus cadena. s a dir, s un array
en el qual les posicions es poden especificar per strings (en comptes dels
ndexs).
En lexemple segent es crea la fitxa dun alumne sense utilitzar una matriu
associativa:
1
2
3
4

$dades[0]="Omar";
$dades[1]="12345678A";
$dades[2]="1956";
$dades[3]="ASIX";

Segons lexemple anterior, si voleu recuperar alguna dada haureu de recordar el


subndex que us retornar el valor que necessiteu; per exemple, per mostrar el DNI
haureu descriure:
1

echo $dades[1];

En les matrius associatives tot s ms fcil. Lexemple segent mostra com es pot
crear una fitxa personal i treure el DNI per pantalla:
1
2
3
4

$dades[nom]="Omar";
$dades[dni]="12345678A";
$dades[naixement]="1956";
$dades[cicle]="ASIX";

5
6

echo $dades[dni];

Tal com es pot veure s molt ms fcil recordar lndex duna posici per un nom
que no per un nmero.
Hi ha una altra manera de generar matrius associatives. Lexemple segent t un
resultat idntic a lanterior:
1
2
3
4

$dades=array(nom=>"Omar",
dni=>"12345678A",
naixement=>"1956",
cicle=>"ASIX");

2.1.8 Variables
El PHP s un llenguatge que garanteix dinamisme a les vostres pgines web. Poder
fer que determinats valors controlats per vosaltres canvin en funci del codi es
tradueix en un abandonament de la rigidesa del codi.

Una variable s un identificador al qual podreu assignar un valor, valor que


podr canviar al llarg del temps.

Les matrius associatives les


utilitzareu moltssim quan
treballeu amb variables
predefinides.

Llenguatges de guions de servidor

40

Llenguatges de guions de servidor

Per representar una variable caldr escriure el smbol del dlar seguit pel nom que
vulgueu posar. En el moment de donar nom a una variable heu de tenir en compte
que es diferencien majscules i minscules i que haur de comenar amb una lletra
o carcter de subratllat.
En PHP, a diferncia de molts altres llenguatges, no cal declarar una variable abans
dutilitzar-la. El smbol del dlar s el que marca que es tracta duna variable.
1
2
3
4
5
6
7
8
9
10
11
12

<?php
$Nom=Essien;
$Familia=Informtica;
$Cicle="CFGS Administraci de Sistemes Informtics en la Xarxa";
$Modul = "Implantaci dAplicacions Web";
$Durada= 180;
echo "Hola $nom!<br>
Benvingut als estudis d$Familia!!!<br>
Cicle: $Cicle<br>
Mdul: $Modul<br>
Durada: $Durada hores";
?>

Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i
la variable $Durada emmagatzema lenter 180, mentre que la resta de variables
emmagatzemaran cadenes.
Les variables sassignen per valor per defecte, per si voleu assignar un valor per
referncia ho haureu dindicar fent servir el smbol & tot just davant de la variable.

2.1.9 Estructures de control i sentncies


Quan comenceu a analitzar un problema i inicieu el procs de plasmar en un paper
all que us passa pel cap, de seguida us adoneu que necessiteu ms eines, amb les
sentncies no en teniu prou per resoldre el problema.

Les estructures de control proporcionen dinamisme al vostre codi,


i us brinden loportunitat dindicar quines accions podeu prendre en
determinades situacions.
El PHP us permet utilitzar un ampli ventall destructures de control, les quals
sn comunes en la gran majoria de llenguatges de programaci. Si teniu ms
duna sentncia per executar dins una estructura, les haureu dagrupar entre claus.
Si noms heu dexecutar una sentncia dins les estructures, ls de les claus s
opcional.

Estructura de control: if, else, elseif

Mitjanant lestructura if podreu condicionar lexecuci dun codi. En cas que


la condici que sanalitza sigui certa, sexecutar un bloc de codi indicat. En la
figura 3.2 podeu veure el diagrama daquesta estructura.

Llenguatges de guions de servidor

41

Figura 2.2. Estructura if else

En el cas segent es condiciona lexecuci dun bloc de codi en funci del valor
de la variable $nom. Si $nom s igual a Rashid sexecutar el codi que hi ha entre
les claus.
1
2
3
4
5
6
7

<?php
$nom=Rashid;
if($nom==Rashid)
{
echo"Ests dins el codi per que es complia la condici";
}
?>

De vegades, resulta molt til controlar els casos en qu no es compleix la condici


donada i provocar que sexecuti un codi alternatiu.
1
2

<?php
$ampolla=buida;

3
4
5
6
7
8
9
10
11
12

if($ampolla==plena)
{
echo "Lampolla s plena";
}
else
{
echo "Lampolla s buida";
}
?>

Lestructura if us pot donar ms alternatives a lhora de crear condicionants en el


vostre codi. Per exemple, davant lexecuci dun codi alternatiu podeu provocar
el compliment duna condici.
1
2
3
4
5
6

<?php
$nom=Nafisa;
if($nom==Nafisa)
{
echo "Ests dins el codi per qu es compleix la condici";
}

Llenguatges de guions de servidor

Llenguatges de guions de servidor

42

7
8
9
10
11
12
13
14
15

Llenguatges de guions de servidor

elseif($nom==Layla)
{
echo "Ests dins el codi de la segona condici";
}
else
{
echo "No es compleix cap de les dues condicions";
}
?>

Igual que en la majoria de llenguatges de programaci, podeu aniuar-hi codi.


1
2
3

<?php
$plou=si;
$paraigua=no;

4
5
6
7
8
9
10
11
12
13
14

if($plou==si)
{
if($paraigua==si)
echo "No em mullo!";
else
echo "Mestic mullant perqu no porto paraigua!";
}
else
echo"No cal que porti paraigua perqu no plou.";
?>

Estructura de control: while

Fareu servir lestructura while si us trobeu amb la necessitat de repetir una


seqncia dinstruccions durant un perode de temps controlat per una variable.
En la figura 2.3 podreu veure el diagrama daquesta estructura.
Figura 2.3. Lestructura while

Lexemple segent mostra com el while us pot ser molt til per crear un codi que
generi la taula de multiplicar del nmero 7:

Llenguatges de guions de servidor

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

43

<?php
$multiplicand=7;
$multiplicador=0;
$resultat=0;
echo "Taula del $multiplicand:<br>";
while($multiplicador<=10)
{
$resultat=$multiplicand*$multiplicador;
echo"$multiplicand x $multiplicador = $resultat<br>";
$multiplicador=$multiplicador+1;
}
?>

Estructura de control: do while

Lestructura do la utilitzareu en els casos en qu sempre shagin de fer unes


accions i, en finalitzar aquestes accions, es comprovi un estat que deixar pas a
una repetici del codi anterior o b forar la sortida del bucle. En la figura 2.4
podeu veure el diagrama daquesta estructura.
Figura 2.4. Lestructura do

La sintaxi de lestructura do inclou un while, que sencarrega de comprovar una


expressi.
En lexemple segent es mostra en el navegador el nmero de lnia corresponent
mentre no arribem a la lnia 10. Fixeu-vos que la comprovaci del valor de la
variable es fa una vegada sha produt una iteraci.
1
2
3
4
5
6

<?php
$linia=1;
do
{
echo "Lnia $linia<br>";
$linia=$linia+1;

Llenguatges de guions de servidor

Llenguatges de guions de servidor

44

7
8
9

Llenguatges de guions de servidor

}
while($linia<10);
?>

Estructura de control: for

Lestructura for utilitza tres expressions en la seva implementaci. La primera


expressi sexecuta en iniciar-se el codi i dna un valor inicial a una variable. Cal
remarcar que aquesta variable tindr un paper important en el desenvolupament
del codi, ser la variable que permetr el control del bucle. La segona expressi s
la condici que ha de ser favorable per poder executar el bucle de codi. La tercera
expressi indica una acci que cal dur a terme quan finalitzi el bloc de codi. En la
figura 2.5 podeu veure el diagrama daquesta estructura.
Figura 2.5. Lestructura for

En lexemple segent la variable $edat sinicialitza amb valor 0 i, mentre tingui


un valor ms petit que 18, es permetr lexecuci del bloc de codi que hi ha sota
el control del for. Quan finalitzi el bucle, la variable $edat sincrementar en una
unitat.
1
2
3
4
5
6
7

<?php
for($edat=0 ; $edat<18 ; $edat=$edat+1)
{
echo "Encara ets menor dedat, ja que tens $edat anys!<br>";
}
echo "Ja no ets menor dedat!";
?>

Llenguatges de guions de servidor

45

Qualsevol de les tres expressions que formen part de lestructura for poden ser
formades per ms duna expressi i, fins i tot, poden restar buides.
No cal que les tres expressions del for tinguin valor, les podeu deixar buides (per
respectant els punt i coma). Lexemple segent mostrar una sortida idntica a
lexemple anterior, per ara dins el for noms hi ha una expressi. La declaraci
i inicialitzaci de la variable sha fet fora del bucle i, a ms a ms, augmentareu
una unitat la variable $edat dins el mateix codi del bucle.
1
2
3
4
5
6
7
8
9

<?php
$edat=0;
for( ; $edat<18 ; )
{
echo "Encara ets menor dedat, ja que tens $edat anys!<br>";
$edat=$edat+1;
}
echo "Ja no ets menor dedat!";
?>

La sentncia break

La sentncia break provoca la sortida de qualsevol estructura de control, trencant


aix un bucle. Penseu per exemple un bucle que cerca un element dun array. Una
vegada trobat, s ineficient acabar de recrrer la resta de larray.
Podeu indicar a aquesta sentncia quantes estructures de control voleu saltar.
En lexemple segent el break provoca la sortida de dos blocs de codi:
1
2
3
4
5
6
7
8
9
10

<?php
while($edat<20)
{
for( ; ; $edat=$edat+1)
{
if($edat==18)
{
echo "Ara ja tens $edat anys!<br>";
break 2;
}

11

echo "Encara ets menor dedat, ja que tens $edat anys!<br>";

12

13
14

echo "Aquesta lnia no sortir per pantalla!";

15
16

17
18
19

echo "Ja no ets menor dedat! Tens $edat anys!";


?>

La sentncia continue

La sentncia continue provoca el salt de les lnies de codi que restin per executar
dins un bucle i continua executant la primera lnia de codi que es trobi fora del
bucle.
s possible indicar quants bucles se saltar aquesta sentncia.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

46

Llenguatges de guions de servidor

En lexemple segent, la continue forar la sortida del bloc de codi encapalat


per if.
1
2
3
4
5
6
7
8
9
10
11
12
13

<?php
$edat=0;
$nom=Minna;
while($edat<=21)
{
if($edat==21)
{
echo "<br>Felicitats! Ja tens $edat anys, $nom! ";
echo "Tens el carnet adequat?";
$edat=$edat+1;
continue;
echo "Aquesta lnia mai sexecutar";
}

14

echo "Ara tens $edat anys! Si no tens 21 anys no


podrs conduir una moto de gran cilindrada, $nom!<br>";
$edat=$edat+1;

15
16
17
18
19

}
?>

Lestructura switch

Lestructura de control switch executa un codi determinat en funci del valor duna
variable. En la figura 2.6 podeu veure el diagrama daquesta estructura.
Figura 2.6. Lestructura switch

Per implementar lestructura switch caldr fer servir la sentncia case seguida de
dos punts, la qual sencarregar de comparar el valor de la variable que utilitza
el switch amb el valor que identifica un codi determinat, i la sentncia break, que
forar la sortida del bloc de codi. Opcionalment es podr utilitzar la sentncia
default seguida de dos punts, que ens permetr executar un codi en cas que no es
compleixi cap condici certa dins el switch.

Llenguatges de guions de servidor

47

En lexemple segent lestructura switch utilitza la variable $opcio. En cas que


la variable $opcio valgui 0 sortir un missatge per pantalla, si el valor dopci fos
1 el missatge seria un altre, i si fos 2 el missatge tamb seria diferent; ara b, en
qualsevol altre cas sexecutar el codi que es trobi a continuaci del default. En el
cas concret de lexemple, com que $opcio t un valor de 3 sexecutar el codi del
default.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<?php
$opcio=3;
switch($opcio)
{
case 0:
echo "Ests
break;
case 1:
echo "Ests
break;
case 2:
echo "Ests
break;
default:
echo "Ests
el valor de
}
?>

aqu perqu el valor de la variable \$opcio s $opcio";

aqu perqu el valor de la variable \$opcio s $opcio";

aqu perqu el valor de la variable \$opcio s $opcio";

aqu perqu no hi ha coincidncia entre


la variable \$opcio ($opcio) i els valors dels case";

Lestructura foreach

Lestructura de control foreach permet recrrer una matriu. Aquesta estructura es


pot fer servir a partir de la versi 4 del PHP.
En lexemple segent es crea una matriu que emmagatzema quatre nombres. Amb
lestructura foreach es recorre la matriu posici a posici i es copien els nombres
en la variable $valor:
1

<?php

2
3

$matriu = array(1, 2, 3, 4);

4
5
6
7
8
9

foreach ($matriu as $valor)


{
echo "El valor de \$matriu s $valor.<br>";
}
?>

Tamb es pot assignar una clau a cada element. En lexemple segent els ndexs
clau de la matriu sn noms que emmagatzemen edats:
1
2
3
4
5
6
7

<?php
$matriu = array(
"Andreu" => 31,
"Marina" => 28,
"Antoni" => 19,
"Carla" => 25
);

8
9
10
11
12
13

foreach($matriu as $posicio => $valor)


{
echo "Lalumne $posicio t $valor anys.<br>";
}
?>

Llenguatges de guions de servidor

Llenguatges de guions de servidor

48

Llenguatges de guions de servidor

2.1.10 Funcions
En el desenvolupament normal dun programa sempre arriba un punt en qu es
veu la necessitat dagrupar codi i donar-hi un nom, per controlar-lo o per evitar
repetir-ne contnuament les mateixes lnies.

Una funci s un grup de codi independent que fa una tasca per al programa.
La funci executa loperaci i retorna el control del programa a la instrucci
segent a la que la va cridar.

Funcions definides per lusuari

Lusuari pot definir totes les funcions que necessiti. s imprescindible que el
nom donat a la funci no estigui prohibit, s a dir, no es poden fer servir paraules
reservades (per exemple, echo), comenar amb un nombre o un carcter especial
ni repetir el nom duna funci dins un mateix mbit. Tot i que el PHP no far cap
distinci entre majscules i minscules, es recomana utilitzar el nom de la funci
idntic a lutilitzat en la declaraci.
Les funcions poden rebre parmetres. El pas de parmetres dentrada es fa
escrivint entre parntesis i a continuaci del nom de la funci.
En lexemple segent podeu veure com es declara la funci missatge i com,
posteriorment, es crida passant-hi un parmetre.
1
2
3
4
5

<?php
function missatge($argument)
{
echo "$argument<br>";
}

6
7
8

missatge("Aquest s largument que es passa en aquest exemple.");


?>

Les funcions tamb podran retornar valors. Per fer-ho caldr utilitzar la sentncia
return.
En lexemple segent comprovareu com la funci suma, la qual rep dos parmetres, retorna el resultat de sumar dos nombres:
1
2
3
4
5
6
7

<?php
function suma ($valor1,$valor2)
{
return($valor1+$valor2);
}
echo suma(4,6);
?>

Llenguatges de guions de servidor

49

Llenguatges de guions de servidor

Funcions internes

El llenguatge PHP t funcions definides internament. Aquestes funcions sn de


gran utilitat per al programador i resulta imprescindible estudiarles i conixer-ne
les ms importants.
s possible que diverses funcions no es reconeguin en el vostre entorn de treball
del PHP; el motiu daix s que algunes funcions internes no shan incls en la
compilaci, la qual cosa ha fet necessria una compilaci dels mduls que les
contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra
configuraci del PHP.
Sn funcions internes molt usuals echo, fprintf, print, printf i sprintf, en qu queda
demostrat que el llenguatge PHP ja t definides funcions especfiques que poden
ser de gran utilitat per a lusuari.

Podeu mirar lajuda de PHP


a www.php.net/manual/es/
funcref.php. Aqu podeu
trobar una caixa per cercar
la referncia de les diferents
funcions del llenguatge.

En lexemple segent es mostra com es pot codificar amb codificaci md5 el


contingut duna variable:
1
2

<?php
$nom = Blanca;

3
4
5
6

echo("La codificaci md5 de $nom s:<br>");


echo md5($nom);
?>

2.1.11 Classes i objectes


El llenguatge de programaci PHP est preparat per fer s daspectes propis de
la programaci orientada a objectes, tot i que el PHP no s un llenguatge de
programaci orientada a objectes.
Per definir una classe en llenguatge PHP sha dutilitzar la paraula reservada class
seguida del nom que hi voleu donar. Entre claus shan dubicar els atributs i els
mtodes propis de la classe.
Per instanciar objectes en PHP es far servir loperador new seguit del mtode
constructor de la classe.
Lexemple segent mostra el funcionament de la classe Alumne. Aquesta classe
t dos atributs que resumeixen les caracterstiques de la classe. Podreu observar
que els atributs $nom i $curs sn precedits per loperador var, el qual identifica
com a variable el text que ve a continuaci.
La classe Alumne cont un mtode especial anomenat constructor, el qual t la
missi dinicialitzar objectes. s molt fcil identificar els mtodes constructors,
ja que reben el mateix nom que la classe. Dins el mtode constructor sassignen
valors als atributs $nom i $curs. En aquest exemple sutilitza $this, que s una
variable predefinida que fa referncia a lobjecte que en aquest moment sest
utilitzant.

Simula 67
Es tracta dun llenguatge creat
per fer simulacions. Sel
considera lorigen de la
programaci orientada a
objectes. Els seus autors sn els
noruecs Ole-Johan Dahl i
Kristen Nygaard.

Llenguatges de guions de servidor

50

Llenguatges de guions de servidor

Una altra manera de generar mtodes constructors s utilitzar function __construct. ltimament aquesta variant s la que ms sutilitza, tot i que les dues
frmules sn perfectament vlides.
Podeu veure que dins la classe hi ha un mtode anomenat avaluar que sencarrega
dassignar un valor a latribut $nota.
Fora de lmbit de la funci es crea un objecte de la classe Alumne amb la partcula
new seguida del mtode constructor.
1
2
3
4
5
6

<?php
class Alumne
{
var $nom;
var $curs;
var $nota;

function Alumne($nom,$curs)
{
$this>nom=$nom;
$this>curs=$curs;
}

8
9
10
11
12
13

function avaluar($nota)
{
$this>nota=$nota;
}

14
15
16
17
18

19
20
21
22
23
24
25

$nouAlumne=new Alumne(Laura,2);
echo "Nom de lalumne: $nouAlumne>nom<br>";
echo "Curs: $nouAlumne>curs<br>";
$nouAlumne>avaluar(7);
echo "Nota: $nouAlumne>nota";
?>

2.2 Integraci PHP amb HTML


Normalment trobareu el llenguatge de programaci PHP dins daltres llenguatges.
El ms usual s escriure codi en PHP dins de codi HTML.
Heu de recordar que el codi PHP s interpretat pel servidor, i els resultats es
mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i
lHTML permet al PHP generar HTML i a lHTML passar dades al PHP.
Per comenar a dominar el llenguatge PHP s recomanable que comenceu creant
una pgina bsica. A partir daquesta pgina podeu provar coses i construir les
bases que necessitareu ms endavant. Aix s important, ja que laprenentatge de
qualsevol llenguatge de programaci comena en establir unes bones bases.
Heu de saber que no s necessari treballar amb una pgina HTML per utilitzar el
PHP; ara b, per veure resultats en un navegador haureu de filtrar el PHP per un
llenguatge que el navegador pugui interpretar, com lHTML.

Llenguatges de guions de servidor

51

Llenguatges de guions de servidor

2.2.1 Ls del PHP en formularis


PhpMyAdmin

El formulari electrnic s una eina molt potent fortament establida a Internet.


Permet lintercanvi o la introducci de dades entre usuaris duna manera rpida
i senzilla. Un formulari permet la interactivitat i s el detonant que converteix
Internet en leina ms poderosa per enviar informaci a un destinatari.
El llenguatge PHP representa un salt qualitatiu enorme en ls de formularis.
LHTML no s un llenguatge creat pensant a utilitzar formularis, sin que es va
crear amb altres objectius. El llenguatge PHP t un gran potencial en la gesti de
dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem
amb un binomi ideal.
Preparaci de lHTML

El llenguatge HTML mostrar la faana que lusuari veur a la pantalla del


navegador. El PHP ser darrere daquesta primera pantalla i treballar amb les
dades.
En la figura 2.7 podeu veure laspecte tpic dun formulari. El codi necessari per
dissenyar aquest formulari s elaborat en HTML; en canvi, el motor que espera
les dades s constitut amb PHP.
Figura 2.7. Aspecte dun formulari

El primer que cal programar per fer servir un formulari dissenyat en PHP s crear
el codi HTML. Un formulari en HTML semmarca entre les etiquetes <FORM>
i </FORM>. Per manipular aquest formulari sutilitza latribut ACTION.

Leina de programari lliure


PhpMyAdmin est creada
integrament en llenguatge de
programaci PHP. s un
exemple del que podeu arribar a
programar amb aquest llenguatge
de programaci.

Llenguatges de guions de servidor

52

Llenguatges de guions de servidor

Latribut ACTION indica el programa que sencarrega de manipular les dades, tasca
que encomanareu a un codi dissenyat en llenguatge PHP.
Letiqueta <form> us permet fer servir dos mtodes per enviar informaci:GET
i POST. El mtode GET s molt til en motors de cerca, per no ofereix gaire
seguretat, ja que les dades que envia es poden veure en lURL del navegador.
El mtode POST s molt ms segur, ja que quan el servidor detecta que el mtode
de transacci dinformaci s POST espera rebre dades immediatament sense fer
servir lURL, la qual cosa implica que aquestes dades no seran visibles en lURL.
Un petit exemple de crida a un formulari seria:
1
2
3
4
5
6

<HTML>
<head>
<title>El nostre primer exemple amb formularis</title>
</head>
<body>
<H1>Introdueix el teu nom i prem el bot!</H1>

7
8
9
10
11
12
13

<FORM ACTION="contesta.php" METHOD="POST">


Si us plau, escriu el teu nom:<INPUT TYPE="text" NAME="nom"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</HTML>

Podeu veure com, dins letiqueta <BODY>, apareix letiqueta <FORM>. Latribut
ACTION crida un fitxer anomenat contesta.php, el qual contindr el codi PHP
encarregat de valorar el formulari. El pas de les dades es far mitjanant el
mtode POST. El servidor detecta que sest executant un codi que cont transacci
dinformaci mitjanant el mtode POST; per tant, el servidor es posa a escoltar
a lespera que hi arribin dades. Les dades les rebr directament, sense fer servir
lURL. En el moment en qu es premi el bot etiquetat com a Enviar totes les
dades introdudes en el formulari senvien al fitxer contesta.php.

Com valora el PHP un formulari

En el moment denviar les dades des del formulari duna pgina HTML a un fitxer
escrit en PHP sha de tenir en compte que latribut NAME emmagatzema el valor.

HTML i PHP
En el treball de formularis i PHP
s interessant que exploreu el
mn de les etiquetes de lHTML.
Si no sabeu com lHTML
treballa amb els formularis,
limitareu les possibilitats del
vostre codi.

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

<HTML>
<head>
<title>Resposta a la petici de dades</title>
</head>
<body>
<H1>...Continuem amb lexemple!</H1>
El teu nom s:
<?php
echo $_POST[nom];
?>
</body>
</HTML>

En el moment en qu senvien dades del formulari HTML cap a un fitxer PHP,


aquestes dades apareixeran dins dun array superglobal amb tots els seus valors.

Llenguatges de guions de servidor

53

Les matrius associatives i els formularis

Resulta de gran utilitat fer servir matrius associatives per tractar la informaci
rebuda dun formulari.
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu s, per, ser
condicionat pel mtode utilitzat en el pas de dades en el codi HTML. Aix, si en el
codi HTMLel mtode s POST haureu de fer servir la matriu associativa $_POST ;
en canvi, si heu fet servir el mtode GET en el codi HTML, haureu de fer servir la
matriu associativa $_GET.
Per accedir als valors emmagatzemats en les matrius associatives fareu servir
latribut corresponent NAME de lHTML com a ndex de la matriu associativa.
No heu doblidar que el PHP s un llenguatge de programaci que, entre altres
coses, us permet utilitzar bucles. En el formulari segent es defineix una selecci
mltiple, en qu podreu marcar els navegadors que coneixeu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<HTML>
<head>
<title>Un exemple amb un formulari</title>
</head>
<body>
<form action="seleccioMultiple.php" method="POST">
Nom: <input type="text" name="nom"><br>
Correu electrnic: <input type="text" name="email"> <br>
Navegadors que coneixes: <br>
<select name="navegadors[]" multiple>
<option value="Chrome">Chrome</option>
<option value="MozillaFirefox">Mozilla Firefox</option>
<option value="Safari">Safari</option>
<option value="Opera">Opera</option>
<option value="Lynx">Lynx</option>
</select><br>
<input type="submit" value="Envia" >
</form>
</body>
</HTML>

Aqu us trobareu amb un petit problema. Per recuperar els valors introduts com
a nom i correu electrnic no hi ha cap problema, la matriu $_POST us permetr
un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecci
mltiple, per, sorgeix un petit problema. A diferncia dels casos anteriors, ara
navegadors pot contenir ms dun valor, com ho fareu per mostrar tots els valors
per pantalla? La soluci s utilitzar un bucle:
1
2
3

<?php
foreach ($_POST[navegadors] as $opcio)
echo $opcio."\n";

4
5

?>

El bucle foreach anterior permet recrrer la matriu navegadors, la qual contindr


els navegadors que heu marcat en el formulari inicial.
Si no recorreu la matriu i la mostreu directament amb:
1

echo $_POST[navegadors];

Llenguatges de guions de servidor

Llenguatges de guions de servidor

54

Llenguatges de guions de servidor

noms es mostrar la cadena Array.

2.2.2 Tipus de dades en PHP


En PHP no s necessari declarar una variable abans dutilitzar-la; de fet, no cal
ni establir el tipus al qual pertany, el mateix llenguatge sencarregar dassignar
el tipus corresponent segons el contingut i el context. Fixeu-vos en lexemple
segent:
1
2
3
4
5
6
7
8

<?php
$valor=123;
echo "$valor<br>";
$valor=Hola;
echo "$valor<br>";
$valor=123+Hola;
echo "$valor<br>";
?>

Podeu veure que en lexemple anterior en cap moment no sha definit el tipus de
la variable.
Si voleu, podeu indicar el tipus de la variable o forar una conversi de tipus. Una
utilitat que fareu servir sovint s forar el tipus duna variable per validar lentrada
de dades.
El llenguatge del PHP suporta vuit tipus primitius, dos despecials i alguns
pseudotipus.

Tipus de dades primitius

Els tipus de dades primitius suportats pel PHP sn vuit, agrupats en escalars,
compostos i especials. Per dinamitzar el tractament de dades i ajudar a comprendre
alguns codis es permet utilitzar pseudotipus, com ara mixed,number o callback.
1. Els tipus de dades escalars sn:
boolean: s un tipus de dades molt simple que pot representar un valor cert
(TRUE) o fals (FALSE). Aquest tipus de dades sutilitza molt en estructures
de control. Si feu conversi de dades s molt important que tingueu en
compte que es considerar fals el nombre enter i amb coma 0, la cadena 0
o una cadena buida, una matriu buida, un objecte sense variables membre,
el tipus
NULL i els objectes SimpleXML que shagin creat detiquetes buides. A continuaci, es mostren dues variables booleanes:
1
2

$sortir=FALSE;
$entrar=TRUE;

Llenguatges de guions de servidor

55

integer: aquest tipus representa nombres no fraccionables per sota de la


unitat. Poden ser positius i negatius. Aquests nombres enters els podeu
representar en notaci decimal, hexadecimal o octal. La plataforma sobre la
qual treballeu determinar la mida de les variables enteres. El PHP forar
un canvi de tipus a flotant si es produeix un desbordament, tant si s positiu
com negatiu. A continuaci, es mostren dos exemples de variables enteres:
1
2

$positiu=3451;
$negatiu=4345;

float: aquest tipus fa referncia als nombres de coma flotant, i normalment


treballa amb una precisi aproximada de catorze dgits decimals. A
continuaci, es mostra un exemple duna variable amb coma flotant:
1

$amb_coma=34.5;

string: es tracta duna cadena de carcters. El llenguatge del PHP no imposa


un lmit a la mida daquestes cadenes; ara b, no oblideu que el lmit el
marcar la memria del maquinari en qu estigui funcionant el PHP. Aqu
teniu diversos exemples de cadenes:
1
2
3
4
5

<?php
$nom=Wayan;
$salutacio="Hola $nom!";
echo $salutacio." Benvingut";
?>

En lexemple anterior es fan servir cometes dobles i simples per marcar les
cadenes. La diferncia entre fer-ho duna manera o duna altra s que amb cometes
dobles sinterpreten les variables com a tals, mentre que amb cometes simples no
es mostrar el contingut de les variables. Una manera de concatenar cadenes s
utilitzar loperador punt.
2. Els tipus de dades compostos sn:
array: un array s una matriu, duna dimensi o ms, que cont dades que
sassocien segons unes claus. s un tipus molt til, i comprovareu que el
seu s t una gran potncia. Per crear una matriu podeu utilitzar la paraula
reservada array() o b acompanyar el nom de la variable amb [ ].
En lexemple segent es creen dos arrays, un que cont els dos graus de cicles
formatius que hi ha, i un altre que emmagatzemar dues famlies professionals.
Podeu veure que en el segon cas la paraula array no apareix per enlloc i es crea la
matriu igualment:
1
2
3

$grau_cicles=array("superior","mitja");
$families[]="Informtica";
$families[]="Electrnica";

Llenguatges de guions de servidor

Llenguatges de guions de servidor

56

Llenguatges de guions de servidor

object: aquest tipus dobjecte est previst en el llenguatge PHP perqu


suporta el llenguatge orientat a objectes. Un objecte s un tem amb unes
caracterstiques i funcionalitats marcades per la classe a la qual pertany. Per
crear un objecte cal utilitzar la partcula new.
1
2

<?php
class Alumne {

public function matricular($nom)


{
echo "Ja ests matriculat $nom";
}

4
5
6
7
8

9
10
11
12

$alumne1=new Alumne();
$alumne1>matricular(Made);
?>

3. Els tipus de dades especials sn:


resource: la variable que pertany a aquest tipus far referncia a un recurs
extern. Determinades funcions faran s daquest recurs. Per exemple,
la funci mysql_db_query, que t la funci denviar una petici mySQL,
retorna un tipus resource. En lexemple segent la variable $resultat s de
tipus resource:
1
2

$query=SELECT * FROM alumnes;


$resultat=mysql_query($query);

NULL: quan necessiteu una variable que no tingui cap valor haureu dutilitzar aquest tipus.
4. Els pseudotipus sn:
mixed: aquest pseudotipus indica que la variable en questi pot emmagatzemar mltiples tipus.
number: indica que la variable pot contenir un valor enter o de coma flotant.
callback: utilitzareu aquest pseudotipus per emmagatzemar crides de retorn
generades per funcions de lusuari.

Manipulaci de tipus

El llenguatge PHP fa la majoria de conversions de tipus duna manera automtica.


Una conversi molt normal s la que es fa de cadenes a valors numrics. Si, per
exemple, la cadena cont un punt o la lletra e (majscula o minscula) i la sumeu
a un enter, la cadena es considerar un nombre de coma flotant, i el resultat ser
de tipus de coma flotant.

Llenguatges de guions de servidor

1
2
3
4
5
6
7

57

<?php
$cadena="Aqu hi ha text";
echo Contingut de $cadena: .$cadena."<br>";
$numero=12;
echo El valor de $numero: .$numero."<br>";
echo Ara $cadena cont: .$cadena=$cadena+$numero;
?>

En lexemple anterior la variable $cadena passa de ser un string a un integer.


Conversi de tipus (casting)

Per forar un canvi de tipus haureu despecificar entre parntesis el tipus al qual
voleu fer la conversi i collocar-lo davant la variable.
En la taula 2.8 podeu trobar les conversions permeses.
Taula 2.8. Modelitzacions de tipus
Sentncia

Modelat a...

(integer), (int)

integer

(boolean)

boolean

(float), (double), (real)

float

(string)

string

(binary)

string

(array)

array

(object)

object

En lexemple segent es mostra com es pot utilitzar la conversi (casting). En


aquest cas, es modela el que hauria de ser un nombre amb decimals a un nombre
enter:
1
2
3
4

<?php
echo "Sense modelar 27/5: ".(27/5)."<br>";
echo "I ara ja modelat: ".(integer)(27/5);
?>

2.2.3 Variables
El llenguatge de programaci PHP t una caracterstica que destaca. El mn de
les variables en PHP s una gran ajuda per al programador, i aix no ve al cas pel
fet que no calgui declarar els tipus de les variables, sin perqu t un gran nombre
de variables predefinides que simplifiquen molt les tasques del tcnic.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

58

Llenguatges de guions de servidor

mbit de les variables

Les variables tenen una vida determinada depenent don les declareu i com ho
feu. s molt important conixer lmbit de les variables per controlar els vostres
codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres
creacions.
Lmbit duna variable s el context en qu s definida.
En lexemple segent es mostra com es pot declarar una variable nombroses
vegades en mbits diferents:
1
2
3

<?php
$nom=Nyoman;
echo De moment $nom val .$nom."<br>";

4
5
6
7
8
9

function canvi()
{
$nom=Ketut;
echo Per ara $nom val .$nom."<br>";
}

10
11
12
13

canvi();
echo I de nou $nom torna a tenir el valor de .$nom."<br>";
?>

Variables predefinides

En PHP hi ha una srie de variables predefinides que resulten de gran ajuda per
al programador. Dins daquestes variables predefinides cal destacar un gran grup,
el grup de les anomenades superglobals.

Les variables superglobals sn variables que sempre estan disponibles en


tots els mbits.
Les variables superglobals sn nou:
1. $GLOBALS: fa referncia a totes les variables disponibles en lmbit global.
Es tracta duna variable de tipus matriu associativa.
Una manera de recrrer
matrius s utilitzar la funci
foreach. Introduda en el
PHP4 sha revisat en el
PHP5 per iterar tamb
objectes.

En lexemple segent es recorre la variable superglobal $GLOBALS:


1
2
3

<?php
$una_variable="Hola";
$una_altra_variable="Com va?";

4
5
6
7

foreach ($GLOBALS as $key => $valor)


echo "GLOBALS[$key] = $valor<br>";
?>

2. $_SERVER: ofereix informaci molt ltil sobre el servidor i lentorn dexecuci. Els valors que emmagatzema sn generats pel navegador web.
1
2

<?php
foreach ($_SERVER as $key => $valor)

Llenguatges de guions de servidor

3
4

59

echo "SERVER[$key] = $valor<br>";


?>

Lexemple anterior s de gran utilitat. Executeu-lo i veureu un seguit de dades


referents a la mquina que fa de servidor del PHP. Entre altres coses, identificareu
el nom de la mquina, la versi del navegador, la versi del servidor web, la
ubicaci de fitxers importants i un llarg etctera.
3. $_GET : correspon a la variable GET del protocol HTTP. Emmagatzema els
valors de les variables que es trasmeten per mitj del protocol HTTP mitjanant
el mtode GET. El seu s s molt normal en formularis.
4. $_POST : correspon a la variable POST del protocol HTTP. Emmagatzema els
valors de les variables que es transmeten per mitj del protocol HTTP mitjanant
el mtode POST. El seu s s, generalment, ms adequat que el mtode GET per
a temes de seguretat.
5. $_FILES: aquesta variable sutilitza en la crrega de fitxers per mitj del
protocol HTTP. El mtode utilitzat s el POST.
6. $_COOKIE: s una variable de tipus matriu associativa que emmagatzemar
les variables passades a lscript per mitj de les galetes de lHTML.
7. $_SESSION: cont les variables de sessi disponibles en lscript actual.
8. $_REQUEST : s una matriu associativa que cont les dades de $_GET ,
$_POST i $_COOKIE.
9. $_ENV : cont les variables dentorn.
Altres variables predefinides sn:
$php_errormsg: aquesta variable emmagatzema el text de lltim missatge
derror. Per poder-la utilitzar, lopci de configuraci track_errors ha
destar activada.
$HTTP_RAW_POST_DATA: en aquesta variable quedaran emmagatzemades les dades POST originals.
$http_response_header: cont les capaleres de resposta HTTP.
$argc: indica el nombre de parmetres que shan passat a lscript.
$argv: cont els arguments que shan passat a lscript.
Variables globals

La paraula reservada global indica que la variable que lacompanya sha dentendre en un mbit global.
Tamb podeu fer servir larray associatiu $GLOBALS, que cont referncies a
totes les variables globals definides en cada moment en lmbit del programa. Els
ndexs de larray sn els noms de les variables.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

60

Llenguatges de guions de servidor

En lexemple segent es mostren tots dos casos, i podeu veure com es traspassen
els problemes derivats de lmbit local de les variables.
1
2
3

<?php
$nom=Elewa;
$benvinguda=benvingut al curs!;

4
5
6
7

function salutacio()
{
global $nom, $benvinguda;

$benvinguda= $nom." ".$benvinguda."<br>";

9
10

11
12
13

salutacio();
echo $benvinguda;

14
15
16
17

echo "Valor duna variable global: ".$GLOBALS[nom]."<br>";


echo "i de laltra: ".$GLOBALS[benvinguda]."<br>";
?>

Quan dins la funci salutacio() es declaren globals les variables $nom


i$benvinguda, es fora que totes les referncies a aquestes dues variables apuntin
a les variables globals.
Variables esttiques

Les variables esttiques sempre mantenen el valor encara que el programa


abandoni lmbit de la variable, i existeixen noms en lmbit local de les funcions.
No shi pot accedir fora daquest mbit.
Fixeu-vos en lexemple segent. Hi ha dues funcions, una de les quals cont
una variable esttica, mentre que laltra no. Lacci de totes dues funcions no
s cap altra que incrementar el valor duna variable, per els resultats sn molt
diferents. En la funci anomenada comptador() la variable que sincrementa no s
esttica; per tant, cada vegada que la seqncia del programa abandoni la funci, la
variable perdr el seu valor. En canvi, en la funci comptadorEstatic(), la variable
que sincrementa s esttica; per tant, quan la seqncia del programa abandoni
aquesta funci no es perdr el valor acumulat, i aquest restar en la memria.
1
2
3
4
5
6
7

<?php
function comptador()
{
$a = 0;
echo "Al comptador: ".$a."<br>";
$a++;
}

8
9
10
11
12
13
14

function comptadorEstatic()
{
static $b = 0;
echo "Al comptador esttic: ".$b."<br>";
$b++;
}

15
16
17
18
19
20
21

for($i=0;$i<3;$i++)
{
comptador();
comptadorEstatic();
}
?>

Llenguatges de guions de servidor

61

Llenguatges de guions de servidor

Variables variables

De vegades, pot resultar de gran utilitat disposar de noms de variables que es


puguin definir i utilitzar dinmicament; daquestes, en diem variables variables.
Mireu lexemple segent, en qu una variable variable pren el valor duna variable
i el tracta com si fos el nom duna variable.
1
2

<?php
// no podeu deixar espais dins de la cadena Hola, doncs es far servir per nom
daltra variable
$variable = "Hola";

4
5

$$variable = " mon";

6
7
8
9

//Mostra el mateix
print " $variable{$$variable}<br>";
print "$variable$Hola<br>";

10
11

?>

No podreu utilitzar les variables superglobals com a variables variables dins de


funcions o mtodes de classe.

Variables de sessi

Les necessitats actuals forcen a buscar solucions rpides i segures per accelerar
la presentaci dinformaci i la comunicaci entre les diferents parts que formen
un sistema informtic comunicatiu. Les variables de sessi sn una soluci molt
adequada per resoldre aquests problemes.
Les variables de sessi sn variables que estan disponibles en mltiples pgines
sense haver de fer servir pas de parmetres. Les variables de sessi tenen un temps
de vida limitat i semmagatzemen en el servidor.

Podeu fer servir les variables de sessi per mantenir informaci


(lanomenada informaci de sessi) entre diferents pgines. Per exemple,
el nom dusuari o una selecci de productes que ja shagi fet.
A continuaci, estudiareu un exemple format per tres fitxers. El primer fitxer s
un formulari senzill que demana a lusuari un identificador i una contrasenya.
Aquestes dades senvien a un segon fitxer, anomenat exempleAutenticar.php,
que crea les variables de sessi. Finalment, trobareu un tercer fitxer anomenat
continuem.php, que recupera la informaci emmagatzemada en les variables de
sessi.
Just a sota daquest text hi ha el fitxer del qual partireu. Lhem anomena
exempleSessions.php, per el podeu anomenar duna altra manera:
1
2
3
4
5

<HTML>
<head>
<title>Exemple amb variables de sessi</title>
</head>
<body>

<input type=password>
Si indiqueu a letiqueta HTML
que sigui de tipus contrasenya,
no simprimiran els carcters
conforme aneu escrivint. En
comptes de text es mostraran
asteriscs.

Llenguatges de guions de servidor

62

6
7
8

Llenguatges de guions de servidor

<form action="exempleAutenticar.php" method="post">


Escriu el teu nom:
<input type="text" name="usuari"><br>

Escriu la teva contrasenya:


<input type="password" name="contrasenya"><br><br>

10
11
12
13
14
15
16

<input type="submit" value="Envia!">


</form>
</body>
</HTML>

Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer


creareu i inicialitzareu les dues variables de sessi que utilitzareu.
1
2
3
4
5

<?php
session_start();
$_SESSION[id_usuari]=$_REQUEST[usuari];
$_SESSION[clau_acces]=$_REQUEST[contrasenya];
?>

6
7
8
9
10
11
12
13
14
15

<HTML>
<head>
<title>...continueu amb lexemple de variables de sessi...</title>
</head>
<body>
Ja shan emmagatzemat les variables de sessi.<br><br>
<a href="continuem.php">Vinga! Cap al final de lexemple!</a>
</body>
</HTML>

Fixeu-vos que el primer que es fa s cridar la funci session_start(). s obligatori


que inicieu la sessi abans de cap etiqueta HTML perqu tot funcioni correctament.
Amb $_REQUEST es recuperen els dos valors que shan passat des del fitxer
inicial, s a dir, usuari i contrasenya, i els heu demmagatzemar en dues variables
de sessi creades a $_SESSION, que rebran el nom did_usuari i clau_acces.
$_REQUEST s un array associatiu global que per defecte t els continguts de
$_GET, $_POST i $_COOKIE.
A part de crear les variables de sessi i donar-los valors trobareu un enlla cap al
tercer fitxer.
El codi del tercer fitxer, continuem.php, el teniu a continuaci:
1
2
3

<?php
session_start();
?>

4
5

<HTML>

6
7
8
9

<head>
<title>...i acabem lexemple de variables de sessi!</title>
</head>

10
11
12
13
14
15
16
17

<body>
<?php
echo "Lusuari que haveu escrit era: ".$_SESSION[id_usuari];echo "<br>";
echo "La contrasenya que haveu escrit era: ".$_SESSION[clau_acces];
?>
</body>
</HTML>

Llenguatges de guions de servidor

63

Com que esteu treballant amb sessions, el primer que haureu de fer s llanar la
sessi amb session_start(). A continuaci, es recuperen els valors emmagatzemats
en les dues variables de sessi.

2.2.4 Excepcions en PHP


No diu gaire el codi que, a causa dun error produt en temps dexecuci, fa caure
tot el programa i en fora la sortida.

Les excepcions tenen la missi de detectar i corregir errors.


En cas que es produs un error, la vostra aplicaci no hauria de produir un
terrabastall i forar la sortida del programa, sin que es pot llanar una excepci
(throw) que haureu de capturar (catch) i resoldre la situaci derror. El codi
susceptible de provocar lerror ha danar dins dun bloc try, que obligatriament
ha de tenir un bloc catch.
Quan es produeix una excepci, el PHP va a buscar directament el bloc de codi
del catch. Si no es captura una excepci, lerror resulta fatal per al programa.
En lexemple segent es fa un filtratge perqu no hi hagi cap divisi en qu el
divisor tingui per valor 0. Si aix passa, en comptes de caure el programa, es
tracta el problema. En aquest cas, quan es dna la situaci simplement es mostra
un missatge per pantalla que navisa:
1
2
3
4
5

<?php
function filtreDividir($dividend,$divisor)
{
if ($divisor==0)
throw new Exception(Divisi per zero.);

else
return ($dividend/$divisor);

7
8
9

10
11
12
13
14
15
16
17
18
19
20

try
{
$dividend=$_POST[dividend];
$divisor=$_POST[divisor];
filtreDividir($dividend,$divisor);
}
catch (Exception $e)
{
echo "Sha capturat lexcepci: ".$e>getMessage()."<br>";
}

21
22
23

echo "I no savorta lexecuci del programa!!!";


?>

Llenguatges de guions de servidor

Llenguatges de guions de servidor

64

Llenguatges de guions de servidor

Hi ha dues excepcions predefinides: Exceptions i ErrorException. La


primera s la classe base de totes les excepcions, cont el missatge de
lexcepci, el nom de lexcepci, el codi de lexcepci, el nom del fitxer que
ha llanat lexcepci, el nmero de lnia en qu sha produt lexcepci i la
traa associada a lexcepci. LexcepciErrorException hereta de lexcepci
Exception i indica numricament la severitat de lexcepci produda.

2.2.5 Galetes (cookies)

Lou Montulli
Aquest programador va crear les
galetes mentre treballava a
Netscape durant la dcada de
1990. Tamb va crear, juntament
amb altres dos programadors, el
popular navegador Lynx.

Quan navegueu per Internet visiteu pgines que poden amagar una certa complexitat per donar un servei millor a lusuari. Podeu comprovar com diverses pgines
web, fins i tot, us reconeixen en el moment en qu hi accediu.

Les galetes sn uns fitxers de text que emmagatzemen informaci a


lordinador client referent a la visita dun usuari a una pgina web.
Les galetes no sn un acte dintromissi per part de la pgina web visitada;
simplement, sn una font dinformaci molt til per augmentar leficincia en
laccs.
Les galetes tenen una mida mxima d1K i caduquen, la qual cosa fa molt difcil
que sutilitzin amb fins malintencionats. A ms, nicament pot consultar la galeta
el web que lha dipositada, la informaci que cont no s visible per a la resta de
pgines web.

Utilitat de les galetes

Un s molt freqent de les galetes s emmagatzemar un perfil dusuari. Aix


saconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest
en conegui les preferncies i li mostri directament els continguts ms adequats.
Les galetes ajuden els programadors a crear un entorn ms adequat per a lusuari
visitant. Moltes pgines web permeten canviar la mida del text, els colors de la
pgina, la disposici dalguns continguts, etc. Una vegada lusuari ha modificat
al seu gust laspecte de la pgina web, aquestes dades semmagatzemen per a la
propera visita.

Funcions del PHP per treballar amb galetes

La funci que sutilitza en PHP per crear galetes s setcookie.

Llenguatges de guions de servidor

65

Llenguatges de guions de servidor

La definici de la funci Setcookie s:


bool setcookie ( string $nom [, string $valor [, int
$caduca= 0 [, string $ruta [, string $domini [, bool
$seguretat= false [, bool $nomeshttp= false ]]]]]] )
La funci setcookie retornar cert si la galeta sha creat sense cap dificultat i fals
si hi ha hagut algun problema.
A continuaci anem a descriure els seus parmetres:
$nom: s obligatori i indica el nom que donareu a la galeta, la resta de
parmetres sn opcionals.
$valor: s el valor que tindr la galeta.
$caduca: indica els segons que t de vida la galeta; si no sindica res la
galeta deixar dexistir quan finalitzi la sessi de lusuari.
$ruta: indica on podeu trobar la galeta dins el servidor.
$domini: marca el domini en qu la galeta est disponible.
$seguretat: tindr el valor TRUE si voleu que la galeta noms sutilitzi en
una connexi segura, i FALSE (que s el valor per defecte), si no s necessari
un cert grau de seguretat.
$nomeshttp: si t per valor TRUE marcar que la galeta solament s
accessible si sutilitza el protocol HTTP.
Lexemple segent mostra ls duna galeta. Lexemple consta de dues parts, un
primer exemple en qu es crea la galeta i shi assigna un valor, i una segona part
en qu es recupera el valor emmagatzemat en la galeta.
El primer fitxer sencarrega de declarar la galeta amb un identificatiu, en aquest
cas nom, i shi assignar el valor Maadiva:
1
2
3

<?php
setcookie(nom, Maadiva);
?>

El segon fitxer sencarregar de consultar a la matriu associativa$_COOKIE el


valor de la galeta indicada, que en aquest cas seria nom:
1
2
3

<?php
echo $_COOKIE[nom];
?>

2.2.6 Encriptaci de dades amb el PHP


La seguretat s un aspecte molt important que cal tenir en compte en ladministraci dun sistema. El llenguatge PHP us ofereix la possibilitat daplicar tcniques
dencriptaci mitjanant funcions com crypt(), md5() i les funcions mcrypt.

Galeta s la traducci de
langls cookie. El nom
originari s magic cookie,
que sn les galetes de la
sort, les quals amaguen
informaci a linterior.

Llenguatges de guions de servidor

66

Llenguatges de guions de servidor

A ms dencriptar dades podreu verificar les vostres contrasenyes amb funcions


crack, utilitzar funcions hash per identificar fitxers o comprovar signatures amb
OpenSSL.
SHA1

SHA1 s una funci de hash criptogrfica disenyada per lagncia de seguretat


nacional nordamericana. La informaci est codificada amb una clau de 160 bits
i es considera una funci criptogrfica ms segura que MD5 (que va ser durant
molt de temps la funci criptogrfica ms popular a PHP).
La funci per calcular el hash SHA1 t la segent forma a PHP:
1

string sha1 ( string $str [, bool $sortida_raw = false ] )

Aquesta funci, calcula el hash de la variable $str i el retorna en forma de nmeros


hexadecimals de 40 dgits en format string. Si largument opcional $sortida_raw
est ficat a TRUE la sortida tindr el format binari amb una mida de 20 bytes.
En el segent exemple podeu veure el resultat dencriptar una paraula i com es
comprova amb el seu valor encriptat.
1
2

<?php
$str = apple;

3
4

echo sha1($str);

5
6
7
8
9
10

Tot i poder encriptar les


contrasenyes amb SHA1 o
MD5, aquests algorismes
han estat dissenyats per ser
rpids i eficients. Per
aquests motius, amb ls de
fora bruta aplicada
mitjanant els ordinadors
actuals, es poden trencar
sense moltes complicacions
aquestes encriptacions.
Alguns experts en
criptografia no les
recomanen com a sistema
dencriptaci segur per les
contrasenyes.

if (sha1($str) === d0be2dc421be4fcd0172e5afceea3970e2f3d940)


{
echo "Has seleccionat una poma";
}
?>

Algorismes de hash

Si saplica un algorisme determinat sobre un fitxer es pot arribar a obtenir un segon


fitxer. Aquest segon fitxer cont un nmero resum del fitxer original.
Si els continguts del fitxer canvien, tamb ho far el nmero resultant de la funci
de hash. Daquesta manera es pot comprovar si el contingut dun fitxer s el mateix
o no desprs dalguna transacci en concret (per exemple, desprs de descarregarlo dInternet o de fer-ne una cpia de seguretat).
Lalgorisme de hash permet obtenir una srie de bits de longitud fixa a partir dun
fitxer qualsevol. s impossible la reconstrucci del fitxer original utilitzant el codi
hash obtingut.
Les aplicacions ms esteses del hash sn:
Comprovar la integritat dels fitxers.
Reforar la seguretat en processos dautentificaci.

Llenguatges de guions de servidor

67

Signatura digital.
No confongueu lalgorisme hash amb les taules hash. Les taules hash sn una
estructura de dades.

Funcions hash
El llenguatge PHP suporta diferents funcions que utilitzen lalgoritmehash. La
funci ms caracterstica s hash. La funci hash genera una cadena utilitzant un
algorisme i una font de dades.
La forma que t la funci hash s:
1

string **hash** (string %%$%%algorisme , string %%$%%data [, bool %%$%%


mode_binari= false ])

Els seus parmetres indiquen el segent:


$algorisme: representa lalgorisme que sha dutilitzar. Aquest algorisme
pot ser md5, sha1, gost, crc32, crc32b, etc.
$data: sn les dades que es filtraran per lalgorisme.
$mode_binari: s opcional i si el seu valor s TRUE marcar que la cadena
de sortida estigui formada per dades binries; en canvi, si pren com a valor
FALSE el resultat ser una cadena hexadecimal. Per defecte t el valor
FALSE.
El codi segent:
1
2
3

<?php
echo hash(md5, No oblideu la seguretat en els sistemes informtics.,FALSE);
?>

crea la seqncia:
1

520b1e3205e719aa4d13a8c01b89e28d

En lexemple anterior sha utilitzat lalgorisme MD5 per obtenir un codi hash
hexadecimal. Per obtenir el codi s necessari tenir dades, que les podem obtenir
duna cadena de text. El resultat s en format hexadecimal i no en binari perqu
hem indicat FALSE en el tercer parmetre de la funci.
Normalment, sutilitza una codificaci hash per comprovar que el contingut dun
fitxer no sha modificat.
En aquest cas, la funci utilitzada s hash_file:
1

string **hash_file** ( string %%$%%algorisme , string %%$%%nom_fitxer [, bool


%%$%%mode_binari= false ] )

La funci hash_file retornar una cadena. Aquesta s lexplicaci dels seus


parmetres:

Llenguatges de guions de servidor

Llenguatges de guions de servidor

68

Llenguatges de guions de servidor

$algorisme: indica lalgorisme que sha dutilitzar.


$nom_fitxer: indica larxiu que sutilitzar com a base per crear la codificaci hash.
$mode_binari: s opcional, si el seu valor s TRUE la cadena resultant ser
binria, i si el seu valor s FALSE el resultat es mostrar en codificaci
hexadecimal.

Tiger s una funci hash


pensada per a plataformes
de 64 bits. Aquesta funci,
entre daltres, possiblement
ser la que substituir
lalgorisme MD5.

Fixeu-vos en lexemple segent, en qu es calcula el codi hash dun fitxer


anomenat exemple_hash_file.php:
1
2
3

<?php
echo hash_file(md5, exemple_hash_file.php);
?>

que dna com a resultat:


1

2d205ca4c799ac669c97c93eadc5df2a

Podeu comprovar que si noms utilitzeu els dos primers parmetres la funci no
dna cap error i es mostra directament el resultat en codificaci hexadecimal.
Desprs de fer una petita modificaci en el fitxer exemple_hash_file.php el que es
mostra en el navegador s:
1

7c804cc0743ef78c8cdaaa540ea332d2

Com podeu veure, el resultat s completament diferent. Per petita que sigui la
modificaci en el contingut dun fitxer, el resultat daplicar un algoritme en una
codificaci hash implica obtenir una clau completament nova.
s molt important saber quin algoritme es pot utilitzar en ls daquestes funcions.
El mateix llenguatge PHP us ofereix la possibilitat de consultar els algoritmes
suportats mitjanant la funci hash_algos(). Aquesta funci retorna una matriu
que cont tots els algoritmes que es poden utilitzar. A continuaci, es mostra com
es pot utilitzar aquesta funci:
1
2
3

<?php
print_r(hash_algos());
?>

Generaci i verificaci de signatures en PHP

La seguretat en lintercanvi dinformaci a travs de la Xarxa s una de les


bases de la programaci actual. El llenguatge PHP no podia oblidar implementar
funcionalitats com ara la generaci i verificaci de signatures.

Mitjanant les funcions de lOpenSSL, el llenguatge PHP pot generar


certificats digitals i implementar protocols de comunicaci segurs.

Llenguatges de guions de servidor

69

Llenguatges de guions de servidor

LOpenSSL forma part dun paquet. Abans de provar les funcions que veureu a
continuaci assegureu-vos que teniu installat el paquet.
LOpenSSL suporta els algorismes de signatura DSS1, SHA1, MD5, MD4 iMD2.
Per obtenir certificats heu de fer servir la funci openssl_x509_read:
1

resource openssl_x509_read ( mixed $x509certdata )

El parmetre $x509certdata s el certificat que es llegeix. Es retorna un identificador daquest certificat; aquest identificador es pot utilitzar en altres funcions
PHP.
Per a la gesti de claus, les dues funcions principals sn open_get_publickey() per
obtenir una clau pblica i open_get_privatekey() per obtenir una clau privada.
La descripci dopen_get_publickey() s un lies de:
1

resource openssl_pkey_get_public ( mixed $certificat )

El parmetre $certificat pot ser un certificat X.509 o una clau privada.


La descripci dopen_get_privatekey()s un lies de:
1

resource openssl_pkey_get_private ( mixed $clau [, string $passphrase= "" ] )

en qu el parmetre $clau s la clau que es fa servir. Opcionalment, podeu utilitzar


el parmetre $passphrase si la clau est encriptada.

2.3 Programaci orientada a objectes en PHP


El llenguatge de programaci PHP no s un llenguatge orientat a objectes, per s
que en suporta la gran majoria de caracterstiques.
La programaci orientada a objectes es fonamenta en dos pilars: les classes i
els objectes. Amb aquests dos elements bsics es poden dissenyar programes
complexos molt potents duna manera molt clara i senzilla.

Una classe en programaci orientada a objectes s la definici dun element


que forma part dun sistema.
Les classes defineixen la forma i el comportament dels objectes.

Els objectes sn variables que responen a unes propietats i funcionalitats


descrites en una classe.
Un exemple ds de la programaci orientada a objectes seria:

X.509
X.509 s un estndard que
especifica, entre altres coses,
certificats de clau pblica. Lany
2007 es va demostrar que era
vulnerable a determinats atacs.

PEM
PEM s un format de fitxer
utilitzat per emmagatzemar
xifrats digitals. Quan feu servir
un parmetre en una funci que
sigui un certificat o una clau
podreu fer servir fitxers daquest
format.

Llenguatges de guions de servidor

70

1
2
3
4
5

Llenguatges de guions de servidor

<HTML>
<head>
<title>Primer exemple amb POO</title>
</head>
<body>

6
7
8
9
10
11

<?php
class Alumne
{
var $nom;
var $dni;

12

public function anomenar($nom)


{
$this>nom=$nom;
}

13
14
15
16
17

public function dades($dni)


{
$this>dni=$dni;
}

18
19
20
21
22

public function imprimir()


{
echo $this>nom;
echo <br>;
echo $this>dni;
echo <br>;
}

23
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38
39
40
41
42

$alumne1=new Alumne();
$alumne1>anomenar(Imena);
$alumne1>dades(23344556D);
$alumne1>imprimir();
$alumne2=new Alumne();
$alumne2>anomenar(Ketut);
$alumne2>dades(65544332E);
$alumne2>imprimir();
?>
</body>
</HTML>

2.3.1 Les classes en PHP


Per definir una classe heu dutilitzar la paraula reservada class seguida del nom de
la classe. Heu de fer tot el possible perqu el nom de la classe sigui tan descriptiu
com sigui possible respecte al que ha de representar. Entre claus heu descriure el
codi de la classe.
1

class Alumne {}

En la figura 2.8 es representen les parts que defineixen una classe i com sentrellacen entre elles. Podeu veure que les classes no sn altra cosa que la definici
de dades i mtodes, la uni dels quals genera la mateixa classe.

Llenguatges de guions de servidor

71

Figura 2.8. Definici de classe

Les classes poden tenir atributs i mtodes.

Els atributs sn les variables que defineixen com sn els objectes.


Per indicar els atributs duna classe utilitzareu la cadena var davant del nom de
latribut.
1
2

var $nom;
var $dni;

Normalment, els atributs sn privats, almenys aix es recomana. Daquesta


manera, no shi pot accedir directament des de fora de la classe i sha de crear
un mtode per accedir-hi. Per tant, quedaria:
1
2

private $nom;
private $dni;

Els mtodes sn les funcions que defineixen el comportament dels objectes.


Igual que els atributs, els mtodes tamb poden ser privats. Si us trobeu atributs
o mtodes que no indiquen laccessibilitat es consideren dmbit pblic. Si voleu
marcar explcitament que sn pblics heu de fer servir la partcula public.
En cas que es cridi un mtode dins el context dun objecte, podreu utilitzar la
pseudovariable $this, la qual fa referncia al mateix objecte.
1
2
3
4

public function anomenar($nom)


{
$this>nom=$nom;
}

5
6
7
8
9

public function dades($dni)


{
$this>dni=$dni;
}

Llenguatges de guions de servidor

Llenguatges de guions de servidor

72

Llenguatges de guions de servidor

10
11
12
13
14
15
16
17

public
{
echo
echo
echo
echo
}

function imprimir()
$this>nom;
<br>;
$this>dni;
<br>;

Vigileu de no confondre variables atributs i variables parmetres. Fixeuvos en


lexemple anterior en qu apareix:
1

$this>dni=$dni;

$this->dni fa referncia a latribut dun objecte i lheu de considerar tot un grup;


en canvi, $dni s una variable parmetre que arriba al mtode. No sanomenen
igual per confondre el programador, tot el contrari, resulta ms senzill, ja que en
definitiva en tots dos casos estem parlant del DNI, un s el DNI de lalumne i
laltre s una variable que fa referncia a un valor que sacabar assignant a un
DNI.

2.3.2 Objectes en PHP


Per treballar amb classes cal que instancieu objectes. Instanciar objectes vol dir
crear un tem que s definit en la classe en qu es referencia.
Els mtodes i les variables donaran personalitat als objectes que creeu.
Per instanciar un objecte caldr que utilitzeu la paraula reservada new. Una vegada
instanciats els objectes, penseu que cada un tindr unes caracterstiques prpies
(indicades en els atributs) i podr fer una srie de funcions (definides en els
mtodes).
A continuaci, es mostra com sinstanciarien dos objectes de la classe Alumne:
1
2

$alumne1=new Alumne();
$alumne2=new Alumne();

Aquests objectes tindran els atributs i mtodes definits en la classe.


Si esteu gestionant la secretaria de lescola i us arriben dos alumnes nhaureu de
crear les fitxes. Per cada alumne es crear un objecte mitjanant new. Per, com
nemmagatzemareu els noms? Aix de senzill:
1
2

$alumne1>anomenar(Anna);
$alumne2>anomenar(Filomena);

La classe Alumne t un mtode que s anomenar, s a dir, donar nom. Per accedir
als mtodes caldr que utilitzeu -> entre el nom de lobjecte i el mtode. Als
mtodes, els podeu passar un parmetre o ms:

Llenguatges de guions de servidor

1
2

73

$alumne1>dades(23344556D);
$alumne2>dades(65544332E);

Heu de tenir en compte que coincideixin el nombre de parmetres dentrada


definits en la classe i el nombre de parmetres que passeu al mtode.
El segent exemeple, el mtode dades s definit en la classe Alumne i espera rebre
tres parmetres: un DNI, una data de naixement i un cicle formatiu.
1

<?php

2
3
4
5
6
7

class Alumne
{
var $dni;
var $dataNaixement;
var $cicleFormatiu;

8
9
10
11
12
13
14

public function dades($dni, $dataNaixement, $cicleFormatiu)


{
$this>dni = $dni;
$this>dataNaixement = $dataNaixement;
$this>cicleFormatiu = $cicleFormatiu;
}

15
16
17
18
19
20
21

public
{
echo
echo
echo
}

function imprimir()
$this>dni . "<br>";
$this>dataNaixement . "<br>";
$this>cicleFormatiu . "<br>";

22
23

24
25
26
27
28
29
30

$alumne1 = new Alumne();


$alumne1>dades(12345678A, 12/12/12, ASIX);
$alumne1>imprimir();
$alumne2 = new Alumne();
$alumne2>dades(98765432B, 1/1/1, DAM);
$alumne2>imprimir();

31
32

?>

Mtodes constructors

Normalment, totes les classes tenen un mtode que sencarrega dinicialitzar els
objectes. No s usual anar creant els objectes per parts, sin que hi ha un mtode
que sencarrega diniciar directament lobjecte.

Un mtode constructor s un mtode especial que sencarrega dinicialitzar


els atributs de lobjecte que es crea; s el primer mtode que sexecuta quan
es crea un objecte i es crida automticament.
Lexemple segent seria el mtode constructor duna classe Alumne:
1
2
3
4
5

public function __construct($nom,$dni)


{
$this>nom=$nom;
$this>dni=$dni;
}

Llenguatges de guions de servidor

Llenguatges de guions de servidor

74

Llenguatges de guions de servidor

Per crear lobjecte caldr que utilitzeu la partcula new:


1

$alumne3=new Alumne("Carles","39485764R");

Automticament, el PHP va a buscar dins la classe Alumne el mtode constructor,


que estar sempre identificat amb la cadena function __construct.
Vigileu, no ho escriviu malament! De vegades, segons el tipus de font no queda
clar que abans de construct van dos guions baixos.

2.3.3 Herncia en PHP


Per considerar un llenguatge com a orientat a objectes, aquest ha de tenir en compte
lherncia obligatriament.

Lherncia permet crear noves classes a partir de classes ja existents;


aquestes noves classes tenen els atributs i mtodes no protegits de les classes
ja existents.
En el llenguatge de
programaci C++, lherncia
mltiple s permesa, s a
dir, que una classe hereti de
ms duna classe.

En PHP lherncia s limitada, una classe noms pot heretar duna altra classe.

Sanomenen superclasses les classes de qu deriven altres classes. Les


classes filles sn les que hereten atributs i mtodes.
Per utilitzar lherncia cal fer servir la paraula reservada extends.
A continuaci, es mostra una classe anomenada Persona, que t una srie
datributs i mtodes. Dues classes anomenades Professor i Estudiant hereten
de Persona. Apareix una altra classe anomenada Becari, que hereta de la classe
Estudiant. Podeu veure que hi podeu afegir ms atributs i mtodes.
1
2
3
4
5

<html>
<head>
<title>Exemple amb Herncia</title>
</head>
<body>

6
7

<?php

8
9
10
11
12

class Persona
{
private $nom;
private $dni;

13
14
15
16
17
18

public function __construct($nom,$dni)


{
$this>nom=$nom;
$this>dni=$dni;
}

19
20
21

public function dades_persona()


{

Llenguatges de guions de servidor

echo $this>nom.<br>;
echo $this>dni.<br><br>;

22
23

24
25

75

26
27
28
29
30
31
32
33
34

class Professor extends Persona


{
private $sou;
public function salari($sou)
{
$this>sou=$sou;
}
}

35
36
37
38

class Estudiant extends Persona


{
private $cicle;

39

public function matricular($cicle)


{
$this>cicle=$cicle;
}

40
41
42
43
44

public function dades_persona()


{
parent::dades_persona();
echo $this>cicle.<br>;
}

45
46
47
48
49
50

51
52
53
54

class Becari extends Estudiant


{
private $sou;

55

public function salari($sou)


{
$this>sou=$sou;
}

56
57
58
59
60
61

62
63
64
65
66
67
68

$professorASI=new Professor(Lola,12345678A);
$professorASI>salari(10);
$alumneASI=new Estudiant(Joana,98765432S);
$alumneASI>matricular(ASI);
$becariASI=new Becari(Anna,38475619T);
$becariASI>salari(8);

69
70
71
72
73

echo $professorASI>dades_persona();
echo $alumneASI>dades_persona();
echo $becariASI>dades_persona();
?>

74
75
76

</body>
</html>

Si observeu la classe Estudiant veureu la lnia segent:


1

parent::dades_persona();

Daix, sen diu sobreescriptura de mtodes.

La sobreescriptura de mtodes consisteix a aprofitar un mtode ja existent


i redefinir-lo.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

76

Llenguatges de guions de servidor

s possible que necessiteu ocultar dades a altres objectes, llavors utilitzareu


private, per si treballeu amb herncia podeu tenir problemes. Les classes filles
no poden accedir als atributs i mtodes privats de les classes pare. Els llenguatges
orientats a objectes ens ofereixen una soluci: fer servir protected.

La classe i les subclasses poden accedir a un atribut o un mtode protected,


per no els objectes creats a partir daquestes classes.
En lexemple segent es protegeix latribut $sou. Per poder-lo canviar sha creat
la funci salari:
1
2
3
4
5

<html>
<head>
<title>Exemple amb protected</title>
</head>
<body>

6
7
8
9
10
11
12

<?php
class Persona
{
var $nom;
private $dni;
protected $sou;

13

public function anomena($nom)


{
$this>nom=$nom;
}

14
15
16
17
18

public function fitxa($dni)


{
$this>dni=$dni;
}

19
20
21
22
23

public function salari($sou)


{
$this>sou=$sou;
}

24
25
26
27
28

public function mostra_dades()


{
echo $this>nom.<br>;
echo $this>dni.<br>;
echo $this>sou.<br>;
}

29
30
31
32
33
34
35

36
37
38
39
40

class Professor extends Persona


{
private $especialitat;

41

public function assigna_especialitat($especialitat)


{
$this>especialitat=$especialitat;
}

42
43
44
45
46

47
48
49
50
51
52
53
54

$nouProfessor=new Professor();
$nouProfessor>nom=Andrea;
$nouProfessor>dni=38293847Y;
//$nouProfessor>sou=10;
$nouProfessor>salari(10);
$nouProfessor>assigna_especialitat(Informtica);
echo $nouProfessor>mostra_dades();

Llenguatges de guions de servidor

55
56
57

77

?>
</body>
</html>

Si descomenteu la lnia,
1

//$nouProfessor>sou=10;

us donar lerror segent:


1

Fatal error: Cannot access protected property Professor::$sou

s a dir, esteu intentant accedir directament a un valor protegit. Aprofitant


lexemple anterior podreu veure que sest intentant donar valor a latribut dni,
quan aquest s privat; aix no genera error, per no fa res, no emmagatzema cap
valor.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

79

Llenguatges de guions de servidor

3. Accs a bases de dades des de PHP

El major benefici de treballar amb pgines dinmiques s que podeu agafar la


informaci que shi mostrar duna base de dades, en lloc dhaver de tenir-la dins
del codi o a un fitxer extern. Ls de MySQL amb PHP s molt popular en el
desenvolupament daplicacions web.

3.1 Gestors de bases de dades ms usats


Existeixen diferents bases de dades al mercat que podeu fer servir per crear la
vostra pgina web amb bases de dades. s important conixer-ne les ms populars
per tal de poder decidir en cada cas quina ser lptima per vosaltres.
MySQL: s una plataforma gratuta i molt adequada per aprendre. s
possiblement una de les bases de dades ms rpides que podem trobar, a
ms de consumir pocs recursos de la mquina on est installada. Es tracta
dun sistema relativament fcil dinstallar i administrar enfront daltres
productes del mercat. Es recomana per iniciar-se en el mn de les bases de
dades, ja que disposa de moltes utilitats, manuals i documentaci que la immensa comunitat dusuaris sha encarregat de realitzar desinteresadament.
La gesti de la base de dades utilitza lSQL (Structured Query Language), a
ms dutilitzar protocols de comunicaci de bases de dades desenvolupades
per Microsoft, mitjanant ODBC o ADO.
PostgreSQL: s un gestor de bases de dades usat principalment per grans
organitzacions en aplicacions crtiques o importants. PostgreSQL s la
segona base de dades ms popular implantada en el mercat GNU/Linux.
El PostgreSQL es va dissenyar com una base de dades orientada a objectes,
s a dir, una ORDBMS, amb la qual el concepte de taules el substitum per
objectes, i es permet crear nous tipus de dades, fer herncies entre objectes,
etc. El PostgreSQL s, sens dubte, una de les bases de dades que ha aportat
ms implementacions per als experts. Disposa dall que al MySQL li falta,
per tamb li falta tot all que el MySQL t. El PostgreSQL t transaccions,
integritat referencial, vistes i un gran nombre de funcionalitats, a canvi de
convertir-se en un motor ms lent i pesat que MySQL.
Oracle: s un dels sistemes de gesti de bases de dades relacional ms
importants. Est disponible en una varietat de configuracions, des de petites
versions personals fins a versions empresarials.
Microsoft Access: s un sistema de pagament que permet fer un disseny
de la base de dades mitjanant una eina grfica. T certes limitacions

ORDBMS
(Object-Relational Database
Management System,
sistema de gesti de bases
de dades
objecte-relacionals) s un
sistema gestor de bases de
dades similar als
relacionals, per amb un
model de bases de dades
objecte-relacionals amb
objectes, classes i herncia.

Llenguatges de guions de servidor

80

Llenguatges de guions de servidor

importants (com ara el nmero de connexions concurrents que pot tractar)


i hi ha pocs sistemes operatius sobre els quals pot funcionar.
Microsoft SQL Server: est dissenyat per crear webs i sistemes de bases
de dades empresarials descriptori. Permet emmagatzemar grans quantitats
dinformaci comparat amb lAccess.
Farem servir MySQL perqu: s ideal per aplicacions petites, encara que al ser
escalable tamb es pot fer servir per aplicacions grans; s molt rpid, confiable i
fcil dusar; fa servir SQL estndard; compila una gran quantitat de plataformes;
i, finalment, perqu s gratuit de descarregar i usar.

3.2 Gesti de bases de dades amb PHPMyAdmin


PHPMyAdmin s una eina lliure i gratuta escrita en PHP que permet controlar
ladministraci de MySQL des dun navegador web. Permet realitzar diferents
tasques com ara crear, modificar o esborrar bases de dades, taules, camps o files...
executant ordres SQL.
Si shi accedeix amb un usuari que sigui administrador del MySQL, el phpMyAdmin permet gestionar totes les bases de dades existents del servidor. Altrament,
noms es mostren les bases de dades a les quals es t accs. Els usuaris
administradors tenen accs a una base de dades anomenada mysql (base de dades
de control) que serveix per configurar el motor de bases de dades. s molt
important no tocar-la ni fer-hi canvis a no ser que es spiga perfectament el que
sest fent. En cas contrari, el MySQL podria deixar de funcionar o quedar
inoperatiu.
Per
accedir-hi
heu
dentrar
http://localhost/phpmyadmin.

des

del

navegador

ladrea

Una vegada introdudes les dades daccs (nom i contrasenya) heu de veure una
pantalla com la de la figura 3.1.
Figura 3.1. Pantalla inicial de PHPMyAdmin

Llenguatges de guions de servidor

81

El phpMyAdmin divideix la finestra en dos marcs. El de lesquerra ofereix un


men desplegable amb les bases de dades a les quals es t accs (si sn ms duna)
i les taules de la base de dades seleccionada. El marc de la dreta s el lloc en el
qual es mostra la informaci de la navegaci. Inicialment mostra una pantalla de
benvinguda amb diversos enllaos.
En clicar al nom de les taules que es mostren en el marc de lesquerra es pot veuren
lestructura (els camps) en el marc de la dreta i apareix un men horitzontal que
permet accedir a les diverses funcionalitats de laplicaci.
Si seleccioneu una base de dades existent (per exemple mysql) veureu per defecte
un llistat de totes les taules que existeixen en la base de dades, tal com podeu veure
a la figura 3.2.
Figura 3.2. Vista de base de dades

Si feu clic a qualsevol de les taules, podreu veure lestructura de la taula, examinarne el registres o inserir-ne un de nou.
Fent clic a la pestanya SQL podeu inserir consultes directament fent servir sintaxi
SQL. Aix s molt til quan esteu programant, ja que podeu comprovar si les
consultes que esteu realitzant durant el programa sn correctes o no. Simplement
copieu el text de la consulta a la caixa i feu clic a Continuar. Podreu veure els
registres resultants de la consulta que heu fet.
Finalment, amb lopci Exportar podeu extraure les dades de la base de dades a
un fitxer de text pla que podreu importar posteriorment, amb lopci Importar, a
una base de dades MySQL.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

82

Llenguatges de guions de servidor

3.3 Connexi amb el servidor MySQL


Lestructura per accedir a una base de dades s molt semblant al protocol per
accedir a un fitxer:
1. Obrir la base de dades.
2. Trametre la comanda SQL a la base de dades.
3. Retornar el resultat de la consulta.
4. Tancar la connexi de la base de dades.
Abans de poder accedir a les dades en una base de dades, sha de crear una
connexi amb la base de dades. En PHP per connectar amb la base de dades
MySQL aix es fa amb la funci mysql_connect().
1

recurs = mysql_connect(nom del servidor, nom dusuari, contrasenya, nou enlla,


senyals de client);

La funci mysql_connect() retorna una connexi amb el servidor MySQL


Server en cas dxit, o FALSE i un error en cas de fallada. Podeu amagar la sortida
derror mitjanant laddici duna @ davant del nom de la funci.
Aquesta s la descripci dels parmetres:
Nom del servidor: s opcional. Especifica el servidor MySQL al qual
connectar. Pot incloure un nmero de port, per exemple Servidor: port
o una ruta, per exemple, :/cam/al/directori per al localhost. Si la directiva
de PHP mysql.default_host no est definida (per defecte), llavors el valor
per defecte s localhost: 3306. En el mode SQL segur, aquest parmetre
signora i localhost: 3306 sutilitza sempre.
Nom dusuari: s opcional. Especifica el nom dusuari per iniciar la sessi.
El valor per defecte s el nom de lusuari propietari del procs del servidor
que est definit per la directiva mysql.default_user. En el mode SQL segur,
aquest parmetre signora i susa el nom de lusuari propietari del procs
del servidor.
Contrasenya: s opcional. Especifica la contrasenya per iniciar sessi. El
valor per defecte s definit per la directiva mysql.default_password. En el
mode SQL segur, aquest parmetre no es t en compte i susa la contrasenya
buida.
Nou enlla: s opcional. Si es fa una segona trucada a mysql_connect()
amb els mateixos arguments, no sestableix un nou enlla, en el seu lloc,
es retornar lidentificador denlla de lenlla ja obert . El parmetre nou
enlla modifica aquest comportament i fa que mysql_connect() sempre
obri un nou vincle, encara que shagi cridat a mysql_connect(), amb els
mateixos parmetres. En el mode SQL segur, aquest parmetre signora.

Llenguatges de guions de servidor

83

Senyals de client: s opcional.


El parmetre senyals de client pot ser una combinaci de les segents constants: 128 (habilita el control de LOAD DATA LOCAL), MYSQL_CLIENT_SSL,
MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE o
MYSQL_CLIENT_INTERACTIVE. En el mode SQL segur, aquest parmetre signora.
En el segent exemple semmagatzema la connexi en una variable ($connexio)
per al seu s posterior. Si la connexi falla sexecutar el codi de dins de lif i el
programa sortir.
1

<?php

2
3
4
5
6
7

$connexio = mysql_connect("localhost", "admin", "12345");


if (!$connexio)
{
exit(No es pot connectar:. mysql_error());
}

8
9
10

echo "Connexi correcta!";


?>

La funci exit() mostra un missatge i surt de lexecuci del codi. La funci


mysql_error() retorna un text amb un missatge derror de la darrera operaci
MySQL que sha executat.

3.4 Tancar la connexi a la base de dades


La funci de PHP mysql_close(), tanca una connexi MySQL. Aquesta funci
retorna TRUE si t xit, o FALSE en cas de fallada.
T un nic argument opcional que s la connexi MySQL per tancar. Si no
sespecifica, sutilitza lltima connexi oberta per mysql_connect().
Ls de mysql_close() no s imprescindible, ja que les connexions no persistents
sn tancades automticament al final de lexecuci de lscript PHP.
Aqu teniu un exemple dutilitzaci:
1

<?php

2
3
4
5
6
7

$connexio = mysql_connect("localhost", "admin", "12345");


if (!$connexio)
{
exit(No es pot connectar:. mysql_error());
}

8
9

echo "Connexi correcta!<br>";

10
11

mysql_close($connexio);

12
13
14

echo "Connexi tancada";


?>

Llenguatges de guions de servidor

Llenguatges de guions de servidor

84

Llenguatges de guions de servidor

3.5 Selecci de la base de dades


Abans de comenar a treballar amb una base de dades del servidor, lhem de seleccionar. Per fer-ho, existeix la funci mysql_select_db($nom, $connexio)
que agafa dos arguments que especifiquen el nom de la base de dades que volem
escollir, i la connexi al servidor que hem fet amb anterioritat, respectivament. La
funci retorna TRUE en cas dxit, i FALSE en cas derror.
Aqu teniu un exemple dutilitzaci de la funci:
1

$connexio = mysql_connect("localhost", "usuari", "12345");

2
3
4
5
6

if (!$connexio)
{
exit(No es pot connectar:. mysql_error());
}

7
8
9

if(!mysql_select_db("taula_equips", $connexio))
exit("Error al connectar amb la base de dades". mysql_error());

3.6 Treball amb la base de dades


Amb una base de dades es poden fer diverses operacions: consultar dades, inserir
dades, actualitzar dades i esborrar dades.
Per aquestes operacions lestructura del codi de programaci s exactament igual.
Sempre que es programa una connexi a una base de dades MySQL shan de fer
els passos segents:
1. Connexi al servidor MySQL: per fer aquesta operaci sutilitza la funci
mysql_connect($servidor, $usuari, $contrasenya). La funci retorna un valor del tipus resource (recurs), que representa la connexi amb
la base de dades.
2. Selecci de la base de dades amb la qual es treballa: amb
mysql_select_db($nom_BD, $connexi).
Sha dindicar el nom
de la base de dades amb la qual es vol treballar i de la connexi amb el
servidor.
3. Fer
la
consulta/operaci
mysql_query($consulta).

necessria

amb

la

funci

4. Podeu comprovar quantes files ha retornat un SELECT o han estat inserides


modificades. Per consultar quantes files ha retornat un consulta, podeu fer
servir la funci mysql_num_rows ($result) que retorna el nmero de
files que shan seleccionat amb un SELECT o SHOW. Per consultar quantes
files han estat inserides, modificades o esborrades amb INSERT, UPDATE,
REPLACE o DELETE, podeu fer servir la funci mysql_affected_rows().

Llenguatges de guions de servidor

85

5. Si s una operaci de consulta de dades (com un SELECT), falta llegir les


dades que retorna la consulta SQL. Per fer-ho podeu fer servir la funci
mysql_fetch_array($result) que retorna els valors en forma de matriu
associativa en la qual les claus sn les columnes de la taula. Retorna FALSE
si no hi ha ms files.

3.6.1 Inserci dinformaci


Per afegir registres a la base de dades heu de fer servir una consulta MySQL de
tipus INSERT que t la segent estructura:
1
2

INSERT INTO nom_taula [(columna1, columna2, ...)]


VALUES (valor1, valor2,...);

Podeu consultar la sintaxi completa a:


http://dev.mysql.com/doc/refman/5.5/en/insert.html
Per exemple:
1

"INSERT INTO discos (titol, autor, any) VALUES (Axis: Bold as love, The Jimi
Hendrix Experience, 1967)";

El segent exemple mostra un codi sencer dinserci de dades a una base de dades:
1
2

$usuari = "admin";
$contrasenya = "admin";

3
4
5
6
7

// Connexi amb el servidor de base de dades i selecci de la base de dades


$connexio = mysql_connect("localhost", $usuari, $contrasenya);

8
9
10

if (!$connexio)
exit(No es pot connectar:. mysql_error());

11
12
13

if(!mysql_select_db("llibreria", $connexio))
exit("Error al connectar amb la base de dades". mysql_error());

14
15

16

//Com que no inserirem totes les dades (id s autoincremental) shan d


especificar els camps
$consulta = "INSERT INTO llibres (titol, autor, any) VALUES (Norwegian Wood,
Haruki Murakami, 2000)";

17
18
19

// Fem la consulta al servidor i obtenim la resposta


$resultat = mysql_query($consulta, $connexio);

20
21
22
23
24
25
26
27

if (!$resultat)
{
$missatge = Query incorrecta: . mysql_error() . "\n";
$missatge .= Query sencera: . $consulta;
exit($missatge);
}

28
29
30

echo "Dades introdudes correctament!!";

Llenguatges de guions de servidor

Llenguatges de guions de servidor

86

Llenguatges de guions de servidor

Podeu comprovar posteriorment que shan inserit les dades (amb una consulta
MySQL o des de PHPMyAdmin, per exemple).
La grcia de les pgines dinmiques s que la informaci que sha dinserir a la
base de dades no s esttica, com en aquest exemple, sin que sn valors que
introdueixen els usuaris. Aquesta tasca es fa mitjanant ls de formularis. La
seqncia daccions s la segent:
1. Lusuari introdueix dades amb un formulari.
2. Quan valida el formulari amb el bot, senvien les dades utilitzant el mtode
POST o GET.
3. Rebudes les dades del formulari es fa la connexi a la base de dades i la
inserci de les dades.

3.6.2 Consulta dinformaci


Per realitzar una consulta a la base de dades per obtenir informaci, heu de fer
servir una sentncia SELECT, que t la segent forma:
1
2
3
4
5
6
7
8
9
10

SELECT
expressi
FROM taula
WHERE condici
[GROUP BY {columna | expressi | posici}
[ASC | DESC]]
[HAVING condici]
[ORDER BY {columna | expressi | posici}
[ASC | DESC]]
[LIMIT {[desplaament,] num_files | num_files OFFSET offset}]

Podeu consultar la sintaxi completa a:


http://dev.mysql.com/doc/refman/5.6/en/select.html
Per exemple:
1

SELECT nom, dni FROM usuaris WHERE uid=1

Una vegada creada la consulta i emmagatzemada a una variable, podeu executar-la


sobre la base de dades amb la funci mysql_query($consulta, $connexio).
www.php.net/manual/en/function.mysql-query.php
Aquesta funci:
Per consultes del tipus SELECT, SHOW, DESCRIBE, EXPLAIN retorna una
variable de tipus resource (recurs) en cas dxit i FALSE en cas derror.
Per consultes INSERT, UPDATE, DELETE, DROP, retorna TRUE en cas dxit i
FALSE en cas derror.

Llenguatges de guions de servidor

87

Una vegada heu fet la consulta SELECT, podeu esbrinar quantes files ha retornat la
consulta amb la funci int mysql_num_rows($result) que retorna el nmero
de files que ha retornat el SELECT o FALSE en cas derror.
Per obtenir les dades del resultat de la consulta feu servir la funci array
mysql_fetch_array ($resultat, $tipus) que retorna un array associatiu
que correspon a una fila del resultat de la consulta (i avana el punter que indica
la fila a mostrar).
Largument $tipus indica el tipus de larray associatiu que sobt. s una
constant que pot agafar els segents valors: MYSQL_ASSOC, MYSQL_NUM o
MYSQL_BOTH (que s el valor per defecte). Si deixeu aquest parmetre en blanc
o seleccioneu MYSQL_BOTH obtindreu un array amb el qual podeu accedir als
elements tant pel nmero de la columna, com pel seu nom.
La funci va retornant les diferent files resultants del SELECT segons com s
cridada, fins que arriba a lltima fila resultant, en la qual retorna FALSE.
Per tant, per obtenir totes les dades de retorn dun SELECT, heu de cridar a
mysql_fetch_array dins dun bucle fins que la funci us retorni FALSE. Per
exemple:
1

$result = mysql_query("SELECT id, nom FROM taula");

2
3
4
5

while ($fila = mysql_fetch_array($result, MYSQL_BOTH))


{
printf("ID: %s Nom: %s", $fila[0], $fila[1]);

//com fem servir MYSQL_BOTH, s igual a


printf("ID: %s Nom: %s", $fila["id"], $fila["nom"]);

7
8
9

En aquest altre exemple es mostren els continguts dins duna taula.


1
2

// Connexi amb el servidor de base de dades i selecci de la base de dades


$connexio = mysql_connect("localhost", $usuari, $contrasenya);

3
4
5

if (!$connexio)
exit(No es pot connectar:. mysql_error());

6
7
8

if(!mysql_select_db("llibreria", $connexio))
exit("Error al connectar amb la base de dades". mysql_error());

9
10
11

//Definim la consulta que recuperar totes les dades de la taula llibres


$consulta="SELECT * FROM llibres";

12
13
14

//Fem la consulta al servidor i obtenim la resposta


$resultat = mysql_query( $consulta, $connexio);

15
16
17
18

//Si tenim resultats els mostrarem


if( mysql_num_rows($resultat) > 0)
{

19
20
21
22
23
24
25
26
27

//Creem una taula per posar els resultats


echo "<table border = 1>";
echo "<tr>";
echo "<td>id</td>";
echo "<td>titol</td>";
echo "<td>autor</td>";
echo "<td>editorial</td>";
echo "</tr>";

28
29

// Mentre hi hagi resultats els afegim a la taula

Llenguatges de guions de servidor

Llenguatges de guions de servidor

88

Llenguatges de guions de servidor

while($fila = mysql_fetch_array($resultat))
{

30
31
32

//Hi afegim una filera i recuperem els valors utilitzant la matriu


associativa que guardem a $fila a cada iteraci
echo "<tr>";
echo "<td>".$fila[id]."</td>";
echo "<td>".$fila[titol]."</td>";
echo "<td>".$fila[autor]."</td>";
echo "<td>".$fila[editorial]."</td>";
echo "</tr>";

33

34
35
36
37
38
39

40
41

//fi de la taula
echo "</table>";

42
43
44
45
46
47
48

}
else
{
echo "No hi ha cap resultat";
}

3.6.3 Modificaci dinformaci


Per modificar la informaci de la base de dades heu de fer servir la consulta UPDATE
de MySQL que t la segent forma:
1
2
3

UPDATE taula
SET nomColumna1={expressi1|DEFAULT},
nomColumna2={expressi2|DEFAULT}...

WHERE condici
[LIMIT numero_files]

5
6

Podeu veuren la sintaxi completa a:


http://dev.mysql.com/doc/refman/5.6/en/update.html
Per exemple:
1

UPDATE taula SET id=200 WHERE id=2

o
1

UPDATE taula1 SET col1 = col1 + 1, col2 = col1;

No cal posar les cometes a la condici WHERE.


La fareu servir mitjanant la funci mysql_query($consulta). Posteriorment
podeu fer servir la funci mysql_affected_rows() per obtenir la quantitat de
files modificades amb la sentncia.
En el segent exemple es modifiquen les dades a una base de dades en funci dels
valors enviats per un formulari HTML.
1
2

//Connexi amb la base de dades i selecci base dades llibreria


$enllac = connexioBaseDades();

Llenguatges de guions de servidor

89

3
4
5
6
7

if ( isset($_POST[actualitza]) )
{
//Lusuari ha decidit enviar al servidor les noves dades actualitzades
$consulta = "UPDATE llibres SET titol=".$_POST[titol].", autor=" .
$_POST[autor]. ", editorial=".$_POST[editorial]." WHERE id=".
$_POST[id];

$resultat = mysql_query( $consulta, $enllac);

9
10

$err = mysql_error();
if( $err != "" )
echo "error=$err <br>";

11
12
13
14

printf("Registres modificats: %d\n", mysql_affected_rows());

15
16
17
18

3.6.4 Esborrar registres


Per esborrar registres duna taula heu de fer servir una consulta DELETE que t la
segent forma:
1
2
3
4

DELETE FROM taula


[WHERE condici]
[ORDER BY ...]
[LIMIT numero_files]

Podeu trobar-ne la sintaxi sencera a:


http://dev.mysql.com/doc/refman/5.6/en/delete.html
Per exemple:
1

DELETE FROM taula WHERE id < 10

La fareu servir mitjanant la funci mysql_query($consulta). Posteriorment


podeu fer servir la funci mysql_affected_rows() per obtenir la quantitat de
files modificades amb la sentncia.
Al segent exemple sesborra un element especificat per un formulari HTML de
la taula llibres:
1
2
3
4
5
6

if( isset($_POST[id]) )
{
//Definim la consulta que esborra el registre seleccionat
$consulta="DELETE FROM llibres WHERE id =".$_POST[id];
//Fem la consulta al servidor i obtenim la resposta
$resultat = mysql_query($consulta, $connexio);

7
8
9
10
11

//Mireu una forma alternativa de veure si hi ha hagut un error


$err = mysql_error();
if( $err != "" )
echo "error=$err <br>";

12

printf("Registres esborrats: %d\n", mysql_affected_rows());

13
14

Llenguatges de guions de servidor

Llenguatges de guions de servidor

90

Llenguatges de guions de servidor

3.6.5 Gesti derrors


La funci mysql_error($connexio) retorna un text amb la descripci de lerror
de lltima funci MySQL que sha executat. Per tant, lheu dexecutar justament
desprs de la funci de la qual voleu saber lerror.
En el cas de que no hi hagi cap error, retorna una cadena buida ().
El parmetre connexi s opcional. Especifica la connexi MySQL. Si no
sespecifica, sutilitza lltima connexi oberta per mysql_connect().
La funci mysql_errno retorna el nmero derror de la sentncia SQL anterior.
En aquest exemple podeu veure com tractar una srie derrors treballant amb bases
de dades:
1
2

<?php
$connexio = mysql_connect("localhost", "usuari", "contrasenya");

3
4
5

mysql_select_db("bd_inexistent", $connexio);
echo mysql_errno($connexio) . ": " . mysql_error($connexio). "\n";

6
7
8
9
10
11

mysql_select_db("coses", $connexio);
mysql_query("SELECT * FROM bd_inexistent", $connexio);
echo mysql_errno($connexio) . ": " . mysql_error($connexio) . "\n";
?>

3.7 Creaci duna base de dades


Hi ha diverses formes de crear una base de dades. Generalment la creaureu amb
una eina com pot ser PHPMyAdmin, encara que ho podeu fer tamb des del codi.
Per crear una base de dades a MySQL es fa servir la sentncia:
1

mysql> CREATE DATABASE Nom_base_de_dades;

En ambients Unix, els noms de les bases de dades sn case sensitive (al contrari
que les paraules clau), de manera que sempre sha de referir a la base de dades
exactament igual (i no nom_base_de_dades o NOM_BASE_DE_DADES). Aix
tamb saplica als noms de taules. Aquesta restricci no existeix a Windows,
encara que pot utilitzar el mateix esquema de majscules quan es refereixi a bases
de dades i taules en una consulta donada.
La comanda mysql_query() de PHP envia una sentncia a la base de dades. Per
tant podeu fer-la servir per crear una base de dades al servidor:
1
2

<?php
$sql = CREATE DATABASE LaMevaBD;

3
4

//$con cont la connexi a la BD

Llenguatges de guions de servidor

5
6
7
8
9
10
11

91

if (mysql_query($sql, $con))
{
echo "Sha creat la Base de dades LaMevaBD\n";
} else {
echo Error al crear la base de dades: . mysql_error() . "\n";
}
?>

En crear una base de dades, aquesta no es selecciona per al seu s automticament,


sha de fer explcitament. La sintaxi per fer-ho a MySQL s
1

mysql> USE Nom_base_de_dades

Les bases de dades noms necessiten ser creades un sol cop, per han de ser
seleccionades cada vegada que sinicia una sessi de MySQL. Es pot fer a travs
de la comanda USE com es mostra a lexemple. Quan accediu al MySQL des de
consola ho podeu indicar en la lnia de comandes en executar MySQL. Simplement
sha dindicar el nom de la base de dades a continuaci dels parmetres que
necessiteu per ingressar. Per exemple:
1

shell> mysql h host o user p LaMevaBD

Advertiu que en la comanda anterior LaMevaBD no s la contrasenya. Si es


volgus subministrar la contrasenya en la lnia de comandes, desprs de lopcip, sha de fer sense deixar espais en blanc (per exemple,-pcontrasenya , no -p
contrasenya). De tota manera, escriure la contrasenya en la lnia de comandes no
s recomanable perqu ho exposa a la vista daltres usuaris.
Per eliminar una base de dades a PHP, igual que per la creaci duna base de
dades, utilitzareu la comanda mysql_query() per executar la instrucci DROP
DATABASE, tal com es pot veure en el segent exemple:
1
2
3
4

<?php
$query = DROP DATABASE LaMevaBD;
$result = mysql_query($query,$con);
?>

Podeu veure el contingut de les taules amb lordre de MySQL SHOW TABLES
directament sobre MySQL:
1
2

mysql> SHOW TABLES;


Empty setembre (0.00 sec)

En un principi la base de dades recent creada est buida.

3.7.1 Creaci de taules


A MySQL podeu emprar la sentncia CREATE TABLE per especificar lestructura
duna taula:

Llenguatges de guions de servidor

Llenguatges de guions de servidor

92

1
2
3
4
5
6

Llenguatges de guions de servidor

CREATE TABLE nom_taula


(
nom_columna1 tipus_dades,
nom_columna2 tipus_dades,
nom_columna3 tipus_dades,
)

Sempre que voleu executar ordres al MySQL podeu fer servir la funci de PHP
mysql_query(). En aquest cas sha dexecutar la instrucci de MySQL CREATE
TABLE, com es pot veure en el segent exemple:
1
2
3
4
5
6
7
8
9

<?php
// Seleccionareu la Base de Dades
mysql_select_db("LaMevaBD", $con);
$sql = "CREATE TABLE nom_taula
(
nom varchar(15),
cognom varchar(15),
anys int
)";

10
11
12
13

// Executareu la consulta
mysql_query($sql,$con);
?>

Desprs de crear la taula, des de MySQL amb la comanda SHOW TABLES shauria
de produir la segent sortida:
1
2
3
4
5
6

mysql> SHOW TABLES;


+ +
| Tables in LaMevaBD
|
+ +
| nom_taula
|
+ +

Per verificar que la taula ha estat creada en la forma esperada, utilitzeu la sentncia
DESCRIBE a MySQL:
1
2
3
4
5
6
7
8

mysql> DESCRIBE
+ +
| Field | Type
+ +
| col1 | tipus
| col2 | tipus
| col3 | tipus
+ +

nom_taula;
+ +
| Null | Key
+ +
| ca
|
| ca
|
| ca
|
+ +

+
|
+
|
|
|
+

+ +

Default | Extra |
+ +

NULL
NULL
NULL

|
|
|
+

|
|
|
+

La sentncia DESCRIBE pot ser utilitzada en qualsevol moment, per exemple, si


oblideu els noms o el tipus de dades de les columnes de la taula.
Per acabar veureu un exemple on es crea la base de dades Alumnes_IOC i safegeix
una taula alumnes amb tres columnes nom, cognom i anys.
1
2
3
4
5

<?php
$dbhost = localhost;
$dbusuari = root;
$dbcon = contrasenya;
$con =mysql_connect($dbhost, $dbusuari,$dbcon);

6
7
8

if (!$con)
{

Llenguatges de guions de servidor

exit(Error al connectar amb


);

10

93

la

base de dades de mysql: . mysql_error()

11
12

$sql = CREATE DATABASE Alumnes_IOC;

13
14
15
16
17
18
19
20
21

if (mysql_query($sql, $con))
{
echo "Sha creat la Base de dades Alumnes_IOC\n";
}
else
{
echo Error al crear la base de dades: . mysql_error() . "\n";
}

22
23
24
25
26
27
28
29
30

// Seleccionareu la Base de Dades


mysql_select_db(Base_de_Dades, $con);
$sql = "CREATE TABLE alumnes
(
nom varchar(15),
cognom varchar(15),
anys int
) ;

31
32
33

// Executareu la consulta
mysql_query($sql,$con);

34
35
36

// Tancareu la connexi
mysql_close($con);

37
38

?>

3.8 Mecanismes de seguretat


La seguretat s un tema complex que requereix una planificaci a tots els nivells
en qu sest treballant la pgina web i la base de dades. Per una banda fareu servir
contrasenyes que el ms adequat s que guardeu de forma encriptada a la base de
dades.
Els usuaris nicament han de poder accedir a les pgines del web a les quals tenen
permisos. Per exemple, un usuari alumne de lIOC no t accs a ledici de laula.
Per altra banda, els usuaris de la base de dades, han de tenir nicament la capacitat
daccedir a les dades estrictament necessries. Els usuaris dins de la base de dades
tamb tenen un accs limitat a ella.

3.8.1 Codificaci de la informaci


Podeu fer servir lalgorisme MD5 per codificar les dades confidencials dins de la
base de dades. Podeu trobar-ne lespecificaci aqu:
www.faqs.org/rfcs/rfc1321.html

Llenguatges de guions de servidor

Llenguatges de guions de servidor

94

Llenguatges de guions de servidor

Afortunadament MD5 est implementat directament a PHP, per aix podeu


calcular lMD5 duna cadena simplement cridant a una funci.
La funci string md5 ($cadena) encripta la cadena fent servir lalgorisme
MD5 i la retorna en forma de nmero hexadecimal de 32 carcters.
Ls de lalgorisme SHA1 o MD5 no s estrictament segur per emmagatzemar les dades, tal com podeu veure a aquest article de PHP.net
(www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash), per per
fer les nostres proves tindr una seguretat suficient i servir per aprendre a treballar
amb claus encriptades.
El segent s un exemple molt senzill en el qual es veu el funcionament de la
funci:
1
2

<?php
$str = apple;

3
4
5
6
7
8

if (md5($str) === 1f3870be274f6c49b3e31a0c6728957f)


{
echo "Tens un ordinador Apple";
}
?>

En el segent exemple es veu com crear una consulta on es comprova si el valor


de nom i contrasenya obtingut dun formulari est a la base de dades:
1

$consulta = sprintf(select * from usuaris where nom="%s" and passwd = "%s",


$_POST["nom"], $_POST["passwd"]);

En el cas que les claus estiguessin encriptades a la base de dades, es podria crear
la consulta aix:
1

$consulta = sprintf(select * from usuaris where nom="%s" and passwd = "%s",


$_POST["nom"], md5($_POST["passwd"]));

La funci sprintf() de PHP funciona de forma semblant a la versi de C. s


com un printf, per en lloc mostra el resultat per pantalla, el retorna a un string.
Us pot resultar molt til per crear consultes. Podeu veure aqu lespecificaci
completa de la funci:
www.php.net/manual/en/function.sprintf.php
En aquest cas, recordeu que quan creeu un usuari, la seva clau tamb haur destar
encriptada. Per exemple
1

$consulta = sprintf(INSERT into usuaris (nom, passwd, administrador) VALUES


("%s","%s","%s"), $_REQUEST["nom"], md5($_REQUEST["passwd"]), $_REQUEST["
administrador"]);

Llenguatges de guions de servidor

95

3.8.2 Accs restringit a pgines


Una caracterstica molt habitual dels webs actualment s la de presentar diferents
continguts del web depenent de quin sigui el perfil de lusuari. Tamb hi ha certes
pgines que poden estar protegides per tal dimpedir laccs als usuaris que no
tenen els privilegis necessaris.
Per exemple, un usuari que no est registrat a www.amazon.com pot navegar i
veure els productes que estan a la venda. Per no podr realitzar compres a
no ser que estigui registrat, i que hagi iniciat una sessi. Digual manera, un
usuari registrat no podr accedir a les pgines dadministraci del web si no t
els permisos necessaris.
Per implementar aquests permisos daccs podeu fer servir sessions o emmagatzemar a la base de dades lestructura de pgines del web i quins usuaris hi tenen
accs.

3.8.3 Seguretat a la base de dades


Les llistes de control daccs (ACL en angls Access Control List) sn el mecanisme de seguretat que utilitza MySQL per a totes les connexions i consultes que els
usuaris poden intentar realitzar. Una llista de control daccs controla si un usuari
t permisos per accedir a un objecte. Les sentncies GRANT i REVOKE sutilitzen per
controlar laccs dels usuaris a MySQL. Els permisos poden donar-se en diversos
nivells:
Nivell global: els permisos globals sapliquen a totes les bases de dades
dun servidor donat. Es guarden a la taula mysql.user.
Nivell de base de dades: els permisos de base de dades sapliquen a tots els
objectes en una base de dades especificada. Es guarden a les taules mysql.db
i mysql.host.
Nivell de taula: els permisos de taula sapliquen a totes les columnes en una
taula donada. Es guarden a la taula mysql.tables_priv.
Nivell de columna: els permisos de columna sapliquen a columnes en una
taula donada. Es guarden a la taula mysql.columns_priv.
Nivell de rutina: els permisos de rutina sapliquen a rutines emmagatzemades. Es guarden a la taula mysql.procs_priv.
Per exemple, per donar el perms SELECT sobre tota la base de dades a lusuari
existent francesc, escriureu la segent comanda:
1

GRANT SELECT ON base_dades.* TO francesc@localhost;

Llenguatges de guions de servidor

Llenguatges de guions de servidor

96

Llenguatges de guions de servidor

Per donar ms dun perms a la vegada, shan de separar les opcions amb una coma.
Aix que per atorgar els permisos SELECT, INSERT i DELETE a lusuari francesc,
escriureu la segent comanda:
1

GRANT SELECT, INSERT, DELETE ON base_dades.* TO francesc@localhost;

Un cop heu acabat heu de refrescar els permisos de la memria executant la


comanda flush privileges.
Aqu podeu trobar tota la sintaxi del funcionament de la sentncia GRANT:
http://dev.mysql.com/doc/refman/5.1/en/grant.html
A continuaci es mostra un exemple complet de gesti de permisos daccs:
Primer entreu a la consola MySQL com a usuari root escrivint la segent comanda
i a continuaci entreu la contrasenya:
1
2

# mysql p u root
Enter password:

Un cop a la consola de comandes de MySQL , creareu la base de dades base_de_dades escrivint la segent sentncia:
1
2

mysql> CREATE DATABASE base_de_dades CHARACTER SET utf8 COLLATE utf8_bin;


Query OK, 1 row affected (0.01 sec)

Si ara demanem al MySQL que ens mostri les bases de dades, base_de_dades
apareixer a la llista.
1
2
3
4
5
6
7
8
9
10

mysql> show databases;


++
| Database
|
++
| information_schema |
| base_de_dades
|
| mysql
|
| phpmyadmin
|
++
4 rows in set (0.00 sec)

Ara creareu un usuari anomenat usuari1 amb la contrasenya 123456.


1
2

mysql> CREATE USER usuari1@% IDENTIFIED BY 123456;


Query OK, 0 rows affected (0.00 sec)

Primer donareu el perms de SELECT a la base de dades base_de_dades per lusuari


usuari1.
1
2

GRANT SELECT ON base_de_dades.* TO usuari1@%;


Query OK, 0 rows affected (0.00 sec)

Per comprovar els permisos dun usuari es fa servir la comanda show grants
for usuari1.

Llenguatges de guions de servidor

97

Llenguatges de guions de servidor

mysql> show grants for usuari1


> ;
++

| Grants for usuari1@%

|
++

1
2

| GRANT USAGE ON *.* TO usuari1@% IDENTIFIED BY PASSWORD *6


BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| GRANT SELECT ON base_de_dades.* TO usuari1@%
|
++

2 rows in set (0.00 sec)

Heu pogut comprovar com apareix el perms de SELECT, ara afegirem els permisos
de DELETE i INSERT a lusuari usuari1.
1
2

mysql> GRANT DELETE,INSERT ON base_de_dades.* TO usuari1@%;


Query OK, 0 rows affected (0.00 sec)

Comproveu els privilegis amb la comanda show grants i veureu com lusuari usuari1 t els privilegis SELECT, INSERT, DELETE a la base de dades
base_de_dades.
2

mysql> show grants for usuari1;


++

| Grants for usuari1@%

|
++

| GRANT USAGE ON *.* TO usuari1@% IDENTIFIED BY PASSWORD *6


BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| GRANT SELECT, INSERT, DELETE ON base_de_dades.* TO usuari1@%
|
++

2 rows in set (0.00 sec)

Per acabar i refrescar els permisos de la memria s necessari executar la comanda


flush privileges:
1
2

mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)

3.9 Verificaci i proves


Per verificar el funcionament de MySQL podeu fer servir programari de monitoritzaci que controla la disponibilitat de serveis. Per monitoritzar el servei de
base de dades MySQL heu dinstallar connectors al programari. Entre les eines
de programari de monitoritzaci lliures que existeixen parlarem de:

Llenguatges de guions de servidor

98

Llenguatges de guions de servidor

Nagios
Pandora FMS

3.9.1 Nagios
Nagios (www.nagios.com) s un programari molt popular de monitoritzaci de
xarxes, ordinadors i aplicacions. Est llicenciat sota la GNU (General Public
License Version 2 publicada per la Free Software Fundation) i s de codi obert.
Es pot configurar per tal que monitoritzi els equips (maquinari) i serveis (programari) que lusuari vulgui, alertant quan el comportament dun recurs no sigui
correcte o superi els marges definits per ladministrador de xarxa. Les alertes es
poden enviar entre daltres per correu electrnic i missatges SMS.
Entre les seves caracterstiques principals figuren la monitoritzaci de serveis de
xarxa (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, FTP, SSH); de sistemes de
maquinari (crrega del processador, s dels discs, memria, estat dels ports, arxius
de log, temperatura...); remota mitjanant tnels SSL xifrats o SSH.
Tamb ofereix la possibilitat de programar complements especfics per qualsevol
parmetre dinters dun sistema.
Podeu trobar diferents plugins per monitoritzar bases de dades MySQL i servidors.
Podeu trobar-ne un llistat aqu:
http://exchange.nagios.org/directory/Plugins/Databases/MySQL
Aqu teniu un llistat dalguns dels ms populars:
Element
de
llista
(http://oss.isg.inf.ethz.ch/nagiosplug):
les connexions a un servidor MySQL .

de
picscheck_mysql
comprova i mostra lestat de

check_mysqld (http://william.leibzon.org/nagios): permet establir llindars


per a les variables de la comanda SHOW STATUS de MySQL.
check_mysql_health (http://labs.consol.de /nagios/check_mysql_health):
permet controlar molts parmetres duna base de dades, com ara el temps
de connexi, nmero de connexions, ndexs, la taxa dxit de la memria
cau, les consultes lentes, etc.

3.9.2 Pandora FMS


Pandora FMS (en angls Pandora Flexible Monitoring System, Sistema de Monitoritzaci Flexible Pandora, http://pandorafms.com) s un programari de codi

Llenguatges de guions de servidor

99

obert publicat sota llicncia GPL2 GNU (General Public License), que serveix
per monitoritzar i mesurar tot tipus delements. Monitoritza duna forma visual
al llarg del temps lestat de sistemes, aplicacions o dispositius.
Pandora FMS pot recollir informaci de qualsevol sistema operatiu, amb programari especfic per a cada plataforma: GNU/Linux, AIX, Solaris, HP-UX,
BSD/IPSO i Windows 2000, XP i 2003.
Pandora FMS tamb pot monitoritzar qualsevol tipus de servei de xarxa com
ara: TCP/IP, balancejadors de crrega, routers, switches, sistemes operatius,
aplicacions o impressores.
Per verificar el funcionament de MySQL existeixen mduls del propi programari
i connectors desenvolupats. Entre els mduls trobem:
MySQL Monitoring: realitza un seguiment general de MySQL.
Mysql Cluster manager proccess: permet fer un seguiment dels processos
de MySQL.
Mysql Active Connections: permet verificar les connexions actives de
MySQL.

3.9.3 Proves de rendiment


Una cosa molt important en qualsevol desenvolupament web sn les proves de
rendiment. Amb elles podreu avaluar atributs quantitatius i qualitatius del vostre
sistema com la fiabilitat o la escalabilitat, ja siguin a nivell de programari o
maquinari. Dins de les proves, les bases de dades han de ser una cosa fonamental.
Mysqlslap s una eina de diagnstic de MySQL disponible des de la versi 5.1.4
que us permetr realitzar aquestes proves. Mysqlslap emula la crrega dun gran
nombre de clients accedint a un servidor MySQL i ofereix informes una vegada
acabada la prova.
Mysqlslap pot generar sentncies SQL automticament si no es poden utilitzar les
sentncies que executa el vostre sistema.
Per invocar mysqlslap ho podeu fer daquesta manera:
1

shell> mysqlslap [opcions]

Podeu trobar aqu un llistat de les diferents opcions de mysqlslap:


http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html
Mysqlslap sexecuta en tres etapes: preparaci, execuci i neteja. A la preparaci
es creen les taules i les consultes per la prova. A lexecuci es fan servir ms
duna connexi de clients per executar la prova. A a la neteja seliminen les taules
si sespecifica i es desconnecten els clients.

Llenguatges de guions de servidor

Llenguatges de guions de servidor

100

Llenguatges de guions de servidor

Un exemple el tenim a:
Especifiqueu la consulta SQL (SELECT * FROM taula) i creeu la taula (CREATE
TABLE taula (clau int);INSERT INTO taula VALUES (365)) , especifiqueu 50
clients i 200 consultes seleccionades per cadascun:
1
2
3

shell> mysqlslap uroot p delimiter=";" \


create="CREATE TABLE taula (clau int);INSERT INTO taula VALUES (365)" \
query="SELECT * FROM taula" concurrency=50 iterations=200

Un cop entrat la contrasenya de lusuari root mostrar unes estadstiques amb els
temps (mitj, mnim i mxim) dexecuci de totes les consultes:
1
2
3
4
5
6

Benchmark
Average number of
Minimum number of
Maximum number of
Number of clients
Average number of

seconds
seconds
seconds
running
queries

to run all queries: 0.021 seconds


to run all queries: 0.009 seconds
to run all queries: 0.900 seconds
queries: 50
per client: 1

Especifiqueu que mysqlslap cre la instrucci de consulta SQL a una taula de


dues columnes INT i tres columnes VARCHAR. Utilitzeu cinc clients de consulta
20 vegades cada un. No creeu la taula amb la consulta per inserir les dades (s a
dir, susar lesquema de la prova anterior i les dades):
1
2
3

shell> mysqlslap uroot p concurrency=5 iterations=20 \


numberintcols=2 numbercharcols=3 \
autogeneratesql

Un cop entrada la contrasenya de lusuari root:


1
2
3
4
5
6
7

Enter password:
Benchmark
Average number of
Minimum number of
Maximum number of
Number of clients
Average number of

seconds
seconds
seconds
running
queries

to run all queries: 0.016 seconds


to run all queries: 0.009 seconds
to run all queries: 0.106 seconds
queries: 5
per client: 0

Creareu dos arxius un de creaci (creacio.sql) amb les sentncies (CREATE TABLE
i INSERT INTO) i un altre de consultes (consultes.sql) amb sentncies (SELECT).
Primer executar larxiu de creaci i desprs sexecutar larxiu amb les consultes.
Especificareu cinc clients, cinc vegades cadascun:
1
2
3

mysqlslap uroot p concurrency=5 \


iterations=5 query=query.sql create=create.sql \
delimiter=";"

Resultat:
1
2
3
4
5
6
7

Enter password:
Benchmark
Average number of
Minimum number of
Maximum number of
Number of clients
Average number of

seconds
seconds
seconds
running
queries

to run all queries: 0.037 seconds


to run all queries: 0.037 seconds
to run all queries: 0.037 seconds
queries: 5
per client: 0

You might also like