Está en la página 1de 34

Webs dinmicas con PHP

Autor: lvaro del Castillo


[Ver curso online]

Descubre miles de cursos como ste en www.mailxmail.com 1
mailxmail - Cursos para compartir lo que sabes
Presentacin del curso
El lenguaje PHP es un lenguaje de programacin de estilo clsico, nada que ver con
el HTML, XML o WML. Se parece mucho ms al Java o Javascript pero, a diferencia de
estos que se ejecutan en el navegador, PHP se ejecuta en el servidor, por eso nos
permite acceder a los recursos que tenga el servidor como por ejemplo podra ser
una base de datos.
En este curso te damos las bases para aprender a crear webs dinmicas con PHP.
Visita ms cursos como este en mailxmail:
[ http://www.mai l xmai l .com/cursos-i nformati ca]
[ http://www.mai l xmai l .com/cursos-programaci on]
Tu opinin cuenta! Lee todas las opiniones de este curso y djanos la tuya:
[ http://www.mai l xmai l .com/curso-webs-di nami cas-php/opi ni ones]
Cursos similares
Cursos Valoracin Alumnos Vdeo
Primeros pasos con XML y XSL
XML es el acrnimo del ingls eXtensible Markup Language cuyo objetivo
principal es conseguir una pgina web ms semntica. Inicialmente nace
como sucesor del HTML, separ...
[ 10/ 09/ 04]

7. 410
Introduccin al html
HTML es un lenguaje muy sencillo que permite describir hipertexto, es
decir, texto presentado de forma estructurada y agradable, con enlaces
(hyperlinks) que conducen a o...
[ 03/ 11/ 03]

31. 497
Programacin estructurada (primera parte)
Aprende, en el mundo de la informtica, la programacin estructurada: en
qu consiste y cul es su justificacin. Analizaremos la visin clsica de la
programacin estruc...
[ 16/ 10/ 08]

2. 113
Redes y comunicaciones (segunda parte)
Este curso es la segunda parte de nuestro estudio tcnico explicativo sobre
redes y comunicaciones de transferencia de datos. Ahora podrs ampliar
los conocimientos adqui...
[ 27/ 08/ 08]

1. 485
Posicionamiento Web
El posicionamiento en los buscadores es un factor clave para una empresa.
El 75% de los visitantes nuevos de un sitio web se consiguen mediante
buscadores de internet. Ap...
[ 30/ 05/ 08]

727
Descubre miles de cursos como ste en www.mailxmail.com 2
mailxmail - Cursos para compartir lo que sabes
1. Introduccin
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/i ntroducci on]
En mi experiencia como desarrollador de aplicaciones web, PHP ha significado junto
al servidor de web Apache, las dos herramientas claves para la creacin de
aplicaciones. PHP es un lenguaje sencillo, de sintaxis cmoda y similar a la de otros
lenguajes como C o C++, es rpido a pesar de ser interpretado, multiplataforma y
dispone de una gran cantidad de libreras que facilitan muchsimo el desarrollo de
las aplicaciones.
El cdigo generado es mantenible, se lee muy bien y podemos programar utilizando
objetos. PHP es un lenguaje ideal tanto para el que comienza a desarrollar
aplicaciones web como para el desarrollador experimentado, y est alcanzando unos
niveles de uso (ms de 1 milln de webs lo utilizan ya) que convierten su
conocimiento en algo indispensable para los profesionales del desarrollo en Internet.
Y, adems, PHP es un lenguaje basado en herramientas con licencia de software
libre, es decir, no hay que pagar ni licencias, ni estamos limitados en su distribucin
y, podemos ampliarlo con nuevas funcionalidades si as lo quisiramos. Respecto a
su licencia, en la versin PHP 3.0 era GPL, pasando a ser modificada en su versin
4.0, por la incorporacin de Zend, un nuevo interprete de PHP mucho ms rpido
que el anterior de PHP. Este interprete Zend tiene asociado un optimizador opcional,
el cual ya est ms dentro del mundo comercial que del software libre, tema que ha
levantado algunas suspucacias dentro de la comunidad de desarrolladores de
software libre.
En esta serie de presentacin de PHP mostraremos este lenguaje, como se instala y
configura, como se desarrolla con l, las libreras fundamentales y como no, su
excelente forma de trabajar con casi todas las bases de datos, y en especial, con
MySQL, con la que forma un equipo estrella dentro del mundo de desarrollo software.
No olvidaremos por otro lado a PostgreSQL, la base de datos que es realmente
software libre, y que avanza con piso firme para convertirse en la base de datos de
referencia dentro de cualquier proyecto libre, sobre todo tras la publicacin de la
versin 7.0.
En los artculos de la serie vamos a describir PHP en su ltima versin, PHP4, que
por fin en Mayo del 2000 ha sido publicada. Posiblemente para cuando el lector
comience a desarrollar con PHP, esta versin 4 ser la estndar. En ella hay muchos
cambios y mejoras que detallaremos a lo largo de los artculos de la serie.
La serie est orientada al uso conjunto de Apache y PHP, aunque PHP se puede
compilar como un ejecutable que puede ser utilizado como cgi-bin. De esta forma,
cualquier servidor de web que soporte cgi podra ejecutar las pginas PHP. La
ventaja que tiene Apache frente a estos es que podemos compilar el interprete PHP
como un mdulo de Apache, por lo que la velocidad de ejecucin de estas pginas
PHP es muy superior, as como el consumo de recursos al cargarse el interprete de
PHP una sola vez en memoria.
Para estar al da de lo que ocurre en el mundo de PHP tenemos las pginas oficiales
de web de PHP, en php.net, y las noticias de PHP que van apareciendo dentro de
Barrapunto.com.
Descubre miles de cursos como ste en www.mailxmail.com 3
mailxmail - Cursos para compartir lo que sabes
Qu es PHP?.- Con estas siglas nos referimos a un lenguaje de programacin que
est muy orientado al desarrollo de aplicaciones web. Cuando pedimos a nuestro
servidor de web una pgina PHP, que no es ms que un programa PHP que genera
HTML, antes de enviar dicha pgina al cliente se la pasa al interprete de PHP. Este la
interpreta y es el resultado de esta interpretacin del programa PHP, contenido en la
pgina PHP, lo que termina llegando al cliente.
Supongamos que el contenido de una pgina web que reside en el servidor, y cuyo
nombre es "intro.php", tiene el siguiente contenido:
<? echo "<h1>Mensaje desde PHP</h1>";?>
Cuando un navegador le pida al servidor de web la pgina "intro.php", el servidor de
web va a darse cuenta, por la extensin ".php", de que esta pgina ha de enviarse
primero al interprete de PHP. Este recibe el contenido de la pgina y como resultado
de esta ejecucin (interpretacin) genera una pgina HTML, que es la que enva al
cliente a travs de Apache. Como veremos en una pgina PHP se puede mezclar
HTML y PHP, algo muy flexible pero que hay que manejar con cuidado ya que puede
llevar a confusiones y, sobretodo, a que el equipo que disee las pginas web y el
que programe la aplicacin no puedan ser independientes.
Descubre miles de cursos como ste en www.mailxmail.com 4
mailxmail - Cursos para compartir lo que sabes
2. Instalacin de PHP
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/i nstal aci on-php]
Sin duda esta seccin del manual debe de ser actualiazada ya que se refiere an a la
ltima beta de PHP4, pero salvo este detalle, el procedimiento sigue siendo vlido.
Tambin hay que estar atentos a la publicacin de Apache 2.0 ya que quizs,
implique unos cambios mayores dentro esta seccin. Si algn lector quiere
contribuir y actualizar la versin ser gratamente bienvenida.
Uno de los mayores quebraderos de cabeza de PHP en sus comienzos era que
obligaba a tener Apache en cdigo fuente y compilarlo. Por fin la instalacin de PHP
se puede hacer de forma sencilla y sin tener que modificar en casi nada a nuestro
servidor de web. Tan slo necesitamos tener una versin de Apache con soporte
DSO para la carga dinmica de objetos. La versin con la que se est desarrollando
este artculo es la 1.3.9 aunque toda la serie 1.3 tiene este soporte.
Si el lector tiene ya instalado PHP3 en su servidor de web Apache debe de tomar la
precaucin de desactivarlo. Se puede tener de forma simultnea ambas versiones
funcionando, pero este proceso es algo complejo y no lo vamos a tratar de
momento. Por ello el lector necesita un servidor de web Apache sin soporte para
PHP. La mejor forma de comprobar este dato es editar el fichero de configuracin de
Apache "httpd.conf" (normalmente en el directorio "/etc/httpd") y revisar que no se
hagan referencias en l a PHP. Si las encontrara debera de comentarlas y reiniciar el
servidor de web.
Es necesario que los paquetes de desarrollo de Apache estn tambin instalados en
el entorno del lector. Estos son bsicamente los ficheros de cabecera de la libreras
de Apache ("/usr/include/apache"), las libreras para extender Apache y algn
ejecutable como "apxs" que es una utilidad que permite aadir mdulos de carga
dinmica a Apache. El resultado de nuestra compilacin de PHP va a ser uno de
estos mdulos.
Ha llegado el momento de obtener la ltima versin de PHP de la red. Esta la puede
conseguir el lector de ht t p: / / www. php. net. Una vez que tengamos las fuentes de
PHP4beta3 vamos a pasar a instalarla. Los pasos a dar son:
tar xvfz php-4.0b3.tar.gz
cd php-4.0b3
confi gure --wi th-apxs=/ usr/ sbi n/ apxs
make
make install (como superusuario)
Si todo ha ido bien ya tenemos todo preparado para poder reiniciar el servidor de
web Apache con el mdulo de PHP4 entre sus funcionalidades. De la compilacin
cabe destacar el gran tiempo que transcurre en la compilacin de uno de los nuevos
componentes de PHP4, Zend, el motor principal para la interpretacin del lenguaje
PHP.
Si el lector ha estado atento en la fase de "make install" habr podido observar
como se utiliza la herramienta "apxs" para aadir "libphp4.so" a los mdulos de
carga dinmica de Apache. La instruccin en concreto es:
Descubre miles de cursos como ste en www.mailxmail.com 5
mailxmail - Cursos para compartir lo que sabes
/ usr/ sbi n/ apxs -i -a -n php4 l i bs/ l i bphp4. so
Esta herramienta copia este fichero al directorio donde residen los dems mdulos
de carga dinmica, "/usr/lib/apache" normalmente, y modifica el fichero de
configuracin "httpd.conf" para que se cargue este nuevo mdulo al arrancar.
En Mandrake 6.1, y probablemente en RedHat 6.0 y superior, este proceso no
incluye de forma correcta la referencia al mdulo dentro de "httpd.conf" lo que nos
obliga a editar este fichero y modificar la lnea con el contenido:
LoadModule php4_module lib/apache/libphp4.sopor la lnea
LoadModule php4_module modules/libphp4.so
Ahora ya slo nos queda decirle a Apache que todos los ficheros que acaben con la
extensin ".php" sean enviados al interprete de PHP, algo que logramos aadiendo a
"httpd.conf" la lnea:
AddType application/x-httpd-php .php4
En anteriores versiones de Apache existan tres ficheros de configuracin y esta
ltima lnea haba que insertarla en el fichero "srm.conf".
Reiniciamos nuestro servidor Apache, "/etc/rc.d/init.d/httpd restart" en sistemas
Red Hat y si todo ha ido bien tendremos ya todo preparado para empezar a
desarrollar con PHP. Si existe algn problema el servidor de web no se arrancar.
Para detectar que puede estar ocurriendo se pueden analizar los ficheros de registro
de Apache del directorio "/ var/ l og/ httpd" e intentar localizar all el error. A veces
tambin es til iniciar a mano el demonio de Apache sin la ayuda de
""/etc/rc.d/init.d/httpd", ejecutando de forma directa "/usr/sbin/httpd".
Algo que nos puede confirmar de forma definitiva que todo ha ido bien es una lnea
de registro dentro de "/var/log/httpd/error_log" con un contenido similar a:
[notice] Apache/1.3.9 (Unix) (NetRevolution Advanced Server/Linux-Mandrake)
PHP/4.0b3 configured -- resuming normal operations
Si has logrado llegar ya hasta aqu, preprate porque ahora viene lo divertido: la
programacin de pginas PHP.

Descubre miles de cursos como ste en www.mailxmail.com 6


mailxmail - Cursos para compartir lo que sabes
3. Programar pginas PHP
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/programar-pagi nas-php]
Lo primero que vamos a hacer es crear una pgina PHP que nos informe de las
caractersticas del interprete de PHP que tenemos instalado en nuestro servidor de
web. Para ello debemos de crear una pgina PHP con el contenido siguiente:
<? phpInfo(); ?>
Este debe de ser el contenido de un fichero de nombre "info.php" y que debe de
estar en algn lugar accesible por el servidor de web. Quizs lo mejor sea que lo
guardes dentro de t directorio personal web: "/home/tu_login/public_html". Por
ejemplo yo lo tengo dentro del directorio "/home/acs/public_html/info.php". Una
vez que lo tengas guardado vamos a intentar abrir esta pgina. Para ello apunta t
navegador a la pgina: "http://l ocal host/~tu_l ogi n/i nfo.php". En mi caso dicha
pgina es: "http://l ocal host/~acs/i nfo.php". El resultado que debes de obtener debe
de ser algo similar al de la siguiente figura nmero 1.

