Oracle y PHP5 (y van tres)
Recientemente me ha tocado reinstalar un servidor donde tenía que montar una aplicación que usa el cambalache que monté anteriormente con el módulo pdo_oci.
He podido descubrir que esta no es la manera más sencillo ni correcta de hacerlo. Resulta que desde Oracle nos dicen que nos olvidemos de pdo_oci y que usemos oci8. Recomiento la lectura de: Underground PHP and Oracle Manual
Pues bien, a ello me he lanzado y ha sido sorprendente la facilidad con la que se puede instalar el soporte de oracle si lo haces con el módulo oci8. Los pasos a seguir son los siguientes:
- Descargar las librerías "Basic" y "SDK" del Instant Client de Oracle. Esta vez podremos usar el último que hayan sacado. Yo lo he hecho con la versión 11.1 y funciona de maravilla. Podéis descargarlo todo aquí: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
- Crea el directorio /opt/oracle/instantclient, mueve los zips allí y descomprímelos. Creará un directorio /opt/oracle/instantclient/instantclient_11_1
- Instala, si no lo has hecho ya, los paquetes php-pear, php5-dev y build-essential
- Ejecuta "pecl install oci8" con privilegios de root (sudo o lo que más te apetezca)
- Te preguntará por la ruta a las librerías. Debes configurar la ruta para que apunte al directorio recién creado y pasarle algún parámetro más, por lo que deberías escribir "shared,instanclient,/opt/oracle/instantclient/instantclient_11_1" (sin las comillas, claro)
- Después de hacer sus cosillas, el instalador te habrá dejado en /usr/lib/php5/20060613+lfs un fichero llamado oci8.so. Ahora tienes que decirle a PHP5 que lo tenga en cuenta escribiendo al final de los ficheros "php.ini" que tengas la línea "extension=oci8.so". Los ficheros "php.ini" están en /etc/php5/cli y /etc/php5/apache
Solo tienes que tener una cosa más en cuenta: Asegúrate de que el usuario www-data puede acceder a la ruta /opt/oracle... porque si no, verás un mensaje de error como este:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20060613+lfs/oci8.so' - libaio.so.1: cannot open shared object file: No such file or directory in Unknown on line 0
Además, si vas a ejecutar scripts con tu usuario de sistema, tu también tendrás que tener acceso al directorio.
Nada más :)
En el próximo post pondré como configurar Symfony para que utilice las funciones de oci8 en vez de las de pdo_oci.
¿Te gustó este artículo?
Aún no hay trackbacks.

10 Febrero, 2010 - 13:07
No llegó nunca ese famoso post para configurar Symfony con oci8???
17 Febrero, 2010 - 11:50
@Oriol pues resulta que no es posible. Symfony usa Propel o Doctrine como ORMs, y ambos se fundamentan sobre PDO, por lo que no hay más remedio que usar el driver pdo_oci para nuestras aplicaciones en Symfony. Una pena.