Usar Oracle con PHP 7 en Ubuntu 16.04 LTS

oraclephp

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 :-).

publicidad

Oracle, PHP, Linux

por Jorge Martínez Mauricio :)

¿Algo que comentar?


Populares estos días

    Suscríbete por correo electrónico, recibirás los nuevos escritos antes que nadie y es gratis 😊


    tar.mx es un blog personal de Jorge Martínez Mauricio