Cómo instalar oci8 en Ubuntu 18.04
Anuncio:
En esta ocasión vamos a ver cómo instalar oci8 en Ubuntu 18.04. Oci8 es una librería de Oracle para acceder a bases de datos Oracle desde PHP. Puedes leer más información en la web oficial de PHP para oci8 .
En primer lugar, vamos a descargar el paquete básico y sdk del instantclient, al momento de escribir este artítulo son instantclient-basic-linux.x64-12.2.0.1.0.zip y instantclient-sdk-linux.x64-12.2.0.1.0.zip. Descargamos estos paquetes de la web oficial de la librería oci de Oracle.
Una vez descargados, los descomprimimos en un directorio llamado instantclient_12_2 por ejemplo. El directorio del SDK, hay que meterlo dentro del directorio del paquete básico. Una vez hecho esto, vamos a crear el siguiente directorio:
sudo mkdir /opt/oracle
Ahora, vamos a mover los paquetes que hemos descomprimido al directorio anteriormente creado:
sudo mv instantclient_12_2 /opt/oracle/instantclient
Después, cambiamos los permisos del directorio anterior:
sudo chown -R root:www-data /opt/oracle
A continuación, instalamos (si no lo tenemos ya) las dependencias de la librería oci8:
sudo apt install php7.2-dev php-pear build-essential libaio1
Ahora, creamos los siguientes enlaces simbólicos:
sudo ln -s /opt/oracle/instantclient/libclntsh.so.12.1 /opt/oracle/instantclient/libclntsh.so
sudo ln -s /opt/oracle/instantclient/libocci.so.12.1 /opt/oracle/instantclient/libocci.so
Una vez realizado esto, debemos agregar el directorio de instantclient a los archivos de configuración:
sudo echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient
Si no te deja realizar esto por permisos de usuario, asegurate de que tu usuario está dentro del grupo de root o bien inicia sesión con root con:
sudo su
Y prueba de nuevo a realizar el paso anterior. A continuación lanzamos:
sudo ldconfig
Cuando termine de ejecutarse el proceso anterior, haremos:
sudo pecl install oci8
Nos va a preguntar por el directorio donde está la librería instalada y tendremos que introducir:
instantclient,/opt/oracle/instantclient
Ahora, debemos activar la librería al archito php.ini de PHP con:
sudo echo "extension = oci8.so" >> /etc/php/7.2/cli/php.ini
Y lo mismo al archivo php.ini de Apache:
sudo echo "extension = oci8.so" >> /etc/php/7.2/apache2/php.ini
Después de ésto, debemos configurar las variables de entorno como sigue:
sudo echo "LD_LIBRARY_PATH=\"/opt/oracle/instantclient\"" >> /etc/environment
sudo echo "ORACLE_HOME=\"/opt/oracle/instantclient\"" >> /etc/environment
Y lo mismo para Apache:
sudo echo "export LD_LIBRARY_PATH=\"/opt/oracle/instantclient\"" >> /etc/apache2/envvars
sudo echo "export ORACLE_HOME=\"/opt/oracle/instantclient\"" >> /etc/apache2/envvars
Por último vamos a reiniciar Apache para que cargue la nueva configuración:
service apache2 restart
Y listo, ya hemos terminado. Ya sabemos cómo instalar oci8 en Ubuntu 18.04.
Para probar el funcionamiento podemos crear un archivo llamado test.php con el siguiente contenido:
$conn = oci_connect('usuario_oracle', 'pass_oracle', 'IP_SERVER_ORACLE:PORT_ORACLE/schema');
Y ejecutarlo desde la consola con:
php test.php
En caso de que nos muestre un mensaje de este tipo:
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
PHP Fatal error: Uncaught Error: Call to undefined function oci_connect() in /var/www/html/.....
Es porque no se ha ejecutado bien el comando ldconfig, lo volvemos a lanzar:
sudo ldconfig
También podrías ejecutar el script como sudo:
sudo php test.php
Pero es mejor volver a ejecutar ldconfig.
Puedes aprender más en nuestra sección de Servidores.
Espero que te haya sido de utilidad!