1 . Instalación
de PostgreSQL
2 . Instalación
de Apache y PHP como módulo mismo
3 . Ejemplos
En este articulo vamos a tratar la instalación y configuración de
un servidor web, utilizando Apache como servidor, PHP como lenguaje interpretado de
alto nivel y PostgreSQL
como base de datos. Con esta combinacion podremos crear páginas
dinamicas y obtener informacion de nuestra base de datos para
presentarla via web. Por ultimo, daremos unos cuantos ejemplos de
como programar nuestras páginas web utilizando estos programas.
Partimos de la base de que tenemos una máquina con Linux
instalado y funcionando y con todas las herramientas necesarias para
la compilación de programas (gcc,make,..). Este
artículo se basará en Apache 1.3.x, PHP 3.0.x y
PostgreSQL 6.5.x y ha sido comprobado en un equipo con
Apache 1.3.6, PHP 3.0.12 y PostgreSQL 6.5.1. Lo
primero que tenemos que hacer es bajarnos los tres paquetes con los
programas necesarios y grabarlos en un directorio de nuestro sistema
(por ejemplo, /local/download/):
Una vez que tenemos los programas, tendremos que elegir el lugar
donde los vamos a instalar. En este artículo suponemos que
instalaremos:
Apache en: /usr/local/apache/
PHP como módulo de Apache
PostgreSQL en: /usr/local/pgsql/
Catalogo Web: /home/httpd/html/
Instalación de PostgreSQL
Lo primero que tenemos que hacer es crear una cuenta que
administrará la base de datos:
Cuenta de administración de la BD
[localhost]$ su
[localhost]$ /usr/sbin/adduser postgres
[localhost]$ passwd postgres
[localhost]$ exit
Una vez creada la cuenta Postgres crearemos los directorios que
utilizaremos para instalar PostgreSQL con los permisos adecuados:
Creación de directorios para la correcta instalación de
PostgreSQL
[localhost]$ su
[localhost]$ cd /usr/src
[localhost]$ mkdir pgsql
[localhost]$ chown postgres:postgres pgsql
[localhost]$ cd /usr/local
[localhost]$ mkdir pgsql
[localhost]$ chown postgres:postgres pgsql
[localhost]$ exit
Empezamos con el proceso de compilación/instalación:
Proceso de compilación/instalación
[localhost]$ su postgres
[localhost]$ cd /usr/src/pgsql
[localhost]$ gunzip -c /local/download/postgresql-6.5.x.tar.gz
| tar xvf -
[localhost]$ cd /usr/src/pgsql/postgresql-6.5.x/src
[localhost]$ ./configure --prefix=/usr/local/pgsql
--with-tcl --with-perl
[localhost]$ gmake all > make.log 2>&1 &
[localhost]$ tail -f make.log
[localhost]$ gmake install > make.install.log 2>&1 &
[localhost]$ tail -f make.install.log
[localhost]$ exit
Ahora tenemos que decirle al sistema donde poder encontrar las
librerias necesarias, para ello actualizamos el fichero
/etc/ld.so.conf:
Actualización del fichero de configuración
[localhost]$ su
[localhost]$ echo /usr/local/pgsql/lib >> /etc/ld.so.conf
[localhost]$ /sbin/ldconfig.
[localhost]$ exit
Tambien tendremos que actualizar el fichero
~/.bash_profile de la cuenta administradora de la base de
datos, en este caso Postgres (si utilizais otro shell
que no sea bash, tendreis que cambiar el archivo
correspondiente, en vez de .bash_profile):
Actualización del fichero profile
[localhost]$ su postgres
****************************************
Editar el archivo ~/.bash_profile y
anadirle lo siguiente
****************************************
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
PGLIB=/usr/local/pgsql/lib
PGDATA=/usr/local/pgsql/data
export PATH MANPATH PGLIB PGDATA
****************************************
Salir para que los cambios surtan efecto
****************************************
[localhost]$ exit
Una vez que hemos terminado de instalar la base de datos y
configurar nuestro sistema, tenemos que inicializarla y arrancarla:
Inicialización y arranque de la BD
[localhost]$ su postgres
[localhost]$ initdb
[localhost]$ cd
[localhost]$ nohup postmaster -i > pgserver.log 2>&1 &
[localhost]$ exit
Ya tenemos nuestra base de datos PostgreSQL, instalada y
funcionando. Ahora solo tenemos que administrarla, para ello nada
mejor que leerse los manuales de
documentación de la misma y aprender SQL. Solamente nos queda
hacer un par de ajustes en la configuración para que podamos acceder
a postgreSQL via PHP/web. Lo primero es incluir en el archivo
/usr/local/pgsql/data/pg_hba.conf la siguiente linea:
host all tu_maquina_IP tu_maquina_NETMASK trust
Y la segunda es dar privilegios de acceso en tu base de
datos/tablas al usuario "Nobody"para que pueda coger los
datos de la misma (Nobody es el usuario que ejecuta el
servidor Apache por defecto). Para ello puedes hacer lo
siguiente:
Dar privilegios a la BD
***************************************
Suponemos que tenemos una base de datos
llamada prueba, con una tabla llamada
direcciones
***************************************
[localhost]$ su postgres
[localhost]$ psql prueba
prueba=> GRANT SELECT ON direcciones
prueba=> TO nobody;
prueba=> \z
prueba=> \q
[localhost]$ exit
Instalación de Apache y PHP como módulo mismo
Pasamos a la segunda parte de este artículo, para ello
procederemos como sigue:
Instalación de Apache/Php
[localhost]$ su
[localhost]$ cd /usr/src
[localhost]$ gunzip -c /local/download/apache_1.3.x.tar.gz
| tar xvf -
[localhost]$ gunzip -c /local/download/php-3.0.x.tar.gz
| tar xvf -
[localhost]$ cd apache_1.3.x
[localhost]$ ./configure --prefix=/usr/local/apache
[localhost]$ cd ../php-3.0.x
[localhost]$ ./configure --with-pgsql=/usr/local/pgsql
--with-apache=../apache_1.3.x --enable-track-vars
--enable-sysvsem --enable-sysvshm
--enable-url-includes
[localhost]$ make
[localhost]$ make install
[localhost]$ cd ../apache_1.3.x
[localhost]$ ./configure --prefix=/usr/local/apache
--activate-module=src/modules/php3/libphp3.a
[localhost]$ make
[localhost]$ make install
[localhost]$ cd ../php-3.0.x
[localhost]$ cp php3.ini-dist /usr/local/lib/php3.ini
[localhost]$ exit
Ya tenemos apache instalado y PHP como módulo del mismo.
Ahora tenemos que hacer unos cuantos ajustes en la configuración
para que todo funcione. Tenemos que editar el fichero
/usr/local/apache/conf/httpd.conf y añadirle lo siguiente:
Actualización del fichero de configuración
AddType application/x-httpd-php3 .php
DirectoryIndex index.html index.php
Estas dos lineas son las únicas necesarias para que Apache
sepa que hacer con un fichero que contenga código PHP.
Existen otras opciones que deberias actualizar en vuestro fichero
/usr/local/apache/conf/httpd.conf para terminar de
configurar Apache, por ejemplo: ServerAdmin,
ServerName, DocumentRoot, directivas "Directory",
etc. Los comentarios incluidos en este fichero son autoexplicativos
y no deberiais tener ningun problema para ajustar la configuración a
vuestro sistema. Ahora sólo nos queda arrancar el servidor
Apache:
Arranque del servidor
[localhost]$ su
[localhost]$ /usr/local/apache/bin/httpd
-f /usr/local/apache/conf/httpd.conf
[localhost]$ exit
NOTA: Para obtener toda la información/documentación
completa pasaros por Apache
documentación y PHP
documentación.
Ejemplos
Lo primero que tenemos que hacer es comprobar que PHP
funciona bien. Para ello podemos crear un fichero index.php
en nuestro catalogo web /home/httpd/html/ con las
siguientes lineas:
Creación fichero index.php
<HTML>
<HEAD>
<TITLE>Pagina index de prueba</TITLE>
</HEAD>
<BODY>
<?php
/* Codigo php de esta pagina */
echo "Esto es una prueba<BR>
Dia/hora: ".date("d/m/Y - H:i:s")."<BR>";
?>
</BODY>
</HTML>
Este fichero deberia de daros como resultado dos lineas en
pantalla, una de ellas con el dia y la hora de vuestro servidor. Una
vez comprobado que PHP funciona, vamos a crear una página
web, que acceda mediante PHP a PostgreSQL y que nos
devuelva como resultado el contenido de una de las tablas de la base
de datos. Suponemos que ya tenemos una base de datos llamada
prueba, con una tabla direcciones que contiene tres campos
calle, ciudad,pais. La máquina que
estamos utilizando es servidor.domain.es y
PostgreSQL utiliza el puerto 5432(puerto por
defecto).
Acceso a PostgreSQL
<HTML>
<HEAD>
<TITLE>Pagina index de prueba</TITLE>
</HEAD>
<BODY>
<?php
/* ********************* */
/* Conexion a PostgreSQL */
/* ********************* */
/* Conexion a la base de datos */
$conexion = pg_pconnect("host=servidor.domain.es
port=5432 dbname=prueba");
if (!$conexion) {
echo "<CENTER>
Problemas de conexion con la base de datos.
</CENTER>";
exit;
}
$sql="SELECT * FROM direcciones ORDER BY pais;";
/* Ejecuta y almacena el resultado de la orden
SQL en $resultado_set */
$resultado_set = pg_Exec ($conexion, $sql);
$filas = pg_NumRows($resultado_set);
/* Presenta la informacion almacenada en $resultado_set */
for ($j=0; $j < $filas; $j++) {
echo "Direccion: ".pg_result($resultado_set, $j, 0)." <BR>
Ciudad: ".pg_result($resultado_set, $j, 1)." <BR>
Pais: ".pg_result($resultado_set, $j, 2)." <P>";
}
/* Cierra la conexion con la base de datos */
pg_close($conexion);
?>
</BODY>
</HTML>
Esta página web nos deberia de presentar la información contenida
en la tabla direcciones de la base de datos
prueba. Y a partir de aquí solamente teneis que leer la
documentación y usar vuestra imaginación para crear páginas web
dinámicas, actualizadas y que presenten la información contenida en
vuestras bases de datos.