Vous êtes sur la page 1sur 8

Tutoriales

Webs dinmicos con PHP


Autor: Alvaro del Castillo

PHP para desarrollo de aplicaciones web (I) o Introduccin

o o

Creacin de imgenes GIF desde PHP El uso de las polmicas "cookies" desde PHP

PHP para desarrollo de aplicaciones web (I)


Introduccin
Bienvenido a esta tercera entrega del curso de programacin con PHP. En la primera os avanzamos lo que va a significar la nueva versin dentro del mundo PHP, la 4.0 y en la segunda os presentamos la librera ms potente para desarrollar aplicaciones en PHP, phplib. En esta tercera ha llegado el momento de mirar con ms detenimiento PHP, sus funciones y para que lo podemos utilizar. En concreto nos vamos a centrar en las caractersticas de PHP principales, detalladas dentro del propio manual de PHP:

Creacin de imgenes GIF gracias a la librera GD El uso de las polmicas "cookies" desde PHP La autenticacin de usuarios utilizando HTTP La subida de ficheros utilizando HTTP

Estos temas se tratan en los captulos 15,16,17 y 18 del manual de PHP, aunque aqu vamos a intentar darle un enfoque ms prctico que el que da dentro del manual de referencia de PHP. En todos los casos vamos a poner ejemplos de aplicaciones reales que podran aprovechar estas caractersticas de PHP y vamos a analizar los problemas y ventajas de cada una de ellas. Una vez cubiertas estas funcionalidades bsicas, podremos comenzar en futuras entregas a lanzarnos con todas las dems libreras para acceso a servidores LDAP, IMAP etc. que nos proporciona PHP. Una de las grandes novedades de PHP ha sido la publicacin el da 22 de Mayo de PHP4 de forma oficial. A partir de ahora veremos un gran bombardeo de informacin sobre PHP, su nuevo interprete Zend y el alto rendimiento que se logra con esta nueva versin. Sin ms dilacin comenzamos a desglosar los diferentes puntos de esta entrega, esperando que disfrutis con la potencia y flexibilidad que ofrece PHP a todos los desarrolladores.

Creacin de imgenes GIF desde PHP


Uno de los temas ms importantes a la hora de construir un sitio web en Internet de calidad es el aspecto grfico. Un mal diseo grfico, demasiado recargado, con un incorrecto uso de colores, o demasiado pesado (imgenes de muchos kilo-bytes) puede echar por tierra todo una estupenda idea. En Internet es difcil lograr que los navegantes caigan por tu pgina y si lo hacen, es vital que lo que encuentren les llame la atencin lo suficiente como para volver de nuevo all, y conocer ms en profundidad que se le ofrece.

