Enrera
Mòdul 5

Creació i gestió d'entorns web dinàmics (PHP)

  Pràctica
Pràctica_1
Pràctica_2
Pràctica_3
Pràctica_4
   
Exercicis
Exercicis
 
   Necessitat d'abstracció i modularitat    
 
  En el procés de disseny d'un aplicatiu, s'observa que moltes de les tasques que es porten a terme són bastant repetitives, i les diferències només radiquen en valors parametritzables que s'envien a aquesta tasca. Altres vegades és necessari establir un únic protocol o model per accedir o modificar unes dades, des de diferents punts de l'aplicatiu, per assegurar la coherència i la integritat d'aquestes dades.
   

L'objectiu d'aquesta pràctica és doble. En primer lloc, heu de prendre consciència de la necessitat de definir una capa d'abstracció per accedir a un gran ventall de base de dades (MySQL, Acces, Oracle, Interbase, FoxPro, MsSQL...), i minimitzar els efectes de qualsevol migració a un altre sistema, independentment del motor de la base de dades que utilitzeu.

   
  En segon lloc, s'ha d'instal·lar i analitzar superficialment la llibreria ADODB com a eina per potenciar la portabilitat del programari.
 
Desenvolupament de la pràctica
   
   
Pràctica

Un dels aspectes més importants que s'ha de tenir en compte quan es desenvolupa una aplicació web és la portabilitat del programari en qualsevol plataforma i sistema de base de dades. Atès el gran dinamisme de la WWW i la seva evolució contínua, s'ha de prioritzar i assegurar la compatibilitat del vostre sistema amb independència del sistema matriu on s'implementi.

   
 

El PHP disposa de jocs d'instruccions natives no estandarditzades per manipular bases de dades (tractades al mòdul 4 d'aquest curs); això implica que si es varia el motor de la BD, s'han de reescriure les funcions d'accés a la BD, i en conseqüència tornar a verificar de nou el sistema per assegurar la fiabilitat de l'aplicatiu. Cada base de dades té alguna particularitat que la diferencia de les altres, o el tipus de dades que tracten no és uniforme. Fins i tot, el PHP disposa de diferents API per a cada tipus de bases de dades.

   
 

Aquests inconvenients s'accentuen quan en un mateix aplicatiu s'ha d'accedir a diferents bases de dades; això significa que el programador utilitzarà diferents instruccions i protocols per accedir a cada una de les bases de dades, i es pot donar el cas que els tipus de dades retornats no siguin iguals, amb la conseqüent previsió de tractar aquestes dades abans de processar-les.

   
 

Figura 5.1.1. Diagrama d'accés a bases de dades

   
 

D'aquí neix la necessitat de crear un interfície que encapsuli totes aquestes diferències, per crear un conjunt d'instruccions i mètodes genèrics capaços d'interactuar amb qualsevol servidor de bases de dades. Aquests mètodes genèrics internament s'encarreguen de cridar l'API nativa de la BD corresponent, i és la capa d'abstracció la que assegura de relacionar el joc de mètodes genèrics amb la corresponent API d'aquella base de dades.

   
 

ADODB (Active Data Objects Database)

   
 

A més, aquesta capa d'abstracció també ha d'estandarditzar el tipus de dades que es manipulen, i assegurar internament la conversió al tipus de dades que suporta la BD, que pot ser diferent segons el motor amb què treballeu. Per exemple, el format del tipus 'data' no és igual per a totes les BD.

   
 

 

Diagrama PHP_ ADODB

Figura 5.1.2. Diagrama d'accés a bases de dades a través d'una capa d'abstracció

   
 

Hi ha diferents capes d'abstracció en PHP per a l'accés a bases de dades com, per exemple, PEAR DBI, Metabase i PHPLib, però una de les més esteses i eficients és l'ADODB (Active Data Objects Database), creada per John Lim. La web d'aquest projecte la podeu trobar a PHPLENS, a l'adreça http://phplens.com/phpeverywhere/.

   
 

L'ADODB proporciona la capacitat d'abstracció, perquè el sistema de BD amb què treballeu és transparent al programador. En resum, encapsuleu les diferències.

   
 

L'ADODB procura la portabilitat del vostre sistema a qualsevol base de dades comercial, o lliure, sense haver de modificar el codi. Es tracta d'una llibreria que incorpora una capa d'abstracció que permet interaccionar amb multitud de BD (bases de dades) sense tornar a reescriure el codi ja escrit. Aquesta llibreria està escrita en PHP.

 
 

