Usar el cliente de Oracle con PHP 7.2 en Ubuntu 18.04 LTS

oracle php

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 para poder usarlas. Va una guía de cómo hacer funcionar la combinación en un Ubuntu Server 18.04 LTS, probablemente sirva para otras distribuciones.

Descargamos el cliente de Oracle de la página oficial, en este caso es:

Instant Client for Linux x86-64, la última versión (la 12.2.0.1.0):

- instantclient-basic-linux.x64-12.2.0.1.0.zip

- instantclient-sdk-linux.x64-12.2.0.1.0.zip

Una vez descargados los subimos a nuestro servidor, en este caso los dejaré en /tmp, luego:

apt install unzip

cd /tmp/

unzip instantclient-basic-linux.x64-12.2.0.1.0.zip

unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

sudo mv instantclient_12_2 /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_12_2"

ORACLE_BASE="/usr/local/lib/instantclient_12_2"

TNS_ADMIN="/usr/local/lib/instantclient_12_2"

ORACLE_HOME="/usr/local/lib/instantclient_12_2"

# 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_2

# 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 # así viene

Ahora si vamos a compilar el módulo oci8.so con pecl:

# instalamos pear (pecl) y php dev, luego oci8

apt install php-pear php7.2-dev

pecl install oci8

# Cuando nos pregunte la localización del SDK y Oracle, escribimos:

### instantclient,/usr/local/lib/instantclient_12_2

#

# Si todo salió bien, al final dirá un mensaje:

# Build process completed successfully

# Installing '/usr/lib/php/20170718/oci8.so'

# install ok: channel://pecl.php.net/oci8-2.1.8

# configuration option "php_ini" is not set to php.ini location

# You should add "extension=oci8.so" to php.ini

Ahora, debemos crear la configuración para que PHP la cargue:

echo "extension=oci8.so" | tee /etc/php/7.2/mods-available/oracle.ini

# listo, ahora si queremos añadirlo a PHP-FPM:

cd /etc/php/7.2/fpm/conf.d && ln -s /etc/php/7.2/mods-available/oracle.ini ./20-oracle.ini

# en línea de comandos:

cd /etc/php/7.2/cli/conf.d && ln -s /etc/php/7.2/mods-available/oracle.ini ./20-oracle.ini

# este paso es importante: añadimos la biblioteca del cliente de oracle a ldconfig:

echo $ORACLE_HOME | tee /etc/ld.so.conf.d/oracle.conf

ldconfig -v

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:

/etc/php/7.2/cli/conf.d/20-oracle.ini,

Oracle Run-time Client Library Version => 12.2.0.1.0

Oracle Compile-time Instant Client Version => 12.2

Ahora pues ya sólo probar con un script de ejemplo:

<?php

# conectar a servidor ORACLE @toro https://tar.mx

$SERVER = "127.0.0.1";

$PORT = 1521;

$SERVICE= "NOMBRE_SERVICIO_ORACLE";

$DB_OCI = sprintf('(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %d)))

(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = %s)

(FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5))))',$SERVER,$PORT,$SERVICE);

$ora = oci_connect("USUARIO", "CONTRASEÑA", $DB_OCI,'AL32UTF8');

if(!$ora) die("No se puede conectar al servidorn");

//todo ok, debería decir algo como: Resource id #NUMERO

print_r($ora);

Puedes entonces empezar a hacer tus consultas a la DB de Oracle desde PHP :-)

En caso de que no se ejecute ldconfig con la configuración del lugar donde están ubicadas las bibliotecas, lanzará un error muy feo como el que sigue:

PHP Warning: PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/lib/php/20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/oci8.so.so (/usr/lib/php/20170718/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

+ fotos

Almacenado en PHP, Linux, Oracle

por Jorge Martínez Mauricio :)

¿Algo que comentar?


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

Relacionadas

    blog / fotos / archivo

    Fotografías de

    Usar el cliente de Oracle con PHP 7.2 en Ubuntu 18.04 LTS

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