Otro aspecto fundamental es la renovacin de la informacin del sitio web, teniendo mucho cuidado de mantener una imagen identificativa del sitio, ya que si no es difcil lograr que el navegante pueda llegar a sentirse a gusto en el lugar. Tanto en el aspecto grfico como en el de renovacin PHP tiene una funcionalidad muy potente: la creacin de GIF "al vuelo" ( on the fly). La idea es que los GIF no existen como ficheros en el disco duro del servidor de web, sino que es el propio PHP el que los genera a partir de informacin que recibe cuando el usuario acude a la pgina. De esta forma podemos presentar informacin grfica dinmica. Un ejemplo de esta funcionalidad sera la generacin de nmeros para informar del nmero de accesos que ha tenido una pgina. Otros usos podran ser el envo a travs de un formulario de un conjunto de datos numricos y la obtencin de grficas de dichos datos en diferentes formatos. Otro posible servicio podra ser el permitir que usuarios nos enviaran imgenes "no transparentes" y convertirlas en transparentes utilizando las llamadas PHP para el tratamiento de imgenes. Generalizando, la librera de PHP para el tratamiento de GIF permiten montar una serie de servicios y funcionalidades a nivel grfico que podemos utilizar para lograr una flexibilidad y potencia muy grandes. Despus de esta pequea introduccin a las posibilidades de la tecnologa vamos a ver como se utiliza, la API de estas funciones de tratamiento de imgenes, y que es necesario tener instalado. PHP utiliza para este tratamiento de imgenes la librera GD de la empresa Boutell.Com, creada por Thomas Boutell, autor original de GD. Esta es una librera que se cre inicialmente con el objetivo del tratamiento de GIF. Es necesario que la tengas instalada en tu sistema. El mdulo de PHP de Red Hat incluye por defecto esta librera en PHP as que te habr obligado el sistema a instalar GD antes de poder instalar el mdulo de PHP. Si tienes otra distribucin tendrs que investigar un poco ms, pero lo comn ser que si tienes instalado PHP, tendrs instala tambin esta librera. Es importante destacar que se elimin de GD el algoritmo de compresin LZW, que haba implementado David Rowley, que aunque proporciona mejores resultados que el actual, tiene el grave problema de la patente software que tiene sobre el Unisys, y que obliga a pagar miles de dolares por su utilizacin. Aprovecho esta ocasin para recomendar al lector que profundice sobre el serio problema que constituyen las patentes software para los desarrolladores, y en especial para los desarrolladores de software libre, y le invit a que visite el web de noticias barrapunto.com y busque informacin sobre las patentes software. Es un tema muy delicado y que an en Europa no se ha impuesto. Imaginemos que tenemos en nuestro sistema instalado PHP, con soporte para GD (la mejor forma de asegurarse es con la informacin de respuesta de la llamada a la funcin phpinfo()) y que queremos empezar a trabajar. El ejemplo ms sencillo ser abrir una imagen GIF ya existente en el disco y mostrarla tal cual al usuario. Est claro que esto no tiene mucho mrito, es lo que hace el servidor de web sin ayuda de PHP, pero es un buen comienzo para lo que va a seguir. Para lograr este objetivo, el programa PHP es:

// En la cabecera HTTP indicamos que lo que devolvemos es una imagen // de tipo GIF. Para ello utilizamos el tipo MIME: image/gif Header("Content-type: image/gif"); // Creamos la imagen a partir de un fichero existente $im = imagecreatefromgif("images/e3_1.gif"); // Mostramos la imagen ImageGif($im); // Liberamos la memoria que ocupaba la imagen ImageDestroy($im);
Como vis hasta ahora el cdigo es muy sencillito. Se crea un imagen nueva a partir de un GIF que ya exista, se enva al cliente para que esta la pueda visualizar, y se destruye para liberar toda la memoria que pudiera ocupar, que tratndose de imagenes puede ser mucha.

Vale, lo bsico ya lo sabemos. Pasemos a ver como a partir de una imagen poder pintar encima de ella. En el manual de PHP nos ponen como ejemplo de funcionalidad que, a partir de un GIF de un botn, se puede ir superponiendo texto. De esta forma ahorraramos el trabajos de hacer decenas de botones iguales, pero con un texto diferente. Y si queremos cambiar el tipo de botn para todo el web, bastar con cambiar una sola imagen. Si, si ya se que estas pensando en que esto es una idea excelente para poder tener temas diferentes y que cambien a gusto del usuario o del maestro del web. Veamos el cdigo que nos permite lograr esto. Supongamos que tenemos una pgina HTML que para poner los botones utiliza <img src="boton.php3?texto_boton=abrir"> Cada vez que se ponga un botn se va a llamar al programa PHP "boton.php3" y se le va a pasar utilizando el mtodo GET el texto a visualizar en el botn. El contenido de boton.php3 es:

Header("Content-type: image/gif"); $im = imagecreatefromgif("images/e3_boton.gif"); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($texto_boton))/2; ImageString($im,3,$px,9,$texto_boton,$orange); ImageGif($im); ImageDestroy($im);
Creamos con GIMP una imagen de 50x50 pixels, la llenamos con el colore que ms nos guste, el aplicamos a travs de "Script-fu" y la opcin "Decor" un "Bevel" (un relieve) y guardamos dicha imagen como nuestro botn (e3_boton.gif).

En el cdigo PHP abrimos esta imagen. Luego creamos un color (naranja) utilizando la funcin ImageColorAllocate de GD. A continuacin echamos cuentas de las dimensiones que ha de tener la cajita para poner el texto. Con la funcin ImageString ponemos el texto sobre la imagen y ya lo tenemos. Slo nos queda visualizarla y liberar los recursos ocupados una vez que la imagen se ha enviado al cliente.

