Categorías: Tutoriales

Instalar cliente Oracle y librerías OCI para PHP

Ahora mismo estoy poniendo un producción un servidor en mi centro de trabajo, en el que además de tener que dar servicio para la base de datos PostgreSQL (explique hace poco cómo permitir conexiones entrantes a esta BBDD), debe hacer conexiones externas a una base de datos Oracle.

Estas conexiones las hará un script en PHP por lo que además, deberemos instalar OCI (Oracle Call Interface) para PHP. Suponemos que está ya instalado el servidor web Apache 2 y los componentes básicos de PHP.

Instalación de Oracle instantclient

Antes de instalar el instantclient como tal, debemos instalar la librería libaio, necesaria para gestionar entradas/salidas asíncronas al kernel. La instrucción será (utilizo “#” en el prompt para indicar como superusuario, “$” en caso contrario):

# yum install libaio1

O si usamos una distribución que use APT:

# apt-get install libaio1

Lo siguiente será acceder al portal de descargas de Oracle y descargar los componentes necesarios para el instantclient:

  • Basic
  • Devel
  • SQLPlus

Elegimos la última versión, nuestra arquitectura  y descargamos los paquetes RPM. La instalación será inmediata si tenemos una distribución basada en Red Hat:

# yum install paquete.rpm

En caso contrario, deberemos instalar alien previamente para que convierta los paquetes RPM en paquetes DEB:

# apt-get install alien

# alien paquete.rpm

# dpkg -i paquete.deb

Ahora ya nos tocar configurar el famoso fichero Tnsnames.ora. Este fichero variará de una configuración a otra por lo que sólo vamos a comentar dónde situarlo. Su ruta debe ser: /etc/oracle/tnsnames.ora, en caso de no existir, deberemos crearla.

Para terminar, deberemos crear unas variables de entorno. Para ello accedemos al fichero /root/.bashrc como superusuario e incluimos las siguientes líneas:

export TNS_ADMIN=/etc/oracleexport SQLPATH=/usr/lib/oracle/11.1.0.1/client/binexport LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client/lib:$LD_LIBRARY_PATHexport PATH=$PATH:$SQLPATH

En algunas distribuciones, también podréis hacer ese cambio en otro fichero: /etc/environment.

Instalación de OCI en PHP

Ahora nos toca la parte de PHP, es decir, instalar los componentes necesarios para poder hacer llamadas a Oracle desde PHP usando el instantclient que acabamos de instalar (con lo fácil que es hacer esto mismo con MySQL o PostgreSQL…, las cosas del software cerrado).

Suponemos que tenemos instalado Apache2 y PHP, pero aún así instalaremos dos paquetes más:

# yum install php-pear php5-dev

# apt-get install php-pear php5-dev

PHP-PEAR es según definen sus siglas: PHP Extension and Application Repository, es decir, un repositorio de extensiones y aplicaciones para PHP que nos permite instalar sin problemas ciertos componentes de PHP que no podemos instalar a través de nuestro gestor de paquetes habitual (me recuerda a CPAN con Perl, pero esa es otra historia para otra entrada).

Ya estamos en disposición de ejecutarlo para instalar OCI:

pecl install oci8

En la terminal nos aparecerá algo así como:

1-1, ‘all’, ‘abort’, or Enter to continue:

Pulsamos “1” luego ENTER y escribimos las siguientes opciones (debemos saber el PATH exacto de nuestras librerías Oracle, cambiará en función de la versión):

shared,instantclient,/usr/lib/oracle/mi_version/client/lib/

PHP-PEAR descargará, configurará, compilará e instalará el módulo. Finalmente, tenemos que añadir a nuestro fichero php.ini una línea para que cargue la librería dinámica de OCI y puedan hacerse llamadas desde los ficheros PHP.

La ruta del fichero será: /etc/php5/apache2/php.ini y la línea a agregar junto a las demás extensiones la siguiente:

extension=oci8.so

Reiniciamos el servidor web y listo:

services httpd restart

O:

/etc/init.d/apache2 reload

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • muy bueno el resumen

    faltaria ahora la primera conexion con una la base de oracle
    Si es usando ssh cuanto mejor

  • @raúl ricardo: Muchas gracias, vaya si eso, un día podría hacer otra entrada enseñando el uso de OCI.

  • Muy bueno el resumen, se entiende,. pero podrías explicar en otro apartado como sería la conexión en el codigo php, es que he hecho todo esto ya, pero no me funciona si tengo la aplicación en un equipo (Centos) y la base de datos en otra. Quisiera saber si es problema del código, puesto si lo pruebo en local tanto la aplicación como la database me funciona.

    Gracias de antemano.

  • excelente la guía!
    pero tengo un problema al ejecutar:

    yum install php-pear php5-dev

    me dice lo siguiente:

    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * addons: http://ftp.inf.utfsm.cl
    * base: http://ftp.inf.utfsm.cl
    * extras: http://ftp.inf.utfsm.cl
    * updates: http://ftp.inf.utfsm.cl
    Setting up Install Process
    Package 1:php-pear-1.4.9-6.el5.noarch already installed and latest version
    No package php5-dev available.
    Nothing to do

    luego intente seguir con la guia con la instrucción:

    pecl install oci8

    y me dice:

    No releases available for package "pecl.php.net/oci8"
    Cannot initialize 'oci8', invalid or missing package file
    Package "oci8" is not valid
    install failed

  • Buenas,
    He seguido los pasos pero a la hora de conectar el php con la BD oracle me devuelve el error:

    [Wed Feb 22 09:46:46 2012] [error] [client 172.25.65.75] PHP Warning: oci_connect(): ORA-12154: TNS:could not resolve the connect identifier specified in /home2/codecti1/public_html/linuxhispano.net/aplicacion/SID.php on line 3
    [Wed Feb 22 09:46:46 2012] [error] [client 172.25.65.75] PHP Fatal error: ORA-12154: TNS:could not resolve the connect identifier specified in /home2/codecti1/public_html/linuxhispano.net/aplicacion/SID.php on line 6

    Si hago la conexión desde el propio servidor al servidor remoto de BD me conecta sin problemas, y si pongo la cadena de conexión en vez del SID de la BD también conecta OK; pero a la hora de conectar a través de la url de la aplicación no me resuelve el tnsnames.

    He añadido las variables de oracle al .bashrc de root y reiniciado el servicio de apache, pero sigue sin funcionar.

    export ORACLE_HOME=/usr/lib/oracle/11.2/client64
    export TNS_ADMIN=/etc/oracle
    export SQLPATH=/usr/lib/oracle/11.2/client64/bin
    export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
    export PATH=$PATH:$SQLPATH:$TNS_ADMIN:$ORACLE_HOME

    ¿Qué puede estar fallando? ¿Alguna idea?
    Gracias.

  • Hola, estuve realizando lo descrito lineas arriba y menciona que no puedo instalar el oci8 porque tengo php version 5,4.45, es necesario actualizar al 7, o hay forma de instalar el oci en la version actual???

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace