Académique Documents
Professionnel Documents
Culture Documents
Despus de la primera entrega de esta seccin donde presentamos PHP4, vamos a ponernos ya a programar aplicaciones utilizando PHP. Y PHP no es ms que un lenguaje y un conjunto de libreras orientadas hacia el desarrollado de aplicaciones web. Todo lo que podemos hacer con PHP lo podramos hacer exactamente igual con otro lenguaje utilizando CGI, pero la complejidad y tiempo de desarrollo seran mucho mayores y su integracin con el web mucho menor. Quizs podamos ver PHP como una extensin de HTML del lado del servidor. Recordemos que en principio el lenguaje PHP se mezcla con HTML en una pgina HTML con extensin ".php". Es precisamente esta extensin la que alerta al servidor de web para que antes de entregar la pgina al cliente, se la pase al interprete de PHP para que ejecute las partes PHP y enve 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 librera 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 tambin 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 cdigo PHP con el cdigo HTML, es que no est bien delimitado el campo del diseador HTML y del programador y que el cdigo resultante puede ser complejo de entender y por o tanto, muy complicado de mantener. Las plantillas permiten que el cdigo HTML est totalmente fuera del cdigo PHP con lo que el resultado final es mucho ms flexible y mantenible. PHPLIB es una librera GPL y se puede obtener en la referencia [1]. Su instalacin 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 instalacin sera muy similar para PostgreSQL o MS Access. Una vez que hayamos obtenido el "tar.gz" de la librera 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 COMMIT CREDITS Makefile TODO VERSION pages stuff doc php unsup
La documentacin de la librera es de los ms completa y se encuentra en el directorio "doc". Las clases que componente la librera se encuentran en el directorio "php" y los "scripts" de creacin de base de datos y tablas necesarios para el funcionamiento de la librera 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 librera 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 distribucin oficial. Sobre la licencia como ya dijimos es software GPL y por lo tanto dentro de "COPYING" tenemos la querida licencia GPL. La gua de instalacin rpida nos cuenta en 10 pasos como instalar la librera. Como ya dijimos lo primero es tener una base de datos funcionando en el sistema. Quizs puede parecer un requisito excesivo pero los servidores web sin base de datos sern una especie en extincin 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 informacin 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 pginas incluya el ncleo de PHPLIB. Se puede evitar hacer esto pero es muy cmodo tener toda esta funcionalidad de forma automtica en nuestras pginas PHP, y este ncleo es bastante reducido. Esto lo vamos a lograr accediendo al fichero de configuracin de PHP, normalmente "/etc/php.ini", e incluir en la lnea que comienza con "auto_prepend_file" la localizacin 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 pginas 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 mquina 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 abstraccin del acceso a la base de datos, es decir, que a travs de esta clase podemos acceder de forma idntica a varios tipos de bases de datos diferentes. En concreto en la versin 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 migracin de un sistema de bases de datos ser trivial: slo habr que traspasar los datos y cambiar la clase con la que se accede a la base de datos. Todo nuestro cdigo ser idntico. -----------------------Manual PHP. PHPLIB. Control de sesiones y de identidad de usuarios
En la tabla "active_sessions" es donde se almacena la informacin de sesin y cada vez que se crea una nueva sesin, se crea un registro en esta tabla para su control. Supongamos que queremos controlar el acceso a un conjunto de pginas por nuestros clientes. Con PHPLIB es tan sencillo como incluir al comienzo de cada pgina con control de sesin la llamada:
page_open(array("sess" => "Sesin 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 sesin. Gracias al control de sesiones podemos almacenar diferentes variables asociadas a esta sesin. Desde el momento que se abre una sesin, se abren todas las variables de dicha sesin. Para asociar una variable a una sesin utilizamos una
llamada de PHPLIB:
$sess->register("s");
Al final de una pgina con control de sesin, tenemos que realizar una llamada a PHPLIB para cerrar la sesin. En esta llamada todas las variables asociadas a la sesin 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 tambin utilizando el mtodo GET de envo de datos, es decir, adjuntando a la URL de acceso a la pgina el identificador de la sesin. Esto se controla si en la pgina con control de sesiones ponemos todos los enlaces a otras pginas 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 artculos de una compra es trivial. O el almacenamiento de una barra de navegacin con todas las pginas por las que ha ido accediendo el usuario.
Es en la tabla "auth_user" de la base de datos "phplib" donde se almacena toda la informacin sobre los usuarios. Y en esta tabla tambin se incluye un campo "perms" donde se pueden detallar los permisos que tiene un usuario. Supongamos que hay una parte de administracin a la que slo 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 an autenticado se le presentar una pgina para que inserte un identificador y una clave de entrada. En el ejemplo inicial de PHPLIB el identificador es "kris" y la clave es "test". Una vez introducidos podemos volver a acceder a esta pgina y ya se nos volver a pedir el identificador. ------------------------
Todas las plantillas asociadas a un objeto Template han de encontrarse en un directorio. En nuesto ejemplo segn el idioma se cogen del directorio en ingls o del espaol. Una vez asignado el directorio a travs de la funcin "set_file" asociamos plantillas a nombres. De esta forma en nuestro programa utilizaremos los nombres aqu indicados para referirnos a la plantilla a utilizar. En este sencillo ejemplo slo hay dos plantillas "cabecera.ihtml" y "cuerpo.ihtml". Aparte de definir las plantillas con las que vamos a trabajar hay que definir las variables que hay que sustituir en dichas plantillas. Cualquier ocurrencia de una variable dentro de una plantilla es sustituido por el valor que le asociamos a travs de "set_var". En nuestro caso la varible "{Fecha}" se sutituye por "$fecha" y "{Valores}" por $valores. Por ejemplo, el contenido de "cabecera.ihtml" podra ser:
<html> <head> <head> <body> <title>Valores de cotizacin<title> Fecha de los valores: {Fecha}
El valor de "{Fecha}" ser sustituido de forma automtica cuando ejecutemos la funcin de sustitucin de valores "parse". El resultado lo almacenamos en la variable "OUT" que imprimimos finalmente con la funcin "p()". Las plantillas que se incluyen en PHPLIB tienen una funcionalidad ms amplia y sugerimos al lector una lectura de la documentacin de PHPLIB para ver todas sus posibilidades.
while($this->db->next_record()) { printf(" <tr class=cart_row>\n <td class=cart_cell>%s</td>\n", $this->db->Record["name"]); printf(" <td class=cart_cell>%s</td>\n", $this->db->Record["price"]); printf(" <td class=cart_cell>%s</td>\n", $num); $rowsum = $num * $this->db->Record["price"]; $this->sum += $rowsum; printf(" <td class=cart_cell>%s</td>\n", $rowsum); printf(" <tr>\n"); } } }
Para utilizar la clase "Cart" vamos a necesitar crear una tabla ms donde se encuentren la descripcin de todos los artculos que vendamos en nuestra tienda. Esta tabla la podemos crear dentro de una base de datos propia para cada uno de nuestros clientes, base de datos que tambin deber tener la informacin de "active_sessions" y "auth_user". Un ejemplo sencillo podra ser:
# # Estructura de la tabla de 'articles' # CREATE TABLE articles ( name text, price float(8,2), artid int(11) DEFAULT '0' NOT NULL auto_increment, PRIMARY KEY (artid) );
En la documentacin de PHPLIB se encuentran todos los detalles necesarios para un uso completo de esta clase. Su descripcin completa desbordara el espacio del que disponemos para este artculo. ------------------------
Resumen de PHPLIB
En la segundo entrega del rincn de PHP en Linux Actual os hemos presentado PHPLIB, una
librera orientada a objetos que facilita en gran medida las necesidades ms bsicas a la hora de montar un sitio web basado en PHP: control de sesiones y de identidad. Junto a estas necesidades bsicas PHPLIB nos ofrece tambin clases para programar nuestros sitios utilizando plantillas lo facilita el trabajo en paralelo de desarrolladores PHP y creadores de pginas HTML y diseadores grficos. Hemos visto tambin como PHPLIB no se ha olvidado del comercio electrnico y entre sus objetos incluye una cesta de la compra integrada con el control de sesiones y de autenticacin. Esto nos va a permitir montar tiendas virtuales en Internet utilizando PHP con un esfuerzo mnimo. Por ltimo PHPLIB tambin contiene un conjunto de widgets que nos liberan de tareas tan arduas como chequear los valores de un formulario o la presentacin en HTML de complejas estructuras en rbol.
Referencias