Usar Oracle con PHP 7 en Ubuntu 16.04 LTS

Usar Oracle con PHP 7 en Ubuntu 16.04 LTS

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

+ fotos / videos

Almacenado en Oracle, PHP, Linux

por Jorge Martínez Mauricio :)

blog / fotos / archivo

Usar Oracle con PHP 7 en Ubuntu 16.04 LTS

tar.mx es un blog sobre fotografía, tecnología y otras chunches

modificado martes 13 de julio de 2021, 13:08

cuentame