Al pedirle esta pgina al servidor de web, este al ver su extensin llama al interprete
de PHP y le dice que "ejecute" la pgina y le entregue los resultados. El interprete
abre la pgina y ejecuta la llamada a la funcin "phpInfo()" que, como resultado, nos
Descubre miles de cursos como ste en www.mailxmail.com 7
mailxmail - Cursos para compartir lo que sabes
abre la pgina y ejecuta la llamada a la funcin "phpInfo()" que, como resultado, nos
entrega toda la informacin sobre el interprete de PHP en formato HTML. Verdad
que es sencillo?.
Vamos con una pgina algo ms complicada. Y vamos con la orientacin a objetos.
PHP tiene soporte para la programacin orientada a objetos, es decir, puedes crear
clases para la construccin de objetos, con sus constructores etc. El soporte de
objetos que tenemos en PHP no es tan potente como el de C++, pero cada vez es
ms completo y en esta versin nueva de PHP4 este soporte ha sido mejorado.
Si no sabes programar utilizando objetos en este curso algo vas a aprender pero te
recomiendo que sin ms dilacin consigas algn buen libro o tutorial por Internet.
Los objetos cada vez tienen ms fuerza a la hora de desarrollar software. De
cualquier forma en este curso vamos a utilizar la programacin con objetos en un
nivel muy bsico.
En nuestro siguiente ejemplo vamos a crear un objeto que nos va a permitir acceder
a diversas bases de datos. Claro est que lo vamos a dejar sin implementar an en
gran parte, pero todo llegar. Aqu va el cdigo de la pgina:
<?php
class connection {
var $dbug=1, $con, $type;
function getType() {global $type;return $this->type;}
// Constructor del objeto de conexin a la base de datos
function connection($typedb="MySQL",$database_name="template1") {
$this->connection_open ($typedb,$database_name);
}
// Apertura de la conexin con la base de datos
function connection_open ($typedb,$database_name) {
$this->$type=$typedb;
if ($type=="PostgreSQL") $this->$con=new postgresql_connection;
elseif ($type=="MySQL") $this->$con=new mysql_connection;
else {error_message("Open:Unkown database type");exit;}
$this->$con->connection_open($database_name);
}
}
class mysql_connection {
function mysql_connection() {
echo "<h1>La clase mysql_connection an no est implementada.<h1>";
}
function connection_open($database_name) {
echo "<h1>Mtodo connection_open sin implementar.<h1>";
}
}
$bd = new connection("MySQL","template1");
?>
Si el lector est acostumbrado a la programacin con objetos este cdigo le
resultar muy familiar. Tenemos una clase principal "connection" que se encarga de
Descubre miles de cursos como ste en www.mailxmail.com 8
mailxmail - Cursos para compartir lo que sabes
gestionar las conexiones con la base de datos. Cuando desde nuestro programa
queramos acceder a una base de datos, nos creamos un objeto connection
pasndole como parmetros al constructor de connection, mtodo que se llama de
forma automtica al crear el objeto, el tipo de base de datos al que queremos
acceder y el nombre de la base de datos concreta con la que queremos trabajar.
Este objeto delega en los objetos especficos de cada base de datos, el del gestor de
base de datos MySQL es "mysql_connection", la apertura de una conexin, las
peticiones SQL etc. Esta tcnica de utilizar objetos que delegan el trabajo final en
otros es muy utilizada en lenguajes que carecen de herencia, mecanismo por el que
una clase hereda toda la informacin de estado y mtodos de la clase de a que
hereda. PHP3 en sus primeras versiones no tena soporte para herencia por lo que
me vi obligado a utilizar esta tcnica. En la actualidad PHP ya soporta herencia,
aunque no mltiple. Y no, todas las reglas de encapsulacin pblica y privada no
estn implementadas. Y hay que tener cuidado con algo que nos puede dar muchos
quebraderos de cabeza: al crear un objeto de una clase B que hereda de una clase A,
se llama de forma automtica al constructor de la clase B pero no al de su padre, la
clase A.
Sobre la sintaxis de PHP, es muy similar a la de C o C++. Quizs lo ms destacado
ocurre a nivel semntico: el tipado es muy poco estricto, algo tpico en los lenguajes
"script", y cuando creamos una variable en ella podemos meter el tipo de datos que
queramos. Esto es muy flexible y cmodo para el desarrollador, aunque los errores
que se cometen pueden ser mucho ms graves y difciles de corregir. Las
posibilidades del interprete para detectar incompatibilidades entre variables se
reducen mucho y puede ocurrir cosas extraas en determinadas circunstancias si no
tenemos cuidado.
Sobre el cdigo de este ejemplo en concreto, tenemos dos clases. La definicin de
una clase es hace con la palabra clave "class" seguida del nombre de la clase. Entre
llaves desarrollamos toda la descripcin de la clase, sus variables y mtodos. Dentro
de un mtodo de la clase (function) se pueden acceder otras partes de la clase por
medio del puntero "$this". Por ejemplo, para acceder desde el mtodo
"connection_open" a la variable de la clase "$type" lo hacemos con "$this->$type".
Si guardamos esta clase en un fichero, por ejemplo "ejemploDB.php", cuando
accedamos a este fichero a travs del servidor de web, este llamar de nuevo al
interprete de PHP al ver que la extensin del fichero es "php". El interprete de PHP
analizar el cdigo y ejecutar la instruccin ":
$bd = new connection("MySQL","template1");
Con ello se creara un nuevo objeto de la clase "connection". Al crearse se llama de
forma automtica al constructor "function connection" que a su vez llama al
mtodo "connection_open". Este mtodo crea un nuevo objeto de la clase "mysql_connection" ($con)
"mysql_connection" ($con) el cual llama de forma automtica a su constructor
"function mysql_connection" el cual enva la cadena HTML "<h1>La clase
mysql_connection an no est implementada.<h1>". Desde el mtodo
"connection_open" de "connection" se llama a "connection_open" del objeto "$con",
que es de la clase mysql_connection, lo que provoca que se imprima otra cadena
HTML: "<h1>Mtodo connection_open sin implementar.<h1>.". Tras esta ltima
invocacin el programa finaliza y se enva el resultado al servidor de web, el cual
reenva estos datos al cliente. En la figura 2 podemos ver el resultado de dicha
ejecucin.
Descubre miles de cursos como ste en www.mailxmail.com 9
mailxmail - Cursos para compartir lo que sabes

Descubre miles de cursos como ste en www.mailxmail.com 10


mailxmail - Cursos para compartir lo que sabes
4. Ms caractersticas de PHP
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/mas-caracteri sti cas-php]
Ahora que hemos visto lo sencilo que es desarrollar con PHP vamos a ver que cosas
podemos hacer con l, las libreras de las que disponemos. Muchas de estas
libreras ya estn orientadas a objetos por lo que su uso ser similar al de este
ejemplo. Este ejemplo es el que utilizaremos durante el curso para ir introduciendo
ms conceptos de PHP y en particular, para presentar como se trabaja con las bases
de datos MySQL y PostgreSQL.
PHP en cada nueva versin soporta nuevas funcionalidades por lo que el mejor
mtodo para ver que nuevas libreras incluye es cuando compilamos. Si dentro del
directorio con las fuentes de PHP ejecutamos el comando "configure --help" nos
dar informacin de todas las posibles opciones que tiene PHP al ser compilado y,
entre esta informacin, la de todos los mdulos que podemos aadir a PHP si
disponemos de las libreras adecuadas. Dentro del manual de PHP disponemos
tambin de una referencia a todas las funciones disponibles. Ojo que muchas veces
es necesario compilar PHP de forma especial para incluir soporte para una
determinada funcionalidad. Por ejemplo, si queremos acceder desde PHP al gestor
de base de datos MySQL, es necesario que a la hora de compilar PHP incluyamos ests
soporte. Para ello es necesario tener las libreras de MySQL instaladas en el sistema,
normalmente en el paquete "dev" de MySQL, y ejecutar "./configure --with-mysql"
antes de compilar PHP. De esta forma PHP incluir en el mdulo generado dicho
soporte. En la informacin que obtenemos con la llamada a la funcin "phpInfo()" se
incluye informacin sobre los mdulos incluidos. En la figura 3 se puede observar la
informacin referente al mdulo MySQL y al GD, que se utiliza para la creacin de
grficos "al vuelo".

Descubre miles de cursos como ste en www.mailxmail.com 11
mailxmail - Cursos para compartir lo que sabes

De esta informacin es importante a versin de API del cliente. Si esta no es
compatible con la del servidor que queramos acceder, no podremos acceder a este
servidor. En este caso tenemos la versin 3.22 que utiliza el protocolo 10 para
comunicarse con el servidor MySQL. Si tuvieramos una versin 3.20 del cliente (la
versin de MySQL que se liber con licencia GPL) no podramos acceder a los
servidores 3.22 ya que el cliente utilizara el protocolo de comunicaciones versin 9,
incompatible con la versin 10.
Siempre que se habla de PHP lo primero que se hace es presentar el gran nmero de
gestores de bases de datos a los que puede acceder.
Adabas D
dbm
dBase
filePro
Hyperwave
Informi x
InterBase
LDAP
Microsoft SQL server
mSQL
Descubre miles de cursos como ste en www.mailxmail.com 12
mailxmail - Cursos para compartir lo que sabes
mSQL
MySQL
ODBC
Oracle
PostgreSQL
Solid
Sybase
Pero si este aspecto resulta impresionante no menos el soporte para:
-Acceso a servidores IMAP
-Envo de correo con SMTP
-Acceso a servidores de FTP
-Acceso a SNMP para gestin de redes y equipos
-Generacin dinmica de grficos y documentos PDF
-Anlisis de documentos XML
-Corrector de ortografai
-Genracin de datos en WDDX (Intercambio Web de Datos Distribuidos)
Y todo esto ha sido posible gracias a que PHP ha sido diseado de forma muy
modular y ha sido sencillo segn han sido surgiendo libreras, utilizarlas desde PHP.
Toda esta funcionalidad est basada en libreras que en su mayor parte no han sido
desarrolladas por el equipo de PHP. La gente de PHP lo que ha implementado han
sido os cabos necesarios para poder acceder a las libreras.
A lo largo del curso iremos presentando el uso de algunas de estas libreras,
aunque nada detiene al lector de comenzar este aprendizaje. En el manual de PHP
dispone de documentacin abundante sobre todas estas funciones, su uso y los
posibles resultados. Esta entrega la vamos a finalizar con una descripcin de las
nuevas caractersticas de PHP4, versin que utilizaremos a lo largo de todo el curso.
El nuevo PHP4.- La principal novedad de PHP4 es en el interprete del lenguaje PHP.
Gracias a Zend, desarrollado por Andi Gutmans y Zeev Suraski, se han logrado
aumentos de entre 5 y 10 veces en la velocidad de ejecucin de pginas PHP. Este
nuevo rendimiento le ha puesto por delante de ASP, la tencologa de Microsoft, por
lo que le va a permitir competir directamente con ASP en la plataforma de Microsoft.
La plataforma de desarrollo Apache+PHP en entornos Microsoft est logrando ya
rendimientos superiores a IIS+ASP, por lo que el aumento de su uso en estas
plataformas parece muy probable. Esto significar que en el futuro el desarrollador
en plataformas NT, por ejemplo, no se ver obligado al uso de IIS+ASP para el
desarrollo de sistemas web, tal y como haba sucedido hasta ahora. Por otro lado,
PHP estaba hasta el momento pensado bsicamente para Apache. Era el nico que
tena soporte para tener a PHP como un mdulo del servidor. Todos los dems
servidores de web slo podan utilizar a PHP como cgi. En PHP4 se han aadido al
soporte de la API de Apache, el de Netscape (NSAPI), el soporte para ISAPI ( API de
Internet Explorer) y para la API del servidor de AOL. De esta forma todos estos
servidores podrn lograr rendimientos similares a Apache en su ejecucin de PHP.