Qu ms podemos hacer con la librera GD? Pues en el manual de PHP en la seccin XXIII tenemos todas las funciones de la librera GD disponibles en PHP. Podemos dibujar pixels, arcos, imprimir caracteres, trazar lneas continuas o discontinuas, crear polgonos, rectangulos, llenarlos con colores... Para los amantes de las fuentes en las cadenas de textos, la librera proporciona funciones par cargar fuentes de tipo Postscript y fuentes True Type. Para estas ltimas adems de GD es necesaria la librera FreeType. Resumiendo, las posibilidades que brindan estas funciones son mltiples y potentes. El lector puede pensar ahora en las necesidades de su entorno y ver como puede aplicar esta librera para resolverlas.

El uso de las polmicas "cookies" desde PHP

Las "cookies" son el ejemplo claro de una tecnologa muy til pero de usos un tan peligrosos. Muchas veces se han criticado y se las ha asociado con la prdidad de intimidad de los navegantes. Una "cookie" no es ms que una variable que se registra dentro del navegador del internauta. En esa variable se puede almacenar cualquier informacin que el usuario haya proporcionado al sitio web: su nombre, direccin, edad, dni, cuenta bancaria etc. Por supuesto, se puede guardar ms de una cookie por lo que si el usuario ha proporcionado informacin delicada a un sitio web, y este la almacena en cookies dentro del navegador del internauta, cada vez que el internauta acuda de nuevo al sitio web, podr ser identificado por esto y recuperados todos los datos que fueron almacenados en el pasado. En si mismo esta funcionalidad no es buena ni mala. Si por ejemplo, solemos comprar en una tienda, el tener una cookie nos puede ahorrar el tenernos que identificar, meter nuestros datos personales cada vez que acudamos etc. Pero si por ejemplo, tenemos alguna enfermedad contagiosa y visitamos sitios para obtener informacin, el que se nos pueda identificar es algo no deseado. Si estos sitios ponen cookies en nuestro navegador, se puede saber que pginas visitamos, con que frecuencia, cuanto tiempo permanecemos en cada pgina de forma aproximada, etc. PHP tiene un excelente soporte para cookies que hace muy sencilla la vida al desarrollador. El poner una cookie dentro del navegador del usuario es tan sencillo como se muestra a continuacin.

setcookie("nombre","Alvaro del Castillo"); echo "Tu nombre es:".$nombre."\n";


Como vemos es muy sencillo definir una cookie en el cliente. Si el navegador de internauta tiene configurado que se rechacen las cookies, o que se pregunte si se permite aceptarla, las cookies pueden ser controladas. Pero por defecto los navegadores dejan que las cookies se creen sin que el usuario sea consciente de ello. Recuperar el valor de una cookie desde PHP no puede ser ms fcil. El interprete de PHP crea variables para todas las cookies que enva el cliente hacia el servidor de web y como es puede ver en el cdigo anterior, el acceso a ellas es como acceder a una variable cualquiera.

Hay que destacar que las cookies se organizan por dominios, es decir, una cookie est asociada a un dominio y es cuando el usuario accede a cualquier web bajo ese dominio cuando el navegador, de forma automtica, enva todas las cookies de ese dominio al servidor de web. Un detalle muy importante en las cookies es que pueden tener asociadas una fecha de caducidad. De esta forma los datos que se almacenan en las cookies dejan de tener validez y de enviarse al servidor pasados un cierto tiempo. Por ejemplo, imaginemos que tenemos un servicio de pago trimestral. Cuando se comprueba el pago de un cliente se le asigna una cookie que caducar a los tres meses. Durante esos meses el cliente podr acceder al servicio, ya que tendr una cookie que le autorizar. Si esta cookie no se renueva antes de tres meses, cuando pase este tiempo el cliente dejar de tener acceso al servicio ya que la cookie dejar de enviarse al haber caducado. Veamos el cdigo que permite hacer esto.

cookie("Acceso",$value,time()+3600*24*90); /* expira en 3 meses */