L'ADODB és una llibreria de classes de BD. Està força optimitzada pel que fa a la velocitat (de l'ordre d'un 10 % més que la llibreria més ràpida), i es consolida com una de les més ràpides en l'entorn PHP (comparativa). Actualment, s'han optimitzat encara més unes funcions del nucli que poden ser crítiques quant a temps d'accés, i s'han implementat amb el llenguatge de programació C. Els resultas són realment optimistes, ja que permeten millores d'accés de l'ordre del 20 % al 30 %.

   
 

L'ADODB permet accedir a una varietat de sistemes de BD molt extens: el MySQL, el PostgreSQL, l'ORACLE, l'Interbase, el Microsoft SQL Server, l'Acces, l'ODBC, i molts altres, i a més s'utilitza en projectes PHP de reconeguda fiabilitat i experiència: el PhpLens, el PostNuke, el Xaraya, el phpWiki, el Mambo, el PHP GACL, el Webodex...

   
  Connectivitat de la llibreria ADODB amb motors de bases de dades
   
 

Clau Motor de la base de dades Prerequisits Sistema operatiu
access Microsoft Access/Jet. ODBC -DSN Windows
ado

Generic ADO, not tuned for specific databases.

ADO / OLEDB Windows
ado_access Microsoft Access/Jet using ADO. Allows DSN-less connections. For best performance, use an OLEDB provider. ADO / OLEDB Windows
ado_mssql Microsoft SQL Server using ADO. Allows DSN-less connections. For best performance, use an OLEDB provider. ADO / OLEDB Windows
db2 DB2. Should work reliably as based on ODBC driver. DB2 CLI / ODBC

Unix / Windows

vfp Microsoft Visual FoxPro. ODBC Windows
fbsql FrontBase.  

Unix / Windows

ibase Interbase 6 or earlier. Interbase client Windows / Unix
firebird Firebird version of interbase. Interbase client Windows / Unix
borland_ibase Borland version of Interbase 6.5 or later. Very sad that the forks differ. Interbase client Windows / Unix

informix
informix72

Drivers per Informix Informix client Windows / Unix

ldap

LDAP Driver LDAP extension Windows / Unix
mssql

Microsoft SQL Server 7 and later. Works with Microsoft SQL Server 2000 also.

Mssql client

Windows / Unix.

mssqlpo

Portable mssql driver. Identical to above mssql driver, except that '||', the concatenation operator, is converted to '+'. Useful for porting scripts from most other sql variants that use ||.

Mssql client

Windows / Unix.

mysql MySQL without transaction support. MySQL client Windows / Unix
mysqlt or maxsql

MySQL with transaction support.

MySQL client Windows / Unix
oci8
oci805
oci8po
Oracle Oracle client Windows / Unix
odbc Generic ODBC, ODBC Windows / Unix.
odbc_mssql Uses ODBC to connect to MSSQL ODBC Windows / Unix.
odbc_oracle Uses ODBC to connect to Oracle ODBC Windows / Unix.
oracle Implements old Oracle 7 client API. Oracle client Windows / Unix
postgres
postgres64
postgres7
Diversos drivers de PostgreSQL.. PostgreSQL client Windows / Unix.
sqlanywhere Sybase SQL Anywhere. SQL Anywhere ODBC client

 

sybase Sybase. Sybase client

Windows / Unix.

Figura 5.1.3. Connectivitat de l'ADODB

   
Aquestes dades es troben al fitxer readme.htm de la corresponent versió de l'ADODB que utilitzeu; és aconsellable que repasseu la informació de la llibreria ADODB que instal·leu.
   
 

Obtenció ADODB

   
  Podeu descarregar l'ADODB de l'adreça http://adodb.sourceforge.net/, tant en format zip, com tgz, o podeu trobar-lo al CD amb el nom d'adodbxxx.zip.
  Altres llocs alternatius: http://phplens.com/phpeverywhere/
   
  Podeu trobar també el fitxer utilitzat en el curs al paquet de materials de formació, al CD Eines o bé al servei CD-web de la XTEC.
   
 
 
 
Instal·lació de l'ADODB
   