Adems del aumento en rendimiento en lo referente al soporte de objetos en PHP, la


Descubre miles de cursos como ste en www.mailxmail.com 13
mailxmail - Cursos para compartir lo que sabes
sobrecarga de objetos se ha mejorado. De esta forma se ha aadido la posibilidad
de mtodos polimrficos, mtodos que segn desde que referencia a un objeto se
llamen se comportan de una forma o de otra. Esta caracterstica es muy importante
para incluir soporte para acceder a las arquitecturas CORBA y COM.
Otra nueva caracterstica de PHP4 es que se puede compilar para soportar hebras,
algo que no era posible en PHP3. La principal ventaja que podemos obtener de esta
funcionalidad es el uso de libreras que utilicen hebras. Y en la mayora de las
implementaciones de CORBA esto es as. Quizs pase ya poco tiempo antes de
poder acceder al mundo CORBA desde PHP.
Para el desarrollador con PHP4 se incluye un depurador lo que nos evitar muchos
quebraderos de cabeza con PHP. Podremos seguir con mayor profundidad esos
errores misteriosos que ocurren en estos lenguajes poco tipados. El nuevo interprete
de PHP es capaz de liberar los recursos que reservemos de forma automtica con lo
que nos podremos olvidar de liberarlos. S, esto es algo similar al recolector de
basura de Java. Habr que hacer pruebas para ver que tal funciona porque en el caso
de Java, muchas veces da ms dolores de cabeza de los que te ahorra. En la
referencia [2] se puede acceder a un informe realizado por Javier Carretero sobre
PHP4, el ms completo que he encontrado en Internet.
Conclusiones.- Esperamos que con esta primera entrega del curso de PHP el lector
haya recibido la motivacin suficiente como para empezar a utilizarlo. Si algo
caracteriza a PHP es su sencillez: en pocos das se puede llegar a ser un
desarrollador de PHP bastante profesional.
En las prximas entregas del curso se irn presentando las libreras principales de
PHP, las virgueras que se pueden acceder con muy poco cdigo y las noticias que
aparezcan dentro del mundo de PHP.
Referencias
[1] ht t p: / / www. php. net: Pgina principal de PHP
[2] Informe de PHP4 de Javier Carretero
Descubre miles de cursos como ste en www.mailxmail.com 14
mailxmail - Cursos para compartir lo que sabes
5. PHPLIB (I)
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/phpl i b-1]
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 VERSION pages stuff
COMMIT CREDITS Makefile TODO 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.
El ndice de la documentacin lo podemos ver en la siguiente figura.
Descubre miles de cursos como ste en www.mailxmail.com 15
mailxmail - Cursos para compartir lo que sabes
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.
Control de sesiones.- Ya en este punto estamos en disposicin de utilizar la librera
PHPLIB. Para ello lo mejor es poner el directorio "pages" de la distribucin en algn
lugar desde el que el servidor de web pueda acceder a l y a travs de un navegador
acceder a la pgina "index.php3". El resultado tiene que ser similar al de la figura 2.
Descubre miles de cursos como ste en www.mailxmail.com 16
mailxmail - Cursos para compartir lo que sabes
Si prueba el lector a recargar la pgina ver que el contador que aparece va
aumentando. Lo que est ocurriendo es que la primera vez que se accedi a esta
pgina se cre una "cookie" para el control de la sesin. A partir de este momento
est "cookie" con el identificador de sesin es enviado al servidor de web por el
cliente cada vez accede a la pgina permitiendo el control del estado de la sesin.
De hecho este control se realiza utilizando la base de datos "phplib" que creamos
anteriormente. Si vemos las tablas que hay en la base de datos "phplib" encontramos:
active_sessions
active_sessions_split
auth_use
auth_user_md5
db_sequence
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.
Control de Identidad de Usuarios.- Junto con el control de sesiones es el control de
acceso a pginas una de las principales necesidades en las aplicaciones web. Y de
nuevo con PHPLIB tenemos solucionado de forma sencilla este control. Es cierto que
con Apache tenemos mecanismos para el control de acceso a pginas, pero es un
Descubre miles de cursos como ste en www.mailxmail.com 17
mailxmail - Cursos para compartir lo que sabes
con Apache tenemos mecanismos para el control de acceso a pginas, pero es un
control de acceso o no acceso. Normalmente necesitamos ir ms all. Necesitamos
que segn la persona que acceda dar acceso a unas partes u otras, poder crear
grupos de usuarios con privilegios etc.
Adems PHPLIB asocia este control de identidad de usuarios al control de sesiones,
algo que nos permite asociar de forma automtica una sesin a un usuario
identificado. Cuando queremos que una pgina solo pueda ser accedida por un
usuario identificado incluimos en la primera lnea de esta pgina:
page_open(array("sess" => "Example_Session", "auth" => "Example_Auth",
"perm" => "Example_Perm", "user" => "Example_User"));
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. Esta pgina se puede observar en la figura 3.

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.

