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.