Introducción

Hace unos días tuve unos problemas para vincular un proyecto de laravel con oracle, la base de datos estaba instalada en un servidor remoto en Windows, y el proyecto laravel, estaba siendo desarrollado con in cliente en Fedora 36.

Características

  • Servidor oracle 19.3 como bases de datos instalado en Windows
  • Laravel 8
  • PHP 8.1
  • XAMPP 8.1.6
  • Cliente de desarrollo Fedora 36
  • IDE VScode
  • Plugin utilizado para vincular Yajra\oci8
  • Instantclient 19.9

Descargar archivo de instalación

Descargar los archivos que correspondan a la versión requerida para su proyecto, en este caso se usaron las versiones 19.9, las cuales eran las compatibles con oci8 para php 8.1.

Descargar los archivos .zip que correspondan al SDK y el archivo que diga Basic, del sitio oficial de oracle: https://www.oracle.com/database/technologies/instant-client/precompiler-downloads.html

  • instantclient-sdk-linux.x64-19.15.0.0.0dbru.zip
  • instantclient-basic-linux.x64-19.9.0.0.0dbru.zip

Instalación

Previamente se requiere la instalación de XAMPP, aquí la guía de instalación: https://blog.linuxitos.com/post/instalar-xampp-8-1-6-fedora-36

Una vez descargado los archivos correspondientes a la versión que se requiera, se procede a instalar y configurar.

Crear un directorio en la ruta /opt con el nombre de oracle, y dentro otra carpeta con la versión instantclient_19_9

sudo nautilus

Desde el explorador de archivos ir la ruta /opt/oracle/instantclient_19_9 y descomprimir el contenido de los archivos .zip descargados, únicamente el contenido y no la carpeta principal

Una vez copiado los archivos, instalar los siguientes paquetes:

sudo dnf install libnsl mod_perl php php-devel php-cli php-pdo php-gd composer php-pear libaio

Una vez instalado los paquetes, ejecutar los siguientes comandos:

sudo sh -c "echo /opt/oracle/instantclient_19_9 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig

Editar el archivo de configuración de la termina que usen, en éste caso se usa zsh por lo que se debe editar el archivo ~/.zshrc, en caso de que sea por defecto bash, el archivo será ~/.bashrc abrir el archivo, y en la sección de export, agregar las siguientes líneas:

export PATH=/opt/oracle/instantclient_19_9:$PATH
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9:$LD_LIBRARY_PATH

Una vez copiado los archivos, se procede a instalar oci8 con el siguiente comando:

sudo pecl install oci8

Si por alguna razón marca error con el archivo oci8_dtrace_gen.h; entonces intentar compilar de ésta forma

sudo PHP_DTRACE=yes pecl install oci8

En éste comando, solicitará el directorio de instalación de instantclient, por lo que se debe ingresar la ruta de la siguiente manera:

instantclient,/opt/oracle/instantclient_19_9

Finalmente se edita el archivo /etc/php.ini para añadir la ruta de la libreria:

sudo gnome-text-editor /etc/php.ini

Y añadir en la sección de librerías, la siguiente línea:

extension="/lib64/php/modules/oci8.so"

Para verificar que se haya activado correctamente la librería, con el comando siguiente deberá mostrar la siguiente salida:

php -m |grep oci8

Y si la salida es parecida a ésta, entonces la instalación fue satisfactoria, de otro modo, revisar el proceso de instalación, y ahora, ya se podrá utiliazar desde laravel.

Si por alguna razón no lo muestra, o marca error, reiniciar el equipo, o bien cerrar la terminal y volver a iniciarla.

Ahora, XAMPP se usó como el servidor de PHP, en éste ejemplo, no se usar PHP instalado de manera independiente, sino que se usa a través de XAMPP. Por lo que el proyecto debe estar alojado en /opt/lampp/htdocs/ una vez que se inicie, se podrá lanzar laravel

sudo /opt/lampp/lampp start

Iniciar laravel

php artisan serve

Actualizar OCI8 en cada versión de PHP

En cada actualización de versión de PHP es necesario actualizar la librería, y para ésto se debe ejecutar los comandos siguientes:

sudo pecl uninstall oci8

Una vez desinstalado la extensión, ahora es necesario volver a instalar para que se compile de nuevo:

sudo pecl install oci8
sudo PHP_DTRACE=yes pecl install oci8

Y eso sería todo

Fuentes:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *