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.
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
sudo apt-get install libaio1 php-pear php7-dev
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.
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
Após seguir o tutorial executar o comando abaixo para reiniciar o fpm
sudo service phpX.X-fpm restart