Skip to content

Instantly share code, notes, and snippets.

@philipecampos
Last active February 20, 2020 15:37
Show Gist options
  • Save philipecampos/d36d4c374445dc3a0ec9f685b19d61df to your computer and use it in GitHub Desktop.
Save philipecampos/d36d4c374445dc3a0ec9f685b19d61df to your computer and use it in GitHub Desktop.
Configurar php para acessar banco oracle no Ubuntu 18.04

Configurar php para acessar banco oracle no Ubuntu 18.04

Pré-requisitos

  • Baixar os arquivos da oracle:
  • BASIC (instantclient-basic-linux.x64-19.3.0.0.0dbru.zip)
  • SDK (instantclient-sdk-linux.x64-19.3.0.0.0dbru.zip)

Download

  • Quando testei este tutorial os pacotes estavam na versão - 19.3.0.0.0
  • Instalar os seguintes pacotes no ubuntu
sudo apt install build-essential
sudo apt install php-dev php-pear libaio1

Configurando variáveis de ambiente

A instalação do Instant Client necessita de algumas variáveis de ambiente para poder enxergar a biblioteca. Editar o seguinte arquivo:

  • /etc/environment

Adicionar o seguinte conteúdo no final do arquivo

# Oracle Instant Client 
LD_LIBRARY_PATH="/usr/local/lib/instantclient_19_3" 
TNS_ADMIN="/usr/local/lib/instantclient_19_3" 
ORACLE_BASE="/usr/local/lib/instantclient_19_3" 
ORACLE_HOME=$ORACLE_BASE

Descompactar os arquivos baixados

cd /usr/local/lib
unzip ~/Downloads/instantclient-basic-linux.x64-19.3.0.0.0dbru.zip
unzip ~/Downloads/instantclient-sdk-linux.x64-19.3.0.0.0dbru.zip

Criar o seguinte link simbólico

sudo ln -s /usr/local/lib/instantclient_19_3/libclntsh.so.19.1 
/usr/local/lib/instantclient_19_3/libclntsh.so

Execute a instalação

sudo pecl install oci8

O comando acima vai solicitar a seguinte entrada:

instantclient,/usr/local/lib/instantclient_19_3

Configurando o php para reconhecer o driver compilado

Criar o arquivo

  • sudo vi /etc/php/7.2/mods-available/oci8.ini

Adicionar o Seguinte conteúdo ao arquivo:

extension=oci8.so 

Habilitar módulo oci para oracle no php

sudo phpenmod oci8

Reiniciar apache

sudo /etc/init.d/apache2 restart
  • Se tudo foi instalado corretamente uma tabela no phpinfo(); deve aparecer chamada OCI8 com as informações do driver.
  • É possível testar se o módulo oci8 foi carregado com o seguinte comando:
php -m | grep 'oci8'

Erros que podem acontecer

Quando executar comandos com php via linha de comando, pode surgir a seguinte mensagem de erro:

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

Isso acontece porque a variável LD_LIBRARY_PATH não foi exportada para o bash. Para corrigir isto basta exportar a variável:

export LD_LIBRARY_PATH="/usr/local/lib/instantclient_19_3"

Isto só funciona na sessão atual do bash. Para tornar a solução definitiva adicione o código acima no final do arquivo ~/.bashrc

Talvez a variável LD_LIBRARY_PATH não seja exportada para o apache. Para corrigir isto basta criar o seguinte arquivo:

sudo vi /etc/ld.so.conf.d/apache_oci.conf

Adicione o seguinte conteúdo ao arquivo:

/usr/local/lib/instantclient_19_3

Execute o seguinte comando para carregar a nova configuração:

sudo ldconfig

Talvez seja necessário reiniciar o apache:

sudo /etc/init.d/apache2 restart

Referências:

https://help.ubuntu.com/community/PHPOracle

https://pecl.php.net/package/oci8

https://gist.github.com/hewerthomn/81eea2935051eb2500941a9309bca703

https://serverfault.com/questions/201709/how-to-set-ld-library-path-in-ubuntu

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment