Professional Documents
Culture Documents
servidor
Eduard Garca Sacristn, Eduard Latorre Jarque, Montserrat
Madridejos Mora, Ral Velaz Mayo
Adaptaci de continguts: Eduard Garca Sacristn
ndex
Introducci
Resultats daprenentatge
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
10
11
12
13
14
14
15
16
17
18
18
19
20
20
21
21
22
23
24
26
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
29
30
31
31
32
33
36
39
40
48
49
50
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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.
Resultats daprenentatge
10
11
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.
12
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.
13
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
22.464.345
3,22%
22.931.169
3.44%
0,22
Font: http://news.netcraft.com
14
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
15
/etc/init.d/apache2 ordre
16
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.
17
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
El mdul dApache
mod_auth_basic.
que
controla
aquest
mtode
dautenticaci
<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.
18
19
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.
20
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
21
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
$ 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.
22
23
$ 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
24
La primera lletra fa
referncia al sistema
operatiu: LAMP (Linux),
WAMP (Windows), o MAMP
(Mac OS).
versi
de
XAMPP
http://localhost/info.php
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
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
26
22
23
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.
27
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
28
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
29
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.
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.
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.
30
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>
31
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.
LXHTML i lXML
aconsegueixen nivells alts
de compatibilitat entre
diferents sistemes duna
manera molt senzilla i
segura.
32
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.
<?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
Els
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.
33
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
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
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.
34
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
Operadors de bit
$valor | $valorB
Operadors de bit
$valor $valorB
XOR
Operadors de bit
$valor
No
Operadors de bit
$valor <<$valorB
Desplaament a
lesquerra
Operadors de bit
$valor >>$valorB
Desplaament a la dreta
Operadors de bit
Nom
Acci
Tipus doperador
$valor == $valorB
Igual
Operadors de
comparaci
Idntic
Operadors de
comparaci
$ valor!= $ valorB
Diferent
TRUE si $valor no s
igual a $valorB.
Operadors de
comparaci
Diferent
TRUE si $valor no s
igual a $valorB.
Operadors de
comparaci
35
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
Ms petit que
TRUE si $ valor s ms
petit que $ valorB.
Operadors de
comparaci
Ms gran que
TRUE si $ valor s ms
gran que $ valorB.
Operadors de
comparaci
TRUE si $ valor s ms
petit o igual que $
valorB.
Operadors de
comparaci
TRUE si $ valor s ms
gran o igual que $
valorB.
Operadors de
comparaci
Nom
Acci
Tipus doperador
++$valor
Preincrement
Operadors
dincrement/decrement
$valor ++
Postincrement
Retorna $valor i
incrementa $valor una
unitat.
Operadors
dincrement/decrement
$valor
Predecrement
Operadors
dincrement/decrement
$valor
Postdecrement
Retorna $valor i
decrementa $valor una
unitat.
Operadors
dincrement/decrement
Nom
Acci
Tipus doperador
Operadors de lgica
$valor or $valorB
TRUE si $valor o
$valorB sn TRUE.
Operadors de lgica
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
Operadors de lgica
$valor || $valorB
TRUE si $valor o
$valorB sn TRUE.
Operadors de lgica
36
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
Operadors de matrius
Identitat
Operadors de matrius
$ valor!= $ valorB
No-identitat
TRUE si $valor no s
igual a $valorB.
Operadors de matrius
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
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.
1
2
3
4
5
6
37
<?php
$nom=Abeeku;
echo "Hola, company!<br>
Em dic $nom.\n
Qu et sembla aquest crdit?";
?>
<?php
$nom=Abeeku;
$Familia=Informtica;
4
5
6
7
8
9
10
echo <<<FRASE
Hola!<br>
Em dic $nom.
Estudio $Familia.
FRASE;
?>
<?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.
38
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";
<?php
$dies[]="Dilluns";
$dies[]="Dimarts";
$dies[]="Dimecres";
$dies[]="Dijous";
$dies[]="Divendres";
$dies[]="Dissabte";
$dies[]="Diumenge";
9
10
11
12
13
14
15
16
?>
Matrius associatives
39
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";
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.
40
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.
41
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";
}
?>
<?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";
}
?>
<?php
$nom=Nafisa;
if($nom==Nafisa)
{
echo "Ests dins el codi per qu es compleix la condici";
}
42
7
8
9
10
11
12
13
14
15
elseif($nom==Layla)
{
echo "Ests dins el codi de la segona condici";
}
else
{
echo "No es compleix cap de les dues condicions";
}
?>
<?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.";
?>
Lexemple segent mostra com el while us pot ser molt til per crear un codi que
generi la taula de multiplicar del nmero 7:
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;
}
?>
<?php
$linia=1;
do
{
echo "Lnia $linia<br>";
$linia=$linia+1;
44
7
8
9
}
while($linia<10);
?>
<?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!";
?>
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
<?php
while($edat<20)
{
for( ; ; $edat=$edat+1)
{
if($edat==18)
{
echo "Ara ja tens $edat anys!<br>";
break 2;
}
11
12
13
14
15
16
17
18
19
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.
46
<?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
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.
47
<?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
}
?>
Lestructura foreach
<?php
2
3
4
5
6
7
8
9
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
48
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.
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
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);
?>
49
Funcions internes
<?php
$nom = Blanca;
3
4
5
6
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.
50
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";
?>
51
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.
52
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
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.
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>
53
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
?>
echo $_POST[navegadors];
54
<?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.
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;
55
$positiu=3451;
$negatiu=4345;
$amb_coma=34.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";
56
<?php
class Alumne {
4
5
6
7
8
9
10
11
12
$alumne1=new Alumne();
$alumne1>matricular(Made);
?>
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
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;
?>
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
(string)
string
(binary)
string
(array)
array
(object)
object
<?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.
58
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.
<?php
$una_variable="Hola";
$una_altra_variable="Com va?";
4
5
6
7
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)
3
4
59
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.
60
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;
9
10
11
12
13
salutacio();
echo $benvinguda;
14
15
16
17
<?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();
}
?>
61
Variables variables
<?php
// no podeu deixar espais dins de la cadena Hola, doncs es far servir per nom
daltra variable
$variable = "Hola";
4
5
6
7
8
9
//Mostra el mateix
print " $variable{$$variable}<br>";
print "$variable$Hola<br>";
10
11
?>
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.
<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.
62
6
7
8
10
11
12
13
14
15
16
<?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>
<?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>
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.
<?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
64
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.
65
<?php
setcookie(nom, Maadiva);
?>
<?php
echo $_COOKIE[nom];
?>
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.
66
<?php
$str = apple;
3
4
echo sha1($str);
5
6
7
8
9
10
Algorismes de hash
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
<?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
68
<?php
echo hash_file(md5, exemple_hash_file.php);
?>
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());
?>
69
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
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
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.
70
1
2
3
4
5
<HTML>
<head>
<title>Primer exemple amb POO</title>
</head>
<body>
6
7
8
9
10
11
<?php
class Alumne
{
var $nom;
var $dni;
12
13
14
15
16
17
18
19
20
21
22
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>
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.
71
var $nom;
var $dni;
private $nom;
private $dni;
5
6
7
8
9
72
10
11
12
13
14
15
16
17
public
{
echo
echo
echo
echo
}
function imprimir()
$this>nom;
<br>;
$this>dni;
<br>;
$this>dni=$dni;
$alumne1=new Alumne();
$alumne2=new Alumne();
$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:
1
2
73
$alumne1>dades(23344556D);
$alumne2>dades(65544332E);
<?php
2
3
4
5
6
7
class Alumne
{
var $dni;
var $dataNaixement;
var $cicleFormatiu;
8
9
10
11
12
13
14
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
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.
74
$alumne3=new Alumne("Carles","39485764R");
En PHP lherncia s limitada, una classe noms pot heretar duna altra classe.
<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
19
20
21
echo $this>nom.<br>;
echo $this>dni.<br><br>;
22
23
24
25
75
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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>
parent::dades_persona();
76
<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
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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();
55
56
57
77
?>
</body>
</html>
Si descomenteu la lnia,
1
//$nouProfessor>sou=10;
79
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.
80
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
81
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.
82
83
<?php
2
3
4
5
6
7
8
9
10
<?php
2
3
4
5
6
7
8
9
10
11
mysql_close($connexio);
12
13
14
84
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());
necessria
amb
la
funci
85
"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
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
17
18
19
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
86
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.
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}]
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
2
3
4
5
7
8
9
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
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
88
while($fila = mysql_fetch_array($resultat))
{
30
31
32
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";
}
UPDATE taula
SET nomColumna1={expressi1|DEFAULT},
nomColumna2={expressi2|DEFAULT}...
WHERE condici
[LIMIT numero_files]
5
6
o
1
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];
9
10
$err = mysql_error();
if( $err != "" )
echo "error=$err <br>";
11
12
13
14
15
16
17
18
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
12
13
14
90
<?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";
?>
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
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";
}
?>
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
<?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
92
1
2
3
4
5
6
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
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
|
|
|
+
|
|
|
+
<?php
$dbhost = localhost;
$dbusuari = root;
$dbcon = contrasenya;
$con =mysql_connect($dbhost, $dbusuari,$dbcon);
6
7
8
if (!$con)
{
10
93
la
11
12
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
31
32
33
// Executareu la consulta
mysql_query($sql,$con);
34
35
36
// Tancareu la connexi
mysql_close($con);
37
38
?>
94
<?php
$str = apple;
3
4
5
6
7
8
En el cas que les claus estiguessin encriptades a la base de dades, es podria crear
la consulta aix:
1
95
96
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
# 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
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
Per comprovar els permisos dun usuari es fa servir la comanda show grants
for usuari1.
97
|
++
1
2
Heu pogut comprovar com apareix el perms de SELECT, ara afegirem els permisos
de DELETE i INSERT a lusuari usuari1.
1
2
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
|
++
98
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
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.
100
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
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
Enter password:
Benchmark
Average number of
Minimum number of
Maximum number of
Number of clients
Average number of
seconds
seconds
seconds
running
queries
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
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