El tiempo, el tercer parmetro de la funcin, se introduce en segundos. La funcin time() nos devuelve los segundos de la fecha actual. Aumentamos esos segundos en el tiempo que queramos que tenga validez la cookie. Las cookies se pueden controlar desde PHP de una forma muy sencilla. Es un mecanismo muy potente para proporcionar estado a un protocolo sin estado como es HTTP, aunque antes de decantarnos por una solucin con cookies, deberemos analizar si es lo ms adecuada ya que afecta de forma muy importante a la privacidad de los usuarios de nuestros servicios. En el siguiente apartado vamos a ver otra posible solucin para tener control de quin est visitando nuestro sitio y como lo est haciendo, aunque como veremos en este caso el usuario meter un login y clave que le identificaran hasta que cierre el navegador. Tutoriales

Webs dinmicos con PHP


Autor: Alvaro del Castillo

PHP para desarrollo de aplicaciones web (II) o La autenticacin de usuarios utilizando HTTP

o o o

Subida de ficheros utilizando HTTP Conclusiones Referencias

PHP para desarrollo de aplicaciones web (II)


La autenticacin de usuarios utilizando HTTP
El protocolo HTTP proporciona un mecanismo de autenticacin de clientes. Para ello hay que utilizar la cabecera de los paquetes HTTP e incluir en ellos que enviamos un paquete de autenticacin. Este paquete, una vez recibido en el cliente, provocar que este obtenga de alguna forma un login y una clave del navegante. Lo ms comn es que se presente una cajita con dos campos: uno para introducir el login y el otro para introducir la clave. Este login y clave son enviados al servidor, el cual verificar los permisos de este usuario a travs de algn sistema: bases de datos, LDAP etc. PHP tiene una funcin llamada header() que permite trabajar con la cabecera de los paquetes HTTP. Es fundamental no escribir nada de cdigo HTML antes de utilizar estas funciones, ya que en caso contrario, no sera posible modificar la cabecera del paquete HTTP y al llamada a la funcin header provocara un error. Si queremos enviar al usuario una peticin de autenticacin lo que hay que hacer es incluir al comienzo de la pgina el siguiente cdigo:

if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"Zona protegida\""); Header("HTTP/1.0 401 Unauthorized"); echo "Texto que se enva si el usuarios pulsa en botn Cancel\n"; exit; } else { echo "Hola $PHP_AUTH_USER. "; echo "Has introducido $PHP_AUTH_PW como tu clave. "; }

En este sencillo ejemplo, tomado directamente del manual de PHP, lo nico que se hace es presentar el login y clave introducidos por el usuario. Lo normal es que se compruebe este login y clave en una base de datos, a travs de las potentes funciones de PHP, o en un servidor de LDAP o la misma base de datos de usuarios del sistema. Una vez que el usuario se ha autenticado el cliente, estos datos se envan en todas las peticiones de pginas para esa zona protegida, por lo que en todo momento podemos saber quien est accediendo a las pginas. Es una especie de cookie que se mantiene mientras el usuario no apague el navegador o reciba un paquete de autenticacin invalida. Con este sistema podemos tener una zona protegida en la que se hace un control exhaustivo de quien ha accedido a la pgina, a que hora, que otras pginas ha visitado de la zona protegida etc. El usuario es consciente que desde el momento que ha insertado su login y clave ha sido identificado, y que todo lo que haga puede ser registrado. El problema con las cookies es que el usuario no es muchas veces consciente de este hecho, y el da que lo entiende, se vuelve un navegante paranoico ms que cree que en todos los sitios le estn controlando.

Subida de ficheros utilizando HTTP


