Skip to content

Instantly share code, notes, and snippets.

@rafaelqm
Last active January 23, 2021 22:23
Show Gist options
  • Save rafaelqm/c84dc5e5b75ec9dd28d61da67938f48f to your computer and use it in GitHub Desktop.
Save rafaelqm/c84dc5e5b75ec9dd28d61da67938f48f to your computer and use it in GitHub Desktop.
Instalação lib para conexão ao Oracle no PHP 7.0 à 7.4

Instalar o módulo OCI8 (Oracle) no Ubuntu 14.04 ou 16.04 ou 18.04 (detalhes no final)

1 - Instalar PHP7 e Apache 2 / Nginx

2 - Baixar o Oracle Instant Client

Para que o módulo php-oci8 funcione, é necessário baixar o Instant Client.

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Baixe os arquivos Instant Client Package - Basic e Instant Client Package - SDK

OBS: Faça o download dos arquivos ZIP de acordo com a versão do seu banco de dados.

3 - Preparar Instant Client

Extraia o basic e o sdk para uma pasta instantclient dentro de /opt

unzip instantclient-basic-linux.x64-XX.X.X.X.X.zip -d /opt

unzip instantclient-sdk-linux.x64-XX.X.X.X.X.zip -d /opt

Os comandos acima irão extrair os 2 arquivos ZIP e colocá-los dentro de uma pasta chamada instantclient_XX_X, sendo que o X indica a versão baixada.

Agora vamos criar alguns links simbólicos dentro da pasta.

cd /opt/instantclient_XX_X
ln -s libclntsh.so.XX.X libclntsh.so
ln -s libocci.so.XX.X libocci.so

4 - Instalar bibliotecas necessárias

sudo apt-get install libaio1 php-pear php7-dev

5 - Preparar PECL/PEAR

pear upgrade --force pear

pear upgrade

pear channel-update pear.php.net

pecl channel-update pecl.php.net

se der problema qdo for rodar o comando pecl channel-update pecl.php.net

a solução é rodar o comando:

sudo vi `which pecl`

e dentro do arquivo q abrir vai lá embaixo no bloco

exec $PHP -C -n -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"

E remova o -n

ficando assim: exec $PHP -C -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"

aí depois é só continuar

6 - Instalar PECL/PEAR

pecl install oci8-2.2.0
// Abaixo apenas para PHP8
// pecl install oci8 

Durante a instalação, o PECL irá pedir para você localizar o Instant Client e será exibida uma mensagem como abaixo: Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :

Digite o código abaixo e em seguida pressione Enter

instantclient,/opt/instantclient_XX_X

7 - Incluir o OCI8 ao php.ini (caso estiver no apache)

sudo nano /etc/php7.1/apache2/php.ini

(caso estiver no nginx)

sudo nano /etc/php7.1/fpm/php.ini

No final do arquivo acrescente a linha abaixo:

extension=oci8.so

Para salvar as alterações, aperte CTRL+X, digite Y e em seguida pressione Enter

8 - Reiniciar o Apache

sudo service apache2 restart

*** Se estiver no FPM reiniciar o FPM ***

sudo service php7-fpm restart

Verifique no phpinfo() se o módulo esta ativo.

9 - Exportar os PATH (variáveis de ambiente)

export PATH=/opt/instantclient_XX_X:$PATH

export LD_LIBRARY_PATH=/opt/instantclient_XX_X:$LD_LIBRARY_PATH

OBS: Não apague a pasta /opt/instantclient_XX_X pois o OCI8 deixará de funcionar.

Para UBUNTU 18.04

LD_LIBRARY_PATH não é propagada para o processo FPM quando iniciado via systemd.

Em outras palavras, PHP-FPM não está ignorando LD_LIBRARY_PATH, mas ao invés, não está sendo transmitido para o php-fpm. E quaisquer tentativas para adicionar o LD_LIBRARY_PATH dentro das configurações do PHP-FPM são fúteis, porque é bem tarde que ele preenche estes valores.

Logo deve-se adicionar ao systemd rodando estes comandos:

mkdir /etc/systemd/system/php7.1-fpm.service.d
touch /etc/systemd/system/php7.1-fpm.service.d/environment.conf

E adicione a este arquivo:

[Service]
Environment=LD_LIBRARY_PATH=/opt/instantclient_XX_X

E faça o systemd ler:

systemctl daemon-reload
systemctl restart php7.1-fpm
@demartinezraul
Copy link

Após seguir o tutorial executar o comando abaixo para reiniciar o fpm
sudo service phpX.X-fpm restart

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