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).

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.

�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.

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.