Descubre miles de cursos como ste en www.mailxmail.com 18


mailxmail - Cursos para compartir lo que sabes
6. PHPLIB (II)
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/phpl i b-2]
Ya se ha comentado que uno de los principales problemas a la hora de programar
con PHP, o cualquier otro lenguajes que mezcle HTML y el cdigo, es que el cdigo
final de las pginas tiene mezclado los datos a presentar y el cdigo.
Este mezcla impide adems un correcto trabajo entre los desarrolladores de cdigo
y los creadores de pginas HTML y diseadores grficos. Para resolver este
problemo lo mejor es intentar independizar totalmente el cdigo PHP y el cdigo
HTML. Este objetivo es bastante lioso de lograr a menos que se ataque el problema
de una forma general y se sea muy estrcto a la hora de desarrollar las pginas.
Los beneficios logrados por esta separacin son muy grandes incluyendo por
ejemplo el cambio de temas segn el tipo de usuario que acceda al servidor de web,
facilitar la traduccin de webs sin tocar para nada el cdigo facilitando as la
internacionalizacin del cdigo etc.
Dentro de PHPLIB nos encontramos con una clase que nos ayuda con este objetivo:
la clase Template.
Para ver la potencia del uso de plantillas vamos a planter un ejemplo de unsa
sencilla pgina que debe de controlar el acceso a un web y segn el usuario que
entre, se debe de presentar el web en un idioma u otro. La aplicacin lo nico que
hace es mostrar una serie de datos nmericos sobre cotizacin en bolsa en euros,
por lo que esta informacin es idntica para todos los idiomas.
Para ello podramos utilizar os mecanismos de autenticacin de la propia PHPLIB.
Podramos crear una nueva tabla en la base de datos asociando identificador de
usuario e idioma y tendramos que preparar los diferentes webs.
Supongamos que inicialmente tenemos dos idiomas: espaol e ingls. Podemos
crear dos directorios, uno con las plantillas en espaol y el otro con las plantillas en
ingls. El cdigo podra empezar de la forma:
page_open(array("sess" => "Example_Session", "auth" => "Example_Auth",
"perm" => "Example_Perm", "user" => "Example_User"));
// Template no es del ncleo de PHPLIB por lo que hay que
// incluir esta clase de forma explcita.
include("template.inc");
$plantillas = "/home/acs/public_html/plantillas";
$plantillasEspaol = $plantillas."/espaol";
$plantillasIngles= $plantillas."/ingles";
// Ya sabemos que usuario es $auth[uname]
// La funcin miraIdioma accedera a la base de datos para ver que
// idioma le corresponde a un usuario.
$idioma=miraIdioma ($auth[uname]);
if ($idioma=="espaol") $t=new Template($plantillasEspaol);
elseif ($idioma=="ingles") $t=new Template($plantillasIngles);
else {echo "Error en la seleccin de idioma.";exit;}
// Tenemos dos plantillas: una para la cabecera y otra para el cuerpo
$t->set_file(array(
"cabecera" => "cabecera.ihtml",
Descubre miles de cursos como ste en www.mailxmail.com 19
mailxmail - Cursos para compartir lo que sabes
"cabecera" => "cabecera.ihtml",
"cuerpo" => "cuerpo.ihtml"));
// Suponemos que existe una funcin que nos devuelve los valores
// a presentar.
$valores = obtenValores();
$fecha = date("d/m/a");
// Cada plantilla puede contener un nmero de variables cuyo
// valor se controla desde el cdigo a travs de Template
$t->set_var(array("Fecha" => $fecha,
"Valores" => $valores));
$t->parse("OUT", array("cabecera", "cuerpo"));
/* imprimimos OUT */
$t->p("OUT");
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:
<ht ml >
<head>
<title>Valores de cotizacin
<ti tl e>
<head>
<body>
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.
La cesta de la compra.- Ya dijimos que gracias al control de sesiones sera trivial
construir una cesta de la compra. Pues PHPLIB incluye una clase llamada "Cart" que
es precisamente esto, una cesta de la compra.
El comercio electrnico siempre obliga a que a la hora de comprar el cliente vaya
teniendo su cesta de la compra con los productos que ha ido adquiriendo. El
mecanismo por el que se suele mantener este estdo del cliente es mediante cookies,
aunque ya vismo que PHPLIB poda evitar el uso de "cookies" utilizando el mtodo
GET.
La cesta de la compra en PHPLIB es un conjunto de artculos que se almacenan en la
Descubre miles de cursos como ste en www.mailxmail.com 20
mailxmail - Cursos para compartir lo que sabes
base de datos. PHPLIB nos proporciona una API sencillo para aadir, consultar o
borrar la lista de artculos en la bolsa de la compra. Para crear nuestra cesta de la
compra necesitaremos en general realizar una nueva clase de cesta de la compra
basada en "Cart", principalmente para controlar la visualizacin de los productos, tal
y como se muestra a continuacin:
class Mi_Cesta extends Cart {
var $classname = "Mi_Cesta";
// Base de datos donde guardamos los artculos
var $database_class = "DB_Article";
var $database_table = "articles";
var $db;

var $sum = 0;
function show_cart_open() {
printf("<table class=cart_table>n");
$this->sum = 0;
}

function show_cart_close() {
printf("</table>\n");
printf("That's a total of %s.\n", $this->sum);
}
function show_item($art, $num) {
if (!is_object($this->db)) {
$class = $this->database_class;
$this->db = new $class;
}

$query = sprintf("select * from %s where artid = '%s'",


$this->database_table,
$art);
$this->db->query($query);
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.
Descubre miles de cursos como ste en www.mailxmail.com 21
mailxmail - Cursos para compartir lo que sabes
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.
HTML Widgets.- PHPLIB incluye tambin un conjunto de clases para facilitar la
creacin de cdigo HTML. Por un lado con Sql_Query podemos construir formularios
HTML a partir de los cuales hacer peticiones SQL a una base de datos.
Con Table podemos construir tablas HTML de una forma sencilla, muy til para
presentar el contenido de matrices de datos y de resultados de consultas a una base
de datos.
Menu es un widget que a partir de un rbol genera un men jerrquico con enlaces
que se puede utilizar como barra de navegacin. De esta forma se puede facilitar
mucho la creacin de este tipo de barras de navegacin, que siempre son muy
engorrosas de mantener y que, en muchos casos, llevan a los diseadores web al
uso de marcos (frames) en sus pginas.
OOHForms es un widget para la construccin de formularios con la ventaja de que
puede utilizar Javascript y SSI para comprobar que los valores de los campos del
formulario son correctos. Antes de enviar el formulario se pueden chequear los
valores que los campos del formulario, evitando as el envo de datos que desde su
origen sus errneos.
Por ltimo existen dos ltimos widget: "tpl_form" para la construccin de
formularios utilizando OOHForms pero a un nivel de abstraccin mayor (el objeto es
una caja negra de la que podemos obtener datos, pero no sabemos como se
obtienen) y Tree que permite representar en HTML estructuras de datos complejas
en rbol como subdirectorios.
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
Descubre miles de cursos como ste en www.mailxmail.com 22
mailxmail - Cursos para compartir lo que sabes
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
[1] http://phpl i b.netuse.de: Librera PHPLIB
Descubre miles de cursos como ste en www.mailxmail.com 23
mailxmail - Cursos para compartir lo que sabes
7. PHP para desarrollo de aplicaciones web (I)
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/php-desarrol l o-apl i caci ones-web]
En esta leccin vamos a 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.
Descubre miles de cursos como ste en www.mailxmail.com 24
mailxmail - Cursos para compartir lo que sabes
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
Descubre miles de cursos como ste en www.mailxmail.com 25
mailxmail - Cursos para compartir lo que sabes
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.
Descubre miles de cursos como ste en www.mailxmail.com 26
mailxmail - Cursos para compartir lo que sabes
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.
Descubre miles de cursos como ste en www.mailxmail.com 27
mailxmail - Cursos para compartir lo que sabes
8. El uso de las cookies desde PHP
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/uso-cooki es-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
Descubre miles de cursos como ste en www.mailxmail.com 28
mailxmail - Cursos para compartir lo que sabes
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.
Descubre miles de cursos como ste en www.mailxmail.com 29
mailxmail - Cursos para compartir lo que sabes
9. La autenticacin de usuarios utilizando HTTP
[http://www.mai l xmai l .com/...curso-webs-di nami cas-php/autenti caci on-usuari os-uti l i zando-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.
Descubre miles de cursos como ste en www.mailxmail.com 30
mailxmail - Cursos para compartir lo que sabes
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.

Descubre miles de cursos como ste en www.mailxmail.com 31
mailxmail - Cursos para compartir lo que sabes

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.

Descubre miles de cursos como ste en www.mailxmail.com 32
mailxmail - Cursos para compartir lo que sabes
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.
Referencias
[1] Librera GD de Boutell.Com: ht t p: / / www. bout el l . com/ gd
[2] Noticias de software libre: http://barrapunto.com
[3] Grupo PHP: ht t p: / / php. net
Visita ms cursos como este en mailxmail:
[http://www.mai l xmai l .com/cursos-i nformati ca]
[http://www.mai l xmai l .com/cursos-programaci on]
Tu opinin cuenta! Lee todas las opiniones de este curso y djanos la tuya:
[http://www.mai l xmai l .com/curso-webs-di nami cas-php/opi ni ones]
Cursos similares
Cursos Valoracin Alumnos Vdeo
Posicionamiento Web
El posicionamiento en los buscadores es un factor clave para una empresa. El
75% de los visitantes nuevos de un sitio web se consiguen mediante buscadores
de internet. Ap...
[ 30/ 05/ 08]

727
Introduccin al html
HTML es un lenguaje muy sencillo que permite describir hipertexto, es decir,
texto presentado de forma estructurada y agradable, con enlaces (hyperlinks)
que conducen a o...
[ 03/ 11/ 03]

31. 497
Redes y comunicaciones (segunda parte)
Este curso es la segunda parte de nuestro estudio tcnico explicativo sobre
redes y comunicaciones de transferencia de datos. Ahora podrs ampliar los
conocimientos adqui...
[ 27/ 08/ 08]

1. 485
Descubre miles de cursos como ste en www.mailxmail.com 33
mailxmail - Cursos para compartir lo que sabes
Primeros pasos con XML y XSL
XML es el acrnimo del ingls eXtensible Markup Language cuyo objetivo
principal es conseguir una pgina web ms semntica. Inicialmente nace como
sucesor del HTML, separ...
[ 10/ 09/ 04]

7. 410
Sistemas Informativos. Diseo y creacin
(1/ 2)
Diseo de sistemas informativos. El proceso de creacin de los sistemas
informativos es el centro de esta primera parte del curso. Desarrollamos u...
[ 08/ 04/ 09]

5. 612
Descubre miles de cursos como ste en www.mailxmail.com 34
mailxmail - Cursos para compartir lo que sabes

También podría gustarte