Programación en castellano
Inicio > Tutoriales > Webs dinámicos con PHP
-Tutoriales

Webs dinámicos con PHP


PHP para desarrollo de aplicaciones web (I)

. Introducción

Bienvenido a esta tercera entrega del curso de programación con PHP. En la primera os avanzamos lo que va a significar la nueva versión dentro del mundo PHP, la 4.0 y en la segunda os presentamos la librería más potente para desarrollar aplicaciones en PHP, phplib.

En esta tercera ha llegado el momento de mirar con más detenimiento PHP, sus funciones y para que lo podemos utilizar. En concreto nos vamos a centrar en las características de PHP principales, detalladas dentro del propio manual de PHP:

  • Creación de imágenes GIF gracias a la librería GD
  • El uso de las polémicas "cookies" desde PHP
  • La autenticación de usuarios utilizando HTTP
  • La subida de ficheros utilizando HTTP

Estos temas se tratan en los capítulos 15,16,17 y 18 del manual de PHP, aunque aquí vamos a intentar darle un enfoque más práctico que el que da dentro del manual de referencia de PHP. En todos los casos vamos a poner ejemplos de aplicaciones reales que podrían aprovechar estas características de PHP y vamos a analizar los problemas y ventajas de cada una de ellas. Una vez cubiertas estas funcionalidades básicas, podremos comenzar en futuras entregas a lanzarnos con todas las demás librerías para acceso a servidores LDAP, IMAP etc. que nos proporciona PHP.

Una de las grandes novedades de PHP ha sido la publicación el día 22 de Mayo de PHP4 de forma oficial. A partir de ahora veremos un gran bombardeo de información sobre PHP, su nuevo interprete Zend y el alto rendimiento que se logra con esta nueva versión.

Sin más dilación comenzamos a desglosar los diferentes puntos de esta entrega, esperando que disfrutéis con la potencia y flexibilidad que ofrece PHP a todos los desarrolladores.

. Creación de imágenes GIF desde PHP

Uno de los temas más importantes a la hora de construir un sitio web en Internet de calidad es el aspecto gráfico. Un mal diseño gráfico, demasiado recargado, con un incorrecto uso de colores, o demasiado pesado (imágenes de muchos kilo-bytes) puede echar por tierra todo una estupenda idea.

En Internet es difícil lograr que los navegantes caigan por tu página y si lo hacen, es vital que lo que encuentren les llame la atención lo suficiente como para volver de nuevo allí, y conocer más en profundidad que se le ofrece.

Otro aspecto fundamental es la renovación de la información del sitio web, teniendo mucho cuidado de mantener una imagen identificativa del sitio, ya que si no es difícil lograr que el navegante pueda llegar a sentirse a gusto en el lugar.

Tanto en el aspecto gráfico como en el de renovación PHP tiene una funcionalidad muy potente: la creación 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 información que recibe cuando el usuario acude a la página. De esta forma podemos presentar información gráfica dinámica. Un ejemplo de esta funcionalidad sería la generación de números para informar del número de accesos que ha tenido una página.

Otros usos podrían ser el envío a través de un formulario de un conjunto de datos numéricos y la obtención de gráficas de dichos datos en diferentes formatos.

Otro posible servicio podría ser el permitir que usuarios nos enviaran imágenes "no transparentes" y convertirlas en transparentes utilizando las llamadas PHP para el tratamiento de imágenes. Generalizando, la librería de PHP para el tratamiento de GIF permiten montar una serie de servicios y funcionalidades a nivel gráfico que podemos utilizar para lograr una flexibilidad y potencia muy grandes.

Después de esta pequeña introducción a las posibilidades de la tecnología vamos a ver como se utiliza, la API de estas funciones de tratamiento de imágenes, y que es necesario tener instalado.

PHP utiliza para este tratamiento de imágenes la librería GD de la empresa Boutell.Com, creada por Thomas Boutell, autor original de GD. Esta es una librería que se creó inicialmente con el objetivo del tratamiento de GIF. Es necesario que la tengas instalada en tu sistema. El módulo de PHP de Red Hat incluye por defecto esta librería en PHP así que te habrá obligado el sistema a instalar GD antes de poder instalar el módulo de PHP. Si tienes otra distribución tendrás que investigar un poco más, pero lo común será que si tienes instalado PHP, tendrás instala también esta librería. Es importante destacar que se eliminó de GD el algoritmo de compresión LZW, que había 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 utilización. Aprovecho esta ocasión 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 información sobre las patentes software. Es un tema muy delicado y que aún 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 información de respuesta de la llamada a la función phpinfo()) y que queremos empezar a trabajar. El ejemplo más sencillo será abrir una imagen GIF ya existente en el disco y mostrarla tal cual al usuario. Está claro que esto no tiene mucho mérito, 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 véis hasta ahora el código es muy sencillito. Se crea un imagen nueva a partir de un GIF que ya existía, se envía al cliente para que esta la pueda visualizar, y se destruye para liberar toda la memoria que pudiera ocupar, que tratándose de imagenes puede ser mucha.

Vale, lo básico 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 botón, se puede ir superponiendo texto. De esta forma ahorraríamos el trabajos de hacer decenas de botones iguales, pero con un texto diferente. Y si queremos cambiar el tipo de botón 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 código que nos permite lograr esto.

Supongamos que tenemos una página HTML que para poner los botones utiliza <img src="boton.php3?texto_boton=abrir"> Cada vez que se ponga un botón se va a llamar al programa PHP "boton.php3" y se le va a pasar utilizando el método GET el texto a visualizar en el botón. 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 más nos guste, el aplicamos a través de "Script-fu" y la opción "Decor" un "Bevel" (un relieve) y guardamos dicha imagen como nuestro botón (e3_boton.gif).

Figura 1: Botón creado con GIMP

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

Figura 2: Botonera generada de forma automática

¿Qué más podemos hacer con la librería GD? Pues en el manual de PHP en la sección XXIII tenemos todas las funciones de la librería GD disponibles en PHP. Podemos dibujar pixels, arcos, imprimir caracteres, trazar líneas continuas o discontinuas, crear polígonos, rectangulos, llenarlos con colores...

Para los amantes de las fuentes en las cadenas de textos, la librería proporciona funciones par cargar fuentes de tipo Postscript y fuentes True Type. Para estas últimas además de GD es necesaria la librería FreeType.

Resumiendo, las posibilidades que brindan estas funciones son múltiples y potentes. El lector puede pensar ahora en las necesidades de su entorno y ver como puede aplicar esta librería para resolverlas.

. El uso de las polémicas "cookies" desde PHP

Las "cookies" son el ejemplo claro de una tecnología muy útil pero de usos un tan peligrosos. Muchas veces se han criticado y se las ha asociado con la pérdidad de intimidad de los navegantes.

Una "cookie" no es más que una variable que se registra dentro del navegador del internauta. En esa variable se puede almacenar cualquier información que el usuario haya proporcionado al sitio web: su nombre, dirección, edad, dni, cuenta bancaria etc. Por supuesto, se puede guardar más de una cookie por lo que si el usuario ha proporcionado información 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 información, el que se nos pueda identificar es algo no deseado. Si estos sitios ponen cookies en nuestro navegador, se puede saber que páginas visitamos, con que frecuencia, cuanto tiempo permanecemos en cada página 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 continuación.

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 más fácil. El interprete de PHP crea variables para todas las cookies que envía el cliente hacia el servidor de web y como es puede ver en el código anterior, el acceso a ellas es como acceder a una variable cualquiera.

Figura 3: Petición de confirmación de cookie al cliente

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 automática, envía 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 código que permite hacer esto.

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

El tiempo, el tercer parámetro de la función, se introduce en segundos. La función 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 solución con cookies, deberemos analizar si es lo más 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 solución para tener control de quién 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.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: juegos gratis | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | decoración web | gifs animados