Descomprimiu el fitxer en algun directori del servidor web que tingueu activat (observeu la figura 5.1.4). El ftxer per al Windows té extensió *.zip, i per al Linux *.tgz. Us heu d'assegurar que la versió del PHP que utilitzeu sigui la 4.0.5 o superior.
   

Recordeu activar la funció de descomprimir mantenint les carpetes originals. Això provoca una estructura que es munta a partir de la carpeta adob_x.xx.x. És important descomprimir-la en algun lloc que sigui accessible pel vostre servidor web, en el vostre cas sobre el directori virtual que heu creat a l'exercici del mòdul 1. En cas que ho hàgiu d'instal·lar en altres sistemes en què no heu instal·lat l'EasyPHP, les adreçes probables podrien ser aquestes:

   
 
Sistema Directori probable servidor web
W2000 \Inetpub\wwwroot
W9X \www
Linux

/var/www/html
/var/www
/home/http/htdocs
/home/http/html

   
A l'apartat d'exercicis del mòdul 1 heu creat el directori virtual /d116/ (que apuntava al directori físic C:\Arxius de programa\EasyPHP1-7\www\prac_d116\); seria una bona opció penjar-lo a la carpeta física on apunta aquest directori virtual, així servirà per a la resta de pràctiques en què utilitzareu l'ADODB.
   
  Us recomanem que renombreu el directori amb el nom d'adodb, així, si l'actualitzeu, sempre penjarà del mateix lloc, independentment de la versió que instal·leu.
 
 

Directori virtual /d116/ Pràctiques mòdul 8 Pràctiques mòdul 7 Pràctiques mòdul 6 Fitxers connexió m5 Pràctiques mòdul 5 Pràctiques mòdul 4 Pràctiques mòdul 3 Pràctiques mòdul 1 Pràctiques mòdul 2

Figura 5.1.4. Estructura de carpetes de directori virtual http://localhost /d116/

   
  Entre els fitxers que podeu trobar a la carpeta adodb, destaquen els següents:
   
 
  • /Docs/. Trobareu els fitxers que documenten la llibreria ADODB amb exemples pràctics de les seves funcionalitats.
 
  • Adodb.inc.php. Aquest és el fitxer principal de la llibreria. S'ha de fer un Include d'aquest fitxer en els mòduls que creeu i que utilitzin funcions de l'ADODB. Aquest fitxer conté totes les funcions utilitzades per totes les classes de bases de dades.
 
  • /drivers/Adodb-????.inc.php. És el fitxer que controla els accessos i les particularitats de la base de dades seleccionada segons la taula de la figura 4.1.3. En el cas del MYSQL, el sistema inclou automàticament el fitxer adodb-mysql.inc.php.
 
  • Adodb-session.inc.php. Es tracta d'una llibreria de manipulació de variables de sessió que permet gravar les variables de sessió en una base de dades, per tenir més escalabilitat del sistema.També inclou aspectes d'encriptació i mètodes de compressió.
 
  • Adodb-perf.inc.php. Llibreria per analitzar i optimitzar la qualitat d'accessos a la BD.
 
  • /Tests / Test.php. A la carpeta /tests trobareu el fitxer test.php, que conté una llista de diferents tests per provar la llibreria ADODB.
 
  • / Tests / Testdatabases.inc.php. Conté el codi per aplicar els tests a diferents bases de dades.
 
  • /Tests / Benchmark.php. Codi per comprovar la velocitat d'accés a diferents bases de dades mitjançant una seqüència de SELECT.
 
  • Readme.htm. Documentació principal de la llibreria ADODB.
 
  • Tute.htm. Documentació d'aplicacions de l'ADODB pel MySQL.
 
  • Adodb-pager.inc.php. Classe per automatitzar la presentació de les dades.
 
  • Altres...
   
  Hi ha moltes altres llibreries i classes de manipulació d'errors, d'encriptació de dades, d'exportació de dades, etc.
   
  Totes són prou extenses per desenvolupar diverses pràctiques amb cada una d'elles. Us centrareu en la llibreria principal de l'ADODB i en algunes opcions de visualització de dades.
   
  Manuals de consulta d'ADODB :
   
 
 
   
  Existeix també una versió bastant recent anomenada ' ADODB Lite ' , basada amb el codi d' ADODB, però més lleugera d'espai i de consum de recursos en relació al servidor de bases de dades.
 
   
   
 
Amunt
Pràctica
pràctica_1
Pràctica_2
Pràctica_3
Pràctica_4
Exercicis
Exercicis