Uno de los servicios favoritos de todos los internautas es el intercambio de informacin. Y este suele ir asociado al intercambio de ficheros en un 99% de los casos. Muchas veces cuando montamos un servicio en Internet, necesitamos que el usuario pueda enviar sus ficheros al servidor: pginas web, imgenes, sonido, etc. Como todos sabemos la solucin ideal para el intercambio de ficheros es el FTP. Pero lo que los internautas estn acostumbrados a utilizar es el web. Para que utilicen el FTP hay que indicarles un cliente, el navegador podra ser pero su interfaz es compleja para hacer FTP. Una vez que tienen el cliente hay que configurarlo. Y luego tienen que aprender a utilizar el programa. En muchos casos esto slo supone la prdida de un par de horas pero en otros, se vuelve algo complicado de lograr si el internauta no est muy formado en temas de Internet. HTTP nos proporciona una solucin ideal para simplificar este envo de ficheros desde el cliente hacia el servidor, sin salirse de la interfaz web en ningn momento. Es lo que se conoce como HTTP Upload. Con este mecanismo podemos lograr que el cliente nos enve ficheros locales de su computador pulsando un botn. Lo primero es crear una pgina HTML con un formulario en el que incluimos el widget.

<FORM ENCTYPE="multipart/form-data" ACTION="recibe_fichero.php3" METHOD=POST> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000"> Enva este fichero: <INPUT NAME="fichero_usuario" TYPE="file"> <INPUT TYPE="submit" VALUE="Enva Fichero"> </FORM>
Destacar de este formulario HTML la posibilidad de restringir el tamao del fichero que se va a enviar. El protocolo HTTP no es tan robusto como FTP para el intercambio de ficheros grandes, por lo que este sistema es muy recomendable con ficheros de cientos de kilo-bytes. La pgina HTML resultante es, una vez que el usuario ha pulsado el botn de seleccionar el fichero la que se observa en la siguiente figura.

Este fichero se enva al servidor de web el cual lo reenva al cgi que se encarga de su tratamiento, en este caso el programa PHP "recibe_fichero.php3". Este programa PHP se encarga de ir recibiendo el fichero y almacenarlo en un directorio del disco duro. Es importante tener en cuenta que el usuario que est guardando el fichero es aquel con el que se ejecuta el servidor de web por lo que deber de tener permisos para escribir en el directorio y fichero que se utilicen. Dentro del programa de PHP que recibe este fichero se definen una serie de variables que nos vana a permitir gestionar el fichero recibido:

$fichero_usuario: nombre del fichero temporal en el que se ha almacendo en el servidor el fichero enviado por el usuario. El lugar donde se guardan estos ficheros es el directorio temporal del servidor de web. $fichero_usuario_name: nombre original del fichero tal y como nos lo envi el usuario $fichero_usuario_size: tamao del fichero $fichero_usuario_type: el tipo MIME con el que el navegador a identificado el fichero

Con estos datos es sencillo localizar los ficheros que nos envan los clientes y colocarlos en los directorios adecuados. Podemos incluso colocarlos en unos directorios u otros segn la identidad del usuario que los enve.

En principio este servicio se puede abrir de forma annima, con lo que tendramos algo muy similar a un servidor de FTP annimo. Pero nada nos impide proteger las pginas de subida de ficheros y poder identificar al usuario que los enva. En este caso ya tenemos un servicio similar a un FTP autenticado. El proporcionar la opcin de subir los ficheros por el web a un cliente puede ser la frontera entre que nos lo enve o no. En un mundo de portales, con cientos de servicios gratuitos, si queremos tener la esperanza de que nuestros usuarios nos enven sus fotografas, la de los productos que meten en su tienda gratuita etc. las posibilidades de que lo logremos sern mucho ms altas con este tipo de mecanismos que utilizando el protocolo FTP clsico. Y siempre se pueden dejar ambas opciones, para que los usuarios ms avanzados tengan la potencia y flexibilidad de intercambiar sus ficheros con FTP.

Conclusiones
Las funcionalidades presentadas en este artculo son bsicas a la hora de crear pginas dinmicas utilizando PHP. Su dominio y su integracin dentro de proyectos de Internet debe ser un objetivo dentro de la comunidad de desarrolladores PHP. Son tecnologas muy potentes, aunque slo constituyen la punta de todo lo que se puede hacer con el lenguaje PHP. En las prximas entregas de esta seccin seguiremos presentando nuevas funciones de las amplsimas libreras de PHP, y comenzaremos a profundizar en PHP4, el producto estrella para el desarrollo de Internet de los prximos meses.

Vous aimerez peut-être aussi