El protocolo HTTP proporciona un mecanismo de autenticaci�n de clientes. Para ello hay que utilizar la cabecera de los paquetes HTTP e incluir en ellos que enviamos un paquete de autenticaci�n. Este paquete, una vez recibido en el cliente, provocar� que este obtenga de alguna forma un login y una clave del navegante. Lo m�s com�n 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 trav�s de alg�n sistema: bases de datos, LDAP etc.
PHP tiene una funci�n llamada header() que permite trabajar con la cabecera de los paquetes HTTP. Es fundamental no escribir nada de c�digo HTML antes de utilizar estas funciones, ya que en caso contrario, no ser�a posible modificar la cabecera del paquete HTTP y al llamada a la funci�n header provocar�a un error.
Si queremos enviar al usuario una petici�n de autenticaci�n lo que hay que hacer es incluir al comienzo de la p�gina el siguiente c�digo:
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm=\"Zona protegida\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Texto que se env�a si el usuarios pulsa en bot�n 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 trav�s 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 env�an en todas las peticiones de p�ginas para esa zona protegida, por lo que en todo momento podemos saber quien est� accediendo a las p�ginas. Es una especie de cookie que se mantiene mientras el usuario no apague el navegador o reciba un paquete de autenticaci�n invalida. Con este sistema podemos tener una zona protegida en la que se hace un control exhaustivo de quien ha accedido a la p�gina, a que hora, que otras p�ginas 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 d�a que lo entiende, se vuelve un navegante paranoico m�s que cree que en todos los sitios le est�n controlando.
�Subida de ficheros utilizando HTTP
Uno de los servicios favoritos de todos los internautas es el intercambio de informaci�n. 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: p�ginas web, im�genes, sonido, etc.
Como todos sabemos la soluci�n ideal para el intercambio de ficheros es el FTP. Pero lo que los internautas est�n acostumbrados a utilizar es el web. Para que utilicen el FTP hay que indicarles un cliente, el navegador podr�a 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 s�lo supone la p�rdida 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 soluci�n ideal para simplificar este env�o de ficheros desde el cliente hacia el servidor, sin salirse de la interfaz web en ning�n momento. Es lo que se conoce como HTTP Upload. Con este mecanismo podemos lograr que el cliente nos env�e ficheros locales de su computador pulsando un bot�n.
Lo primero es crear una p�gina 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">
Env�a este fichero: <INPUT NAME="fichero_usuario" TYPE="file">
<INPUT TYPE="submit" VALUE="Env�a Fichero">
</FORM>
Destacar de este formulario HTML la posibilidad de restringir el tama�o 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 p�gina HTML resultante es, una vez que el usuario ha pulsado el bot�n de seleccionar el fichero la que se observa en la siguiente figura.

Este fichero se env�a al servidor de web el cual lo reenv�a 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: tama�o 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 env�an los clientes y colocarlos en los directorios adecuados. Podemos incluso colocarlos en unos directorios u otros seg�n la identidad del usuario que los env�e.

En principio este servicio se puede abrir de forma an�nima, con lo que tendr�amos algo muy similar a un servidor de FTP an�nimo. Pero nada nos impide proteger las p�ginas de subida de ficheros y poder identificar al usuario que los env�a. En este caso ya tenemos un servicio similar a un FTP autenticado.
El proporcionar la opci�n de subir los ficheros por el web a un cliente puede ser la frontera entre que nos lo env�e o no. En un mundo de portales, con cientos de servicios gratuitos, si queremos tener la esperanza de que nuestros usuarios nos env�en sus fotograf�as, la de los productos que meten en su tienda gratuita etc. las posibilidades de que lo logremos ser�n mucho m�s altas con este tipo de mecanismos que utilizando el protocolo FTP cl�sico. Y siempre se pueden dejar ambas opciones, para que los usuarios m�s avanzados tengan la potencia y flexibilidad de intercambiar sus ficheros con FTP.
�Conclusiones
Las funcionalidades presentadas en este art�culo son b�sicas a la hora de crear p�ginas din�micas utilizando PHP. Su dominio y su integraci�n dentro de proyectos de Internet debe ser un objetivo dentro de la comunidad de desarrolladores PHP.
Son tecnolog�as muy potentes, aunque s�lo constituyen la punta de todo lo que se puede hacer con el lenguaje PHP. En las pr�ximas entregas de esta secci�n seguiremos presentando nuevas funciones de las ampl�simas librer�as de PHP, y comenzaremos a profundizar en PHP4, el producto estrella para el desarrollo de Internet de los pr�ximos meses.
�Referencias
- [1] Librer�a GD de Boutell.Com: http://www.boutell.com/gd
- [2] Noticias de software libre: http://barrapunto.com
- [3] Grupo PHP: http://php.net