Webs dinámicos con PHP: Introducción
Introducción a la sección
En mi experiencia como desarrollador de aplicaciones web,
PHP ha significado junto al servidor de web Apache, las dos herramientas claves
para la creación de aplicaciones.
PHP es un lenguaje sencillo, de sintaxis cómoda y similar a la de otros lenguajes como C
o C++, es rápido a pesar de ser interpretado, multiplataforma y dispone de una gran
cantidad de librerías que facilitan muchísimo el desarrollo de las aplicaciones.
El código 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 (más de 1
millón de webs lo utilizan ya) que convierten su conocimiento en algo indispensable para
los profesionales del desarrollo en Internet.
Y, además, 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 distribución y, podemos
ampliarlo con nuevas funcionalidades si así lo quisiéramos. Respecto a su licencia, en
la versión PHP 3.0 era GPL, pasando a ser modificada en su versión 4.0, por la
incorporación de Zend, un nuevo interprete de PHP mucho más rápido que el anterior de
PHP. Este interprete Zend tiene asociado un optimizador opcional, el cual ya está más
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 presentación de PHP mostraremos este lenguaje,
como se instala y configura, como se desarrolla con él, las librerías 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 publicación de la versión 7.0.
En los artículos de la serie vamos a describir PHP en su
última versión, PHP4, que por fin en Mayo del 2000 ha sido publicada. Posiblemente
para cuando el lector comience a desarrollar con PHP, esta versión 4 será la
estándar. En ella hay muchos cambios y mejoras que detallaremos a lo largo de
los artículos 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 podría ejecutar
las páginas PHP. La ventaja que tiene Apache frente a estos es que podemos compilar
el interprete PHP como un módulo de Apache, por lo que la velocidad de ejecución
de estas páginas PHP es muy superior, así como el consumo de recursos al cargarse
el interprete de PHP una sola vez en memoria.
Para estar al día de lo que ocurre en el mundo de PHP tenemos
las páginas oficiales de web de PHP, en php.net, y las noticias de PHP que van
apareciendo dentro de Barrapunto.com.
¿Qué es PHP?
Con estas siglas nos referimos a un lenguaje de programación
que está muy orientado al desarrollo de aplicaciones web. Cuando pedimos a nuestro
servidor de web una página PHP, que no es más que un programa PHP que genera
HTML, antes de enviar dicha página al cliente se la pasa al interprete de PHP.
Este la interpreta y es el resultado de esta interpretación del programa PHP,
contenido en la página PHP, lo que termina llegando al cliente.
Supongamos que el contenido de una página 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 página
"intro.php", el servidor de web va a darse cuenta,
por la extensión ".php", de que esta página ha de enviarse primero al
interprete de PHP. Este recibe
el contenido de la página y como resultado de esta ejecución (interpretación)
genera una página HTML, que es
la que envía al cliente a través de Apache.
Como veremos en una página 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 diseñe las páginas web y el que
programe la aplicación no puedan ser independientes.
Programar páginas PHP
Lo primero que vamos a hacer es crear una página PHP que
nos informe de las características del interprete de PHP que tenemos instalado
en nuestro servidor de web. Para ello debemos de crear una página 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 algún lugar accesible por el servidor de web. Quizás
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 página. Para ello
apunta tú navegador a la página: "http://localhost/~tu_login/info.php".
Al pedirle esta página al servidor de web, este al ver su
extensión llama al interprete de PHP y le dice que "ejecute" la página
y le entregue los resultados. El interprete abre la página y ejecuta la llamada
a la función "phpInfo()" que, como resultado, nos entrega toda la
información sobre el interprete de PHP en formato HTML. ¿Verdad que es sencillo?.
Vamos con una página algo más complicada. Y vamos con la
orientación a objetos. PHP tiene soporte para la programación orientada a objetos,
es decir, puedes crear clases para la construcción 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 más completo y en esta versión 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 más dilación consigas algún buen libro o tutorial por Internet. Los
objetos cada vez tienen más fuerza a la hora de desarrollar software. De cualquier forma
en este curso vamos a utilizar la programación con objetos en un nivel muy básico.
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 aún en gran parte, pero todo llegará. Aquí va el código
de la página:
<?php
class connection {
var $dbug=1, $con, $type;
function getType() {global $type;return $this->type;}
// Constructor del objeto de conexión a la base de datos
function
connection($typedb="MySQL",$database_name="template1") {
$this->connection_open
($typedb,$database_name);
}
// Apertura de la conexión 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
aún no está implementada.<h1>";
}
function connection_open($database_name) {
echo "<h1>Método connection_open
sin implementar.<h1>";
}
}
$bd = new connection("MySQL","template1");
?>
Si el lector está acostumbrado a la programación con objetos
este código le resultará muy familiar. Tenemos una clase principal "connection"
que se encarga de gestionar las conexiones con la base de datos. Cuando desde
nuestro programa queramos acceder a una base de datos, nos creamos un objeto
connection pasándole como parámetros al constructor de connection, método que
se llama de forma automática 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 específicos de cada base de datos, el del gestor de
base de datos MySQL es "mysql_connection", la apertura de una conexión, las
peticiones SQL etc. Esta técnica 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 información de estado y métodos de la clase de a que hereda. PHP3
en sus primeras versiones no tenía soporte para herencia por lo que me vi obligado a
utilizar esta técnica. En la actualidad PHP ya soporta herencia, aunque no múltiple. Y
no, todas las reglas de encapsulación pública y privada no están 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 automática 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++.
Quizás lo más destacado ocurre a nivel semántico: el tipado es muy poco estricto,
algo típico en los lenguajes "script", y cuando creamos una variable
en ella podemos meter el tipo de datos que queramos. Esto es muy flexible y
cómodo para el desarrollador, aunque los errores que se cometen pueden ser mucho
más graves y difíciles de corregir. Las posibilidades del interprete para detectar
incompatibilidades entre variables se reducen mucho y puede ocurrir cosas extrañas
en determinadas circunstancias si no tenemos cuidado.
Sobre el código de este ejemplo en concreto, tenemos dos
clases. La definición de una clase es hace con la palabra clave "class"
seguida del nombre de la clase. Entre llaves desarrollamos toda la descripción
de la clase, sus variables y métodos. Dentro de un método de la clase (function)
se pueden acceder otras partes de la clase por medio del puntero "$this".
Por ejemplo, para acceder desde el método "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 través del servidor de web, este llamará de
nuevo al interprete de PHP al ver que la extensión del fichero es "php".
El interprete de PHP analizará el código y ejecutará la instrucción ":
$bd = new connection("MySQL","template1");
Con ello se crearía un nuevo objeto de la clase "connection".
Al crearse se llama de forma automática al constructor "function connection"
que a su vez llama al método "connection_open". Este método crea un
nuevo objeto de la clase "mysql_connection" ($con) el cual llama de
forma automática a su constructor "function mysql_connection" el cual
envía la cadena HTML "<h1>La clase mysql_connection aún no está implementada.<h1>".
Desde el método "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>Método
connection_open sin implementar.<h1>.". Tras esta última invocación
el programa finaliza y se envía el resultado al servidor de web, el cual reenvía
estos datos al cliente.
Más características de PHP
Ahora que hemos visto lo sencilo que es desarrollar con PHP
vamos a ver que cosas podemos hacer con él, las librerías de las que disponemos.
Muchas de estas librerías ya están 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 más conceptos de PHP y en particular, para presentar como
se trabaja con las bases de datos MySQL y PostgreSQL.
PHP en cada nueva versión soporta nuevas funcionalidades
por lo que el mejor método para ver que nuevas librerías incluye es cuando compilamos.
Si dentro del directorio con las fuentes de PHP ejecutamos el comando "configure
--help" nos dará información de todas las posibles opciones que tiene PHP
al ser compilado y, entre esta información, la de todos los módulos que podemos
añadir a PHP si disponemos de las librerías adecuadas. Dentro del manual de
PHP disponemos también 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 librerías 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 módulo generado dicho soporte. En la información que
obtenemos con la llamada a la función "phpInfo()" se incluye información
sobre los módulos incluidos.
De esta información es importante a versión 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 versión 3.22 que utiliza el
protocolo 10 para comunicarse con el servidor MySQL. Si tuvieramos una versión
3.20 del cliente (la versión de MySQL que se liberó con licencia GPL) no podríamos
acceder a los servidores 3.22 ya que el cliente utilizaría el protocolo de comunicaciones
versión 9, incompatible con la versión 10.
Siempre que se habla de PHP lo primero que se hace es presentar
el gran número de gestores de bases de datos a los que puede acceder.
- Adabas D
- dbm
- dBase
- filePro
- Hyperwave
- Informix
- InterBase
- LDAP
- Microsoft SQL server
- mSQL
- MySQL
- ODBC
- Oracle
- PostgreSQL
- Solid
- Sybase
Pero si este aspecto resulta impresionante no menos el soporte
para:
- Acceso a servidores IMAP
- Envío de correo con SMTP
- Acceso a servidores de FTP
- Acceso a SNMP para gestión de redes y equipos
- Generación dinámica de gráficos y documentos PDF
- Análisis de documentos XML
- Corrector de ortografíai
- Genración de datos en WDDX (Intercambio Web de Datos
Distribuidos)
Y todo esto ha sido posible gracias a que PHP ha sido diseñado
de forma muy modular y ha sido sencillo según han sido surgiendo librerías,
utilizarlas desde PHP. Toda esta funcionalidad está basada en librerías 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 librerías.
A lo largo del curso iremos presentando el uso de algunas
de estas librerías, aunque nada detiene al lector de comenzar este aprendizaje.
En el manual de PHP dispone de documentación abundante sobre todas estas funciones,
su uso y los posibles resultados. Esta entrega la vamos a finalizar con una
descripción de las nuevas características de PHP4, versión 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 ejecución de páginas PHP.
Este nuevo rendimiento le ha puesto por delante de ASP, la tencología 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 había sucedido hasta
ahora. Por otro lado, PHP estaba hasta el momento pensado básicamente para Apache.
Era el único que tenía soporte para tener a PHP como un módulo del servidor.
Todos los demás servidores de web sólo podían utilizar a PHP como cgi. En PHP4
se han añadido 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 podrán lograr rendimientos similares a Apache
en su ejecución de PHP.
Además del aumento en rendimiento en lo referente al soporte
de objetos en PHP, la sobrecarga de objetos se ha mejorado. De esta forma se
ha añadido la posibilidad de métodos polimórficos, métodos que según desde que
referencia a un objeto se llamen se comportan de una forma o de otra. Esta característica
es muy importante para incluir soporte para acceder a las arquitecturas CORBA
y COM.
Otra nueva característica 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 librerías que utilicen
hebras. Y en la mayoría de las implementaciones de CORBA esto es así. Quizás
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 automática 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 más 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 más completo que he encontrado en Internet.
Conclusiones
Esperamos que con esta primera entrega del curso de PHP el
lector haya recibido la motivación suficiente como para empezar a utilizarlo.
Si algo caracteriza a PHP es su sencillez: en pocos días se puede llegar a ser
un desarrollador de PHP bastante profesional.
En las próximas entregas del curso se irán presentando las librerías principales de
PHP, las virguerías que se pueden acceder con muy poco código y las noticias que
aparezcan dentro del mundo de PHP.
|