Hay funciones predefinidas para ejecutar consultas a una base de datos de Oracle en PHP, sin embargo, hay que instalar el SDK y el cliente de Oracle para poder utilizarlas, aquí va una pequeña guía de cómo hacer funcionar la combinación en un Ubuntu Server 16.04 LTS, probablemente funcione para otras distribuciones. Descargamos el cliente de Oracle, en este caso es la versión "Instant Client for Linux x86-64", de ahí hay que bajar los archivos "Instant Client Package - Basic" y "Instant Client Package - SDK". Una vez que los bajamos, digamos en /tmp/ vamos a descomprimirlos. Hay que tener un entorno de compilación básico antes, vamos a instalar los siguientes paquetes con apt:
$ sudo apt-get install pear unzip php7.0-dev
Ya que tenemos los archivos en /tmp/, los descomprimimos... hasta la fecha de hoy la versión es la 12.1, así que deberíamos tener archivos como instantclient-basic-linux.x64-12.1.0.2.0.zip y instantclient-sdk-linux.x64-12.1.0.2.0.zip, así que ya teniendo el programa unzip, ponemos:
cd /tmp unzip instantclient-basic-linux.x64-12.1.0.2.0.zip unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip # lo anterior nos creará un directorio nuevo /tmp/instantclient_12_1 sudo mv /tmp/instantclient_12_1 /usr/local/lib/
Una vez que hemos movido los archivos, preparamos algunas variables de entorno:
# creamos o editamos el archivo /etc/environment y añadimos: # Oracle Instant Client LD_LIBRARY_PATH="/usr/local/lib/instantclient_11_2" ORACLE_BASE="/usr/local/lib/instantclient_12_1" LD_LIBRARY_PATH="/usr/local/lib/instantclient_12_1" TNS_ADMIN="/usr/local/lib/instantclient_12_1" ORACLE_HOME="/usr/local/lib/instantclient_12_1" # por último, cargamos las variables: source /etc/environment # comprobamos que esté bien: echo $ORACLE_HOME # lo anterior nos debe dar de resultado en consola: /usr/local/lib/instantclient_12_1
Luego, vamos a crear un enlace simbólico de un archivo que ahí viene:
cd $ORACLE_HOME sudo ln -s libclntsh.so.12.1 libclntsh.so
Ahora si vamos a compilar el módulo oci8.so con pecl:
pecl install oci8
Cuando nos pregunte la localización del SDK y Oracle, escribimos: instantclient,/usr/local/lib/instantclient_12_1
Si todo salió bien, nos debe mostrar al final unas líneas como esta: Instant client, Build process completed successfully Installing '/usr/lib/php/20151012/oci8.so' install ok: channel://pecl.php.net/oci8-2.1.2 configuration option "php_ini" is not set to php.ini location You should add "extension=oci8.so" to php.ini
Ahora, debemos cargar la configuración para que PHP la cargue, en mi caso como utilizo Nginx lo tengo con FPM, así que escribo un archivo en /etc/php/7.0/fpm/conf.d/20-oci.ini con el contenido:
extension=oci8.so
Ya si quiero también utilizarlo en línea de comandos, lo copio a /etc/php/7.0/cli/conf.d/ Reiniciamos php-fpm y listo, ya tenemos disponibles las funciones, bastaría para comprobar, en línea de comandos:
$ php -i | grep -i oracle # lo anterior, daría una salida como: Oracle Run-time Client Library Version => 12.1.0.2.0 Oracle Compile-time Instant Client Version => 12.1 ORACLE_BASE => /usr/local/lib/instantclient_12_1 ORACLE_HOME => /usr/local/lib/instantclient_12_1 $_SERVER['ORACLE_BASE'] => /usr/local/lib/instantclient_12_1 $_SERVER['ORACLE_HOME'] => /usr/local/lib/instantclient_12_1
Eso es todo :-).