Webs dinámicos con PHP

Despu�s de la primera entrega de esta secci�n donde presentamos PHP4, vamos a ponernos ya a programar aplicaciones utilizando PHP. Y PHP no es m�s que un lenguaje y un conjunto de librer�as orientadas hacia el desarrollado de aplicaciones web. Todo lo que podemos hacer con PHP lo podr�amos hacer exactamente igual con otro lenguaje utilizando CGI, pero la complejidad y tiempo de desarrollo ser�an mucho mayores y su integraci�n con el web mucho menor.

Quiz�s podamos ver PHP como una extensi�n de HTML del lado del servidor. Recordemos que en principio el lenguaje PHP se mezcla con HTML en una p�gina HTML con extensi�n ".php". Es precisamente esta extensi�n la que alerta al servidor de web para que antes de entregar la p�gina al cliente, se la pase al interprete de PHP para que ejecute las partes PHP y env�e al cliente el HTML y los resultados de las partes PHP. A lo largo de esta entrega nos vamos a centrar en describir PHPLIB, una librer�a que nos va a permitir de forma sencilla poder trabajar con diferentes bases de datos de forma transparente, poder gestionar sesiones de una forma sencilla y llevar un control de acceso muy flexible basado en bases de datos. PHPLIB tambi�n proporciona clases, est� basada en objetos, para gestionar plantillas y crear HTML desde PHP. Como veremos uno de los problemas fundamentales con lenguajes como PHP, donde se mezcla el c�digo PHP con el c�digo HTML, es que no est� bien delimitado el campo del dise�ador HTML y del programador y que el c�digo resultante puede ser complejo de entender y por o tanto, muy complicado de mantener. Las plantillas permiten que el c�digo HTML est� totalmente fuera del c�digo PHP con lo que el resultado final es mucho m�s flexible y mantenible.

PHPLIB es una librer�a GPL y se puede obtener en la referencia [1]. Su instalaci�n es un tanto compleja ya que toda su funcionalidad principal utiliza base de datos. Por lo tanto lo primero es tener una base de datos funcionando en el sistema. Nos vamos a centrar en MySQL pero la instalaci�n ser�a muy similar para PostgreSQL o MS Access.

Una vez que hayamos obtenido el "tar.gz" de la librer�a la descomprimimos en un directorio (tar xvfz phplib-7.2.tar.gz ) y pasamos a instalarla. La estructura de directorios resultante es:

    CHANGES  COPYING  HELP      README  VERSION  pages  stuff
    COMMIT   CREDITS  Makefile  TODO    doc      php    unsup

La documentaci�n de la librer�a es de los m�s completa y se encuentra en el directorio "doc". Las clases que componente la librer�a se encuentran en el directorio "php" y los "scripts" de creaci�n de base de datos y tablas necesarios para el funcionamiento de la librer�a y el soporte de LDAP se encuentra en el directorio "stuff". En el directorio "pages" tenemos unos sencillos ejemplos para comenzar a trabajar con la librer�a y en "unsup" tenemos utilidades de las que no se da soporte, es decir, que pueden ser �tiles pero que no son parte de la distribuci�n oficial. Sobre la licencia como ya dijimos es software GPL y por lo tanto dentro de "COPYING" tenemos la querida licencia GPL.

El �ndice de la documentaci�n lo podemos ver en la siguiente figura.

Figura 1: Documentaci�n de PHPLIB.

La gu�a de instalaci�n r�pida nos cuenta en 10 pasos como instalar la librer�a. Como ya dijimos lo primero es tener una base de datos funcionando en el sistema. Quiz�s puede parecer un requisito excesivo pero los servidores web sin base de datos ser�n una especie en extinci�n en el futuro cercano. Si tenemos MySQL instalado todo va a ser sencillo. Accedemos al directorio "stuff" y ejecutamos:

mysqladmin -u root create phplib
mysql -u root < create_database.mysql

Con ello creamos una base de datos para PHPLIB y dentro de ella la poblamos con una serie de tablas. En estas tablas es donde PHPLIB guarda toda la informaci�n de sesiones y control de accesos. Una vez que ya tenemos la infraestructura de base de datos preparada hay que indicar a PHP que en todas las p�ginas incluya el n�cleo de PHPLIB. Se puede evitar hacer esto pero es muy c�modo tener toda esta funcionalidad de forma autom�tica en nuestras p�ginas PHP, y este n�cleo es bastante reducido. Esto lo vamos a lograr accediendo al fichero de configuraci�n de PHP, normalmente "/etc/php.ini", e incluir en la l�nea que comienza con "auto_prepend_file" la localizaci�n del fichero "prepend.php3" que se encuentra dentro del directorio "php" de PHPLIB. De esta forma el interprete de PHP incluye PHPLIB en todas las p�ginas PHP. Una vez hecho esto solo nos queda acceder al fichero "local.inc" y especificar los datos necesarios en la clase "DB_Example" para que PHPLIB puede acceder a la base de datos. El contenido de esta clase es:

class DB_Example extends DB_Sql {
  var $Host     = "localhost";
  var $Database = "phplib";
  var $User     = "root";
  var $Password = "";
}

Tenemos que especificar en que m�quina est� corriendo la base de datos, como se llama la base de datos en la que se van a almacenar los datos de PHPLIB, y un usuario y clave para acceder a esa base de datos. La clase DB_Sql es una abstracci�n del acceso a la base de datos, es decir, que a trav�s de esta clase podemos acceder de forma id�ntica a varios tipos de bases de datos diferentes. En concreto en la versi�n actual de PHPLIB nos encontramos implementaciones de DB_Sql para las siguientes bases de datos:

