Symfony 1.2 + Propel 1.3 + Oracle

16 Febrero 2009 at 12:41 (4 - Mayor, Finalizado) (, , , , , )

Después de intentar poner el marcha la extensión de PHP5 de PDO_OCI durante dos días, hoy al fin lo he conseguido.

No hay apenas documentación y para más inri, la poca que hay mezcla versiones incompatibles entre si. Ha sido una auténtica aventura ponerlo en marcha.

La configuración del servidor es la siguiente:

  • Ubuntu Server 8.10 x86 sobre VMWare
  • PHP5 (la versión del repositorio de Ubuntu)

Parte 1: Instalar el driver OCI (oracle) de PDO

Antes de nada debes saber que vas a tener que instalar la extensión PDO y PDO_OCI a mano. Por un lado, la de PDO_OCI no tiene candidatos y si la compilas a mano, resulta que es incompatible con el API de PDO que te instala el repositorio de ubuntu, por lo que al final, la mejor solución es compilar a mano ambas, a partir del repositorio de fuentes de PEAR.

Para instalar PDO solo hay que hacer un “sudo pecl install pdo”. Asegúrate de tener instalado el paquete php-pear y el php5-dev porque si no no podrás hacer esto.

Despues de hacerlo, habrás reemplazado la extensión PDO que te viene al hacer un “apt-get install php5″ por el de PEAR.

Ahora viene la parte divertida: instalar en el sistema la extensión PDO_OCI. Para ello debes instalar dos cositas de nuestro gran amigo Oracle (http://www.oracle.com/technology/software/tech/oci/instantclient/index.html):

  • Oracle Instant Client (library)
  • Oracle Instant Client (SDK)

Lamentablemente, solo podrás utilizar las versiones inferiores a la 11 (de la 10.2.0.4 para abajo).

Luego descomprime la librería en /usr/lib/oracle/10.2.0.4/client/lib y el sdk en /usr/include/oracle/10.2.0.4/client

Luego dile al sistema que añada estas rutas con el comando ldconfig y corriges un par de nombres de ficheros:

sudo ldconfig /usr/lib/oracle/10.2.0.4/client/lib
sudo ldconfig /usr/include/oracle/10.2.0.4/client
sudo ln -s /usr/lib/oracle/10.2.0.4/client/lib/libclntsh.so.10.1 /usr/lib/oracle/10.2.0.4/client/lib/libclntsh.so
sudo ln -s /usr/lib/oracle/10.2.0.4/client/lib/libocci.so.10.1 /usr/lib/oracle/10.2.0.4/client/lib/libocci.so

Ahora vamos a descargar las fuentes de PDO_OCI, compilarlas e instalarlas en el sistema:

sudo mkdir /usr/src/pdo_oci
cd /usr/src/pdo_oci
sudo pecl download pdo_oci
sudo tar -zxvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0
sudo phpize5
sudo ./configure –prefix=/usr –with-pdo-oci=/usr/lib/oracle/10.2.0.4/client
* editar Makefile *
sudo make
sudo make install

Al editar Makefile debéis añadir la ruta a /usr/include/oracle/10.2.0.4/client/include en la directiva “INCLUDES”

Después de esto ya tendréis la extensión instalada en vuestro sistema. Sólo hay que editar /etc/php5/conf.d/pdo.ini y añadir:

extension=pdo_oci.so

Ale, a disfrutar! En el siguiente post explicaré como hacer que todo esto funcione con Propel 1.3 y Symfony, pero antes tengo que averiguar cómo coño se hace T_T.

4 comentarios

  1. ggalmazor dijo:

    He de decir que acabo de seguir paso a paso la guía y he podido instalar el módulo correctamente :) Victoria!

  2. Atznt dijo:

    ¿Qué versión de Oracle? Ya hemos perdido/invertido (no sabemos aún) cerca de 4 semanas y no logramos establecer conexión entre Symfony y Oracle 8i. Se supone que el problema está en el PHP, pues las versiones a partir de la 5 no incluyen librerias para 8i. Necesitamos encontrar la forma de conectarnos directamente. El servidor es Apache (XAMPP) sobre Windows 2000. ¿Será que debemos resignarnos a no usar Symfony?

  3. ggalmazor dijo:

    Hola Atznt.

    No soy ningún experto en la materia, pero creo que, ya que el cliente que se instala en esta guía es de la versión 10.2.0.4, cualquier versión inferior de Oracle debería estar soportada. Creo que incluso la 11 podría ser consultada con un cliente de la 10, aunque esto no lo puedo afirmar con seguridad.

    De todos modos y como bien dices, ya no está disponible la extensión de OCI (Oracle) de PDO (nuevo paradigma de conexión a fuentes de datos de PHP) en la última versión de PHP.

    En mi guía describo el proceso para, básicamente, compilar el módulo y añadírselo a PHP, pero siempre en un servidor Linux (en mi caso Ubuntu Server 8.10). No me figuro cómo podrías hacer lo mismo en un entorno Windows 2000.

    Si podéis afrontarlo, yo os sugiero migrar el servidor a Linux. Si no podéis hacer esto último por cualquier motivo, y la máquina es potente, podríais “virtualizar” con VMWare Server un servidor Linux sin necesidad de quitar el Windows 2000.

    Si al final consigues dotar a PHP del módulo PDO_OCI, te recomiendo que leas el siguiente artículo (http://tribulatico.wordpress.com/2009/02/17/symfonypropel13oracle%e2%80%a6-%c2%bfporque-tanto-odio-parte-2/) en donde describo como poner en marcha symfony con propel y oracle.

    Suerte! ^^

  4. ac2113 dijo:

    Hola, estoy instalando pero tengo una duda con respecto al punto de editar makefile…en include.. donde tengo que agregar esa linea..en que archivo?.. gracias te agradeceria la ayuda..

Escribe un comentario