07 febrero 2008

PHP5 + Apache2 + Oracle + OCI

Estos días he tenido que configurar Apache + PHP para poder utilizar bases de datos en Oracle bajo Linux. Para ello se utilizan las librerías OCI. Expongo los pasos seguidos por si le fuera útil a alguien:
  • Lo primero es descargar el InstantClient de Oracle. Es gratuito pero hay que registrarse. Con el paquete Basic será suficiente para realizar conexiones y consultas a bases de datos.
  • Descomprimimos lo descargado en /opt/oracle y creamos este par de enlaces simbólicos:
    • ln -s /opt/oracle/libclntsh.so.10.1 /opt/oracle/libclntsh.so
    • ln -s /opt/oracle/libocci.so.10.1 /opt/oracle/libocci.so
  • En consola exportamos las siguientes variables de entorno:
    • export ORACLE_HOME="/opt/oracle"
    • export LD_LIBRARY_PATH=$ORACLE_HOME
  • Instalamos los paquetes php5-cli, php5-dev y php5-pear. Utiliza el gestor de paquetes de tu distribución (apt. yum, yast,...)
  • Ejecutar en consola
    • pecl install oci8
  • Cuando la aplicación pida la URL de los archivos de Oracle introducir:
    • instantclient,/opt/oracle
  • Si todo acaba bien se habrá generado el fichero oci8.so
  • Editamos /etc/php5/apache2/php.ini y añadimos al final
    • extension=oci8.so
  • Editamos /etc/init.d/apache2 y modificamos la línea de declaración de variables de entorno para añadir la ruta a las librerías de Oracle. Quedaría más o menos así (en una sola línea):
    • ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin ORACLE_HOME=/opt/oracle/ LD_LIBRARY_PATH=/opt/oracle/"
  • Reiniciar el servidor Apache.
La ejecución de phpinfo() mostrará la información sobre OCI. Si no se carga es recomendable leer el log de errores de Apache en /var/log/apache2/error.log y estudiar qué está faltando.

Recomiendo el uso del wrapper adodb para PHP, facilita mucho el trabajo cuando trabajamos con distintos motores de búsqueda.

3 comentarios:

Anónimo dijo...

¿Qué sentido tiene usar el ADO, feo de m$, en vez de PDO que viene en el propio lenguaje (>=5.x) o incluso la extensión DB del repositorio oficial de php, PEAR?

Joaquín dijo...

Pues llevas razón, aunque ADO no es tan malo, al menos en un uso simple de la base de datos. Gracias por el apunte.

Jaime Gomez dijo...

Hay un error
DICE :

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin ORACLE_HOME=/opt/oracle/ LD_LIBRARY_PATH=/opt/oracle/"

DEBE DECIR :

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin ORACLE_HOME=/opt/oracle LD_LIBRARY_PATH=/opt/oracle "