db_msql.inc: msql 
db_mssql.inc: MS SQL Server 
db_mysql.inc: MySQL 
db_oci8.inc, db_oracle.inc: ORACLE 
db_odbc.inc: ODBC 
db_pgsql.inc: PostgreSQL 
db_sybase.inc: Sybase

Si basamos nuestros desarrollos en PHPLIB y DB_Sql la migraci�n de un sistema de bases de datos ser� trivial: s�lo habr� que traspasar los datos y cambiar la clase con la que se accede a la base de datos. Todo nuestro c�digo ser� id�ntico.

.�Control de sesiones

Ya en este punto estamos en disposici�n de utilizar la librer�a PHPLIB. Para ello lo mejor es poner el directorio "pages" de la distribuci�n en alg�n lugar desde el que el servidor de web pueda acceder a �l y a trav�s de un navegador acceder a la p�gina "index.php3". El resultado tiene que ser similar al de la figura 2.

Ejemplo de sesi�n con PHPLIB.

Si prueba el lector a recargar la p�gina ver� que el contador que aparece va aumentando. Lo que est� ocurriendo es que la primera vez que se accedi� a esta p�gina se cre� una "cookie" para el control de la sesi�n. A partir de este momento est� "cookie" con el identificador de sesi�n es enviado al servidor de web por el cliente cada vez accede a la p�gina permitiendo el control del estado de la sesi�n. De hecho este control se realiza utilizando la base de datos "phplib" que creamos anteriormente. Si vemos las tablas que hay en la base de datos "phplib" encontramos:

active_sessions 
active_sessions_split 
auth_use 
auth_user_md5 
db_sequence

En la tabla "active_sessions" es donde se almacena la informaci�n de sesi�n y cada vez que se crea una nueva sesi�n, se crea un registro en esta tabla para su control. Supongamos que queremos controlar el acceso a un conjunto de p�ginas por nuestros clientes. Con PHPLIB es tan sencillo como incluir al comienzo de cada p�gina con control de sesi�n la llamada:

page_open(array("sess" => "Sesi�n de control"));

De esta forma PHPLIB verifica si el usuario tiene ya creada la "cookie". Si no la tiene se la crea y si la tiene nos permite acceder a todos los datos de la sesi�n. Gracias al control de sesiones podemos almacenar diferentes variables asociadas a esta sesi�n. Desde el momento que se abre una sesi�n, se abren todas las variables de dicha sesi�n. Para asociar una variable a una sesi�n utilizamos una llamada de PHPLIB:

$sess->register("s");

Al final de una p�gina con control de sesi�n, tenemos que realizar una llamada a PHPLIB para cerrar la sesi�n. En esta llamada todas las variables asociadas a la sesi�n se guardan para que no se pierdan:

page_close();

Es por todos conocido lo poco que gustan las "cookies" a la gente por el ataque hacia su privacidad que supone. Con PHPLIB el control de sesiones se puede realizar tambi�n utilizando el m�todo GET de env�o de datos, es decir, adjuntando a la URL de acceso a la p�gina el identificador de la sesi�n. Esto se controla si en la p�gina con control de sesiones ponemos todos los enlaces a otras p�ginas de la siguiente forma:

$sess->purl("showoff.php3");

Ya hemos visto pues una de las principales ventajas de utilizar PHPLIB: el sencillo control de sesiones. con este control el implementar una bolsa de la compra donde se vayan almacenando todos los art�culos de una compra es trivial. O el almacenamiento de una barra de navegaci�n con todas las p�ginas por las que ha ido accediendo el usuario.

.�Control de Identidad de Usuarios

Junto con el control de sesiones es el control de acceso a p�ginas una de las principales necesidades en las aplicaciones web. Y de nuevo con PHPLIB tenemos solucionado de forma sencilla este control. Es cierto que con Apache tenemos mecanismos para el control de acceso a p�ginas, pero es un control de acceso o no acceso. Normalmente necesitamos ir m�s all�. Necesitamos que seg�n la persona que acceda dar acceso a unas partes u otras, poder crear grupos de usuarios con privilegios etc.

Adem�s PHPLIB asocia este control de identidad de usuarios al control de sesiones, algo que nos permite asociar de forma autom�tica una sesi�n a un usuario identificado. Cuando queremos que una p�gina solo pueda ser accedida por un usuario identificado incluimos en la primera l�nea de esta p�gina:

page_open(array("sess" => "Example_Session", "auth" => "Example_Auth",
  "perm" => "Example_Perm", "user" => "Example_User"));

Es en la tabla "auth_user" de la base de datos "phplib" donde se almacena toda la informaci�n sobre los usuarios. Y en esta tabla tambi�n se incluye un campo "perms" donde se pueden detallar los permisos que tiene un usuario.

Supongamos que hay una parte de administraci�n a la que s�lo pueden acceder los usuarios con permiso de administrador. Para ello en el campo "perms" del registro del usuario debe aparecer "admin". Con PHPLIB lo �nico que hay que hacer para realizar este control es incluir la llamada:

$perm->check("admin");

Si el usuario no est� a�n autenticado se le presentar� una p�gina para que inserte un identificador y una clave de entrada. Esta p�gina se puede observar en la figura 3.

Figura 3: Autenticaci�n de usuario.

En el ejemplo inicial de PHPLIB el identificador es "kris" y la clave es "test". Una vez introducidos podemos volver a acceder a esta p�gina y ya se nos volver� a pedir